

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

# AWS Secrets Manager 보안 암호를 사용하여 Apache Airflow 연결 구성
<a name="connections-secrets-manager"></a>

AWS Secrets Manager 는 Amazon Managed Workflows for Apache Airflow 환경에서 지원되는 대체 Apache Airflow 백엔드입니다. 이 주제에서는를 AWS Secrets Manager 사용하여 Amazon Managed Workflows for Apache Airflow 변수 및 Apache Airflow 연결에 대한 암호를 안전하게 저장하는 방법을 설명합니다.

**참고**  
보안 암호 생성 시 요금이 부과됩니다. Secrets Manager 요금에 대한 자세한 내용은 [AWS 요금](https://aws.amazon.com/secrets-manager/pricing/)을 참조하세요.
[AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store)는 Amazon MWAA에서 보안 암호 백엔드로도 지원됩니다. 자세한 내용은 [Amazon 공급자 패키지 설명서](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/secrets-backends/aws-ssm-parameter-store.html)를 참조하세요.

**Contents**
+ [1단계: Amazon MWAA에 Secrets Manager 암호 키에 액세스할 수 있는 권한을 제공합니다.](#connections-sm-policy)
+ [2단계: Secrets Manager 백엔드를 Apache Airflow 구성 옵션으로 생성](#connections-sm-aa-configuration)
+ [3단계: Apache Airflow AWS 연결 URI 문자열 생성](#connections-sm-aa-uri)
+ [4단계: Secrets Manager에서 변수 추가](#connections-sm-createsecret-variables)
+ [5단계: Secrets Manager에서 연결 추가](#connections-sm-createsecret-connection)
+ [샘플 코드](#connections-sm-samples)
+ [리소스](#connections-sm-blogs)
+ [다음 단계](#connections-sm-next-up)

## 1단계: Amazon MWAA에 Secrets Manager 암호 키에 액세스할 수 있는 권한을 제공합니다.
<a name="connections-sm-policy"></a>

Amazon MWAA 환경의 [실행 역할](mwaa-create-role.md)에는 AWS Secrets Manager의 암호 키를 읽을 수 있는 권한이 필요합니다. 다음 IAM 정책은 AWS관리형 [SecretsManagerReadWrite](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/SecretsManagerReadWrite$jsonEditor) 정책을 사용하여 읽기-쓰기 액세스를 허용합니다.

**실행 역할에 정책을 연결하려면**

1. Amazon MWAA 콘솔에서 [환경 페이지](https://console.aws.amazon.com/mwaa/home#/environments)를 엽니다.

1. 환경을 선택합니다.

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

1. **정책 연결**을 선택합니다.

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

1. **정책 연결**을 선택합니다.

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

------
#### [ JSON ]

****  

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

------

## 2단계: Secrets Manager 백엔드를 Apache Airflow 구성 옵션으로 생성
<a name="connections-sm-aa-configuration"></a>

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

1. Amazon MWAA 콘솔에서 [환경 페이지](https://console.aws.amazon.com/mwaa/home#/environments)를 엽니다.

1. 환경을 선택합니다.

1. **편집**을 선택합니다.

1. **다음**을 선택합니다.

1. **Airflow 구성 옵션** 창에서 **사용자 지정 구성 추가**를 선택합니다. 다음 키-값 페어를 추가합니다:

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

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

      [조회 패턴](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/secrets-backends/aws-secrets-manager.html#optional-lookup)을 사용하면 Amazon MWAA가 사용자를 대신하여 Secrets Manager에 보내는 API 호출 횟수를 줄일 수 있습니다. 조회 패턴을 지정하지 않으면 Apache Airflow는 구성된 백엔드에서 모든 연결과 변수를 검색합니다. 패턴을 지정하면 Apache Airflow가 검색하는 가능한 경로를 좁힐 수 있습니다. 따라서 Secrets Manager를 Amazon MWAA와 함께 사용할 때 비용이 절감됩니다.

      조회 패턴을 지정하려면 `connections_lookup_pattern` 및 `variables_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_pattern` 및 `variables_lookup_pattern`을(를) 사용하려면 `apache-airflow-providers-amazon` 버전 7.3.0 이상을 설치해야 합니다. Provider 패키지를 최신 버전으로 업데이트하는 방법에 대한 자세한 내용은 [제약 조건 파일](connections-packages.md#connections-packages-constraints) 섹션을 참조하세요.

1. **저장**을 선택합니다.

## 3단계: Apache Airflow AWS 연결 URI 문자열 생성
<a name="connections-sm-aa-uri"></a>

연결 문자열을 만들려면 키보드의 ‘tab’ 키를 사용하여 [Connection](https://airflow.apache.org/docs/stable/howto/connection/index.html) 객체의 키-값 페어를 들여쓰기 합니다. 또한 쉘 세션에서 `extra` 객체에 대한 변수를 만드는 것이 좋습니다. 다음 섹션에서는 Apache Airflow 또는 Python 스크립트를 사용하여 Amazon MWAA 환경을 위한 [Apache Airflow 연결 URI 문자열을 생성](https://airflow.apache.org/docs/apache-airflow/stable/howto/connection.html#generating-a-connection-uri)하는 단계를 안내합니다.

------
#### [ Apache Airflow CLI ]

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

1. Python 쉘 세션을 엽니다.

   ```
   python3
   ```

1. 다음 명령을 입력합니다.

   ```
   >>> import json
   ```

1. 다음 명령을 입력합니다.

   ```
   >>> from airflow.models.connection import Connection
   ```

1. 쉘 세션에서 `extra` 객체에 대한 변수를 생성합니다. *YOUR\$1EXECUTION\$1ROLE\$1ARN*의 샘플 값을 실행 역할 ARN으로 대체하고 *us-east-1*의 리전을 대체합니다(예: `us-east-1`).

   ```
   >>> extra=json.dumps({'role_arn': 'YOUR_EXECUTION_ROLE_ARN', 'region_name': 'us-east-1'})
   ```

1. 연결 객체를 생성합니다. `myconn`의 샘플 값을 Apache Airflow 연결 이름으로 대체합니다.

   ```
   >>> myconn = Connection(
   ```

1. 키보드의 '탭' 키를 사용하여 연결 객체에 다음 키-값 페어를 각각 들여쓰기할 수 있습니다. 샘플 값을 *빨간색*으로 대체합니다.

   1.  AWS 연결 유형을 지정합니다.

      ```
      ... conn_id='aws',
      ```

   1. Apache Airflow 데이터베이스 옵션을 지정합니다.

      ```
      ... conn_type='mysql',
      ```

   1. Amazon MWAA의 Apache Airflow UI URL을 지정합니다.

      ```
      ... host='288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com/home',
      ```

   1. Amazon MWAA에 로그인할 AWS 액세스 키 ID(사용자 이름)를 지정합니다.

      ```
      ... login='YOUR_AWS_ACCESS_KEY_ID',
      ```

   1. Amazon MWAA에 로그인할 AWS 보안 액세스 키(암호)를 지정합니다.

      ```
      ... password='YOUR_AWS_SECRET_ACCESS_KEY',
      ```

   1. `extra` 쉘 세션 변수를 지정합니다.

      ```
      ... extra=extra
      ```

   1. 연결 객체를 종료합니다.

      ```
      ... )
      ```

1. 연결 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 = 'us-east-1'
   								
   								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)
   ```

1. 자리 표시자를 *빨간색*으로 대체합니다.

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

   ```
   python3 mwaa_connection.py
   ```

------

## 4단계: Secrets Manager에서 변수 추가
<a name="connections-sm-createsecret-variables"></a>

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

**암호를 생성하려면**

1. [AWS Secrets Manager 콘솔](https://console.aws.amazon.com/secretsmanager/home#/environments)을 엽니다.

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

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

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

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

   ```
   "YOUR_VARIABLE_VALUE"
   ```

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

   ```
   14
   ```

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

   ```
   "mystring"
   ```

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

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

   ```
   airflow/variables/YOUR_VARIABLE_NAME
   ```

   예제:

   ```
   airflow/variables/test-variable
   ```

1. **다음**을 선택합니다.

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

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

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

   **다음**을 선택합니다.

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

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

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

## 5단계: Secrets Manager에서 연결 추가
<a name="connections-sm-createsecret-connection"></a>

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

**암호를 생성하려면**

1. [AWS Secrets Manager 콘솔](https://console.aws.amazon.com/secretsmanager/home#/environments)을 엽니다.

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

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

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

1. 연결 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는 연결 문자열의 각 값을 구문 분석합니다. 작은따옴표나 큰따옴표를 사용해서는 **안 됩니다**. 그렇게 하면 연결을 단일 문자열로 구문 분석합니다.

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

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

   ```
   airflow/connections/YOUR_CONNECTION_NAME
   ```

   예제:

   ```
   airflow/connections/myconn
   ```

1. **다음**을 선택합니다.

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

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

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

   **다음**을 선택합니다.

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

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

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

## 샘플 코드
<a name="connections-sm-samples"></a>
+ [Apache Airflow 연결을 위한 AWS Secrets Manager의 암호 키 사용](samples-secrets-manager.md)의 샘플 코드를 사용하여 이 페이지의 Apache Airflow 연결(`myconn`)에 암호 키를 사용하는 방법을 알아봅니다.
+ `test-variable`의 샘플 코드를 사용하여 이 페이지의 Apache Airflow 변수([Apache Airflow 변수에 AWS Secrets Manager 암호 키 사용](samples-secrets-manager-var.md))에 암호 키를 사용하는 방법을 알아봅니다.

## 리소스
<a name="connections-sm-blogs"></a>
+ 콘솔 및를 사용하여 Secrets Manager 보안 암호를 구성하는 방법에 대한 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [보안 암호 생성을](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) AWS CLI참조하세요.
+ [Apache Airflow 연결 및 변수를 AWS Secrets Manager으로 이동](https://aws.amazon.com/blogs/opensource/move-apache-airflow-connections-variables-aws-secrets-manager/)에서 Python 스크립트를 사용하여 대량의 Apache Airflow 변수 및 연결을 Secrets Manager로 마이그레이션합니다.

## 다음 단계
<a name="connections-sm-next-up"></a>
+ [Apache Airflow에 액세스](access-airflow-ui.md)에서 Apache Airflow UI에 액세스하기 위한 토큰을 생성하는 방법을 알아봅니다.