시크릿을 사용하여 Apache 에어플로우 연결 구성 AWS Secrets Manager - Amazon Managed Workflows for Apache Airflow

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

시크릿을 사용하여 Apache 에어플로우 연결 구성 AWS Secrets Manager

AWS Secrets Manager Apache Airflow용 Amazon 관리형 워크플로우 환경에서 지원되는 대체 아파치 에어플로우 백엔드입니다. 이 가이드에서는 Apache Airflow용 Amazon Managed Workflows에 Apache Airflow 변수 및 Apache Airflow 연결에 대한 암호를 안전하게 저장하는 데 사용하는 AWS Secrets Manager 방법을 보여줍니다.

참고
  • 생성한 암호에 대해 요금이 부과됩니다. Secrets Manager 요금에 대한 자세한 내용은 AWS 요금을 참조하십시오.

1단계: Amazon MWAA에 Secrets Manager 암호 키에 액세스할 수 있는 권한을 제공합니다.

Amazon MWAA 환경의 실행 역할에는 AWS Secrets Manager의 암호 키를 읽을 수 있는 권한이 필요합니다. 다음 IAM 정책은 관리형 정책을 사용한 읽기-쓰기 액세스를 허용합니다. AWS SecretsManagerReadWrite

실행 역할에 정책을 연결하려면
  1. Amazon MWAA 콘솔에서 환경 페이지를 엽니다.

  2. 환경을 선택합니다.

  3. 권한 창에서 실행 역할을 선택합니다.

  4. 정책 연결을 선택합니다.

  5. 정책 필터링 텍스트 필드에 SecretsManagerReadWrite을(를) 입력합니다.

  6. 정책 연결을 선택합니다.

AWS 관리형 권한 정책을 사용하지 않으려면 환경의 실행 역할을 직접 업데이트하여 Secrets Manager 리소스에 대한 모든 수준의 액세스를 허용할 수 있습니다. 예를 들어 다음 정책 설명은 Secrets Manager에서 특정 AWS 지역에 생성한 모든 비밀에 대한 읽기 액세스 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:us-west-2:012345678910:secret:*" }, { "Effect": "Allow", "Action": "secretsmanager:ListSecrets", "Resource": "*" } ] }

2단계: Secrets Manager 백엔드를 Apache Airflow 구성 옵션으로 생성

다음 섹션에서는 Amazon MWAA 콘솔에서 백엔드용 Apache Airflow 구성 옵션을 생성하는 방법을 설명합니다. AWS Secrets Manager airflow.cfg에서 동일한 이름의 구성 설정을 사용하는 경우 다음 단계에서 생성하는 구성이 우선하며 구성 설정을 재정의합니다.

  1. Amazon MWAA 콘솔에서 환경 페이지를 엽니다.

  2. 환경을 선택합니다.

  3. 편집을 선택합니다.

  4. 다음을 선택합니다.

  5. Airflow 구성 옵션 창에서 사용자 지정 구성 추가를 선택합니다. 다음 키-값 쌍을 추가합니다:

    1. secrets.backend: airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend

    2. secrets.backend_kwargs: {"connections_prefix" : "airflow/connections", "variables_prefix" : "airflow/variables"} 이렇게 하면 Apache Airflow가 airflow/connections/*airflow/variables/* 경로에서 연결 문자열과 변수를 찾도록 구성됩니다.

      조회 패턴을 사용하면 Amazon MWAA가 사용자를 대신하여 Secrets Manager에 보내는 API 호출 횟수를 줄일 수 있습니다. 조회 패턴을 지정하지 않으면 Apache Airflow는 구성된 백엔드에서 모든 연결과 변수를 검색합니다. 패턴을 지정하면 Apache Airflow가 찾는 가능한 경로를 좁힐 수 있습니다. 따라서 Secrets Manager를 Amazon MWAA와 함께 사용할 때 비용이 절감됩니다.

      조회 패턴을 지정하려면 connections_lookup_patternvariables_lookup_pattern 파라미터를 지정합니다. 이러한 파라미터는 문자열을 입력으로 받아들입니다. RegEx 예를 들어 test(으)로 시작하는 암호를 찾으려면 secrets.backend_kwargs에 다음을 입력합니다.

      { "connections_prefix": "airflow/connections", "connections_lookup_pattern": "^test", "variables_prefix" : "airflow/variables", "variables_lookup_pattern": "^test" }
      참고

      connections_lookup_patternvariables_lookup_pattern을(를) 사용하려면 apache-airflow-providers-amazon 버전 7.3.0 이상을 설치해야 합니다. Provider 패키지를 최신 버전으로 업데이트하는 방법에 대한 자세한 내용은 새 제공자 패키지 지정 단원을 참조하십시오.

  6. 저장을 선택합니다.

3단계: 아파치 에어플로우 AWS 연결 URI 문자열 생성

연결 문자열을 만들려면 키보드의 “탭” 키를 사용하여 Connection 개체의 키-값 쌍을 들여쓰십시오. 또한 쉘 세션에서 extra 객체에 대한 변수를 만드는 것이 좋습니다. 다음 섹션에서는 Apache Airflow 또는 Python 스크립트를 사용하여 Amazon MWAA 환경을 위한 Apache Airflow 연결 URI 문자열을 생성하는 단계를 안내합니다.

Apache Airflow CLI

다음 쉘 세션은 로컬 Airflow CLI를 사용하여 연결 문자열을 생성합니다. CLI가 설치되어 있지 않은 경우 Python 스크립트를 사용하는 것이 좋습니다.

  1. Python 쉘 세션을 엽니다.

    python3
  2. 다음 명령을 입력합니다.

    >>> import json
  3. 다음 명령을 입력합니다.

    >>> from airflow.models.connection import Connection
  4. 쉘 세션에서 extra 객체에 대한 변수를 생성합니다. YOUR_EXECUTION_ROLE_ARN의 샘플 값을 실행 역할 ARN으로 대체하고 YOUR_REGION의 리전을 us-east-1처럼 대체합니다.

    >>> extra=json.dumps({'role_arn': 'YOUR_EXECUTION_ROLE_ARN', 'region_name': 'YOUR_REGION'})
  5. 연결 객체를 생성합니다. myconn의 샘플 값을 Apache Airflow 연결 이름으로 대체합니다.

    >>> myconn = Connection(
  6. 키보드의 '탭' 키를 사용하여 연결 객체에 다음 키-값 쌍을 각각 들여쓰기할 수 있습니다. 샘플 값을 빨간색으로 대체합니다.

    1. 연결 유형을 지정하십시오. AWS

      ... conn_id='aws',
    2. Apache Airflow 데이터베이스 옵션을 지정합니다.

      ... conn_type='mysql',
    3. Amazon MWAA의 Apache Airflow UI URL을 지정합니다.

      ... host='288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com/home',
    4. Amazon AWS MWAA에 로그인하기 위한 액세스 키 ID (사용자 이름) 를 지정합니다.

      ... login='YOUR_AWS_ACCESS_KEY_ID',
    5. Amazon MWAA에 로그인하기 위한 AWS 보안 액세스 키 (암호) 를 지정합니다.

      ... password='YOUR_AWS_SECRET_ACCESS_KEY',
    6. extra 쉘 세션 변수를 지정합니다.

      ... extra=extra
    7. 연결 객체를 종료합니다.

      ... )
  7. 연결 URI 문자열을 인쇄합니다.

    >>> myconn.get_uri()

    응답에 연결 URI 문자열이 표시되어야 합니다.

    'mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA&region_name=us-east-1'
Python script

다음 Python 스크립트에는 Apache Airflow CLI가 필요하지 않습니다.

  1. 다음 코드 샘플의 내용을 복사하고 로컬의 동일한 디렉터리에 mwaa_connection.py로 저장합니다.

    import urllib.parse conn_type = 'YOUR_DB_OPTION' host = 'YOUR_MWAA_AIRFLOW_UI_URL' port = 'YOUR_PORT' login = 'YOUR_AWS_ACCESS_KEY_ID' password = 'YOUR_AWS_SECRET_ACCESS_KEY' role_arn = urllib.parse.quote_plus('YOUR_EXECUTION_ROLE_ARN') region_name = 'YOUR_REGION' conn_string = '{0}://{1}:{2}@{3}:{4}?role_arn={5}&region_name={6}'.format(conn_type, login, password, host, port, role_arn, region_name) print(conn_string)
  2. 자리 표시자를 빨간색으로 대체합니다.

  3. 다음 스크립트를 실행하여 연결 문자열을 생성합니다.

    python3 mwaa_connection.py

4단계: Secrets Manager에서 변수 추가

다음 섹션에서는 Secrets Manager에서 변수에 대한 암호를 생성하는 방법을 설명합니다.

암호를 생성하려면
  1. AWS Secrets Manager 콘솔을 엽니다.

  2. 새 암호 저장을 선택합니다.

  3. 다른 유형의 암호를 선택합니다.

  4. 이 암호에 저장할 키/값 쌍 지정 창에서 일반 텍스트를 선택합니다.

  5. 변수 값을 다음 형식의 일반 텍스트로 추가합니다.

    "YOUR_VARIABLE_VALUE"

    예를 들어, 정수를 지정하려면:

    14

    예를 들어 문자열을 지정하려면:

    "mystring"
  6. 암호화 키의 경우 드롭다운 목록에서 AWS KMS 키 옵션을 선택합니다.

  7. 암호 이름의 텍스트 필드에 다음 형식으로 이름을 입력합니다.

    airflow/variables/YOUR_VARIABLE_NAME

    예:

    airflow/variables/test-variable
  8. 다음을 선택합니다.

  9. 암호 구성 페이지의 암호 이름 및 설명 창에서 다음을 수행합니다.

    1. 암호 이름에 암호 이름을 입력합니다.

    2. (선택 사항) 설명에 암호에 대한 설명을 입력합니다.

    다음을 선택합니다.

  10. 순환 구성 - 옵션에서 기본 옵션을 그대로 두고 다음을 선택합니다.

  11. Secrets Manager에서 이 단계를 반복하여 원하는 만큼 변수를 추가합니다.

  12. 검토 페이지에서 암호를 검토한 후 저장을 선택합니다.

5단계: Secrets Manager에서 연결 추가

다음 섹션에서는 Secrets Manager에서 연결 문자열 URI에 대한 암호를 생성하는 방법을 설명합니다.

암호를 생성하려면
  1. AWS Secrets Manager 콘솔을 엽니다.

  2. 새 암호 저장을 선택합니다.

  3. 다른 유형의 암호를 선택합니다.

  4. 이 암호에 저장할 키/값 쌍 지정 창에서 일반 텍스트를 선택합니다.

  5. 연결 URI 문자열을 다음 형식의 일반 텍스트로 추가합니다.

    YOUR_CONNECTION_URI_STRING

    예:

    mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA&region_name=us-east-1
    주의

    Apache Airflow는 연결 문자열의 각 값을 구문 분석합니다. 작은따옴표나 큰따옴표를 사용해서는 안 됩니다. 그렇지 않으면 연결을 단일 문자열로 구문 분석합니다.

  6. 암호화 키의 경우 드롭다운 AWS KMS 목록에서 키 옵션을 선택합니다.

  7. 암호 이름의 텍스트 필드에 다음 형식으로 이름을 입력합니다.

    airflow/connections/YOUR_CONNECTION_NAME

    예:

    airflow/connections/myconn
  8. 다음을 선택합니다.

  9. 암호 구성 페이지의 암호 이름 및 설명 창에서 다음을 수행합니다.

    1. 암호 이름에 암호 이름을 입력합니다.

    2. (선택 사항) 설명에 암호에 대한 설명을 입력합니다.

    다음을 선택합니다.

  10. 순환 구성 - 옵션에서 기본 옵션을 그대로 두고 다음을 선택합니다.

  11. Secrets Manager에서 이 단계를 반복하여 원하는 만큼 변수를 추가합니다.

  12. 검토 페이지에서 암호를 검토한 후 저장을 선택합니다.

샘플 코드

리소스

다음 단계