AWS Secrets Manager シークレットを使用した Apache Airflow 接続の設定 - Amazon Managed Workflows for Apache Airflow

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Secrets Manager シークレットを使用した Apache Airflow 接続の設定

AWS Secrets Manager は、Amazon Managed Workflows for Apache Airflow 環境でサポートされている代替 Apache Airflow バックエンドです。このトピックでは、 AWS Secrets Manager を使用して Apache Airflow 変数と Apache Airflow 接続のシークレットを Amazon Managed Workflows for Apache Airflow に安全に保存する方法を示します。

注記

ステップ 1: Amazon MWAA に Secrets Manager シークレットキーにアクセスするアクセス許可を付与する

Amazon MWAA 環境の実行ロールには、シークレットキーへの読み取りアクセスが必要です AWS Secrets Manager。次の IAM ポリシーは、 AWS マネージド SecretsManagerReadWrite ポリシーを使用した読み取り/書き込みアクセスを許可します。

実行ロールにポリシーを添付するには
  1. Amazon MWAA コンソールで環境ページを開きます。

  2. 環境を選択します。

  3. [権限] ペインで実行ロールを選択します。

  4. [Attach policies] (ポリシーの添付) を選択します。

  5. [Filter policies] (フィルターポリシー) テキストフィールドに SecretsManagerReadWrite をタイプ。

  6. Attach policy] (ポリシーのアタッチ) を選択します。

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 構成オプションとして作成する

次のセクションでは、 AWS Secrets Manager バックエンドの Amazon MWAA コンソールで Apache Airflow 設定オプションを作成する方法について説明します。airflow.cfg で同じ名前の設定を使用している場合は、次のステップで作成した設定が優先され、設定よりも優先されます。

  1. Amazon MWAA コンソールで環境ページを開きます。

  2. 環境を選択します。

  3. [編集] を選択します。

  4. [Next (次へ)] を選択します。

  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 API がユーザーに代わって Secrets Manager に対して行う MWAA 呼び出しの数を減らすことができます。検索パターンを指定しない場合、Apache Airflow は設定されたバックエンドのすべての接続と変数を検索します。パターンを指定することで、Apache Airflow が検索する可能性のあるパスを絞り込むことができます。これにより、Amazon MWAA で Secrets Manager を使用する場合のコストを削減できます。

      ルックアップパターンを指定するには、connections_lookup_pattern および variables_lookup_pattern パラメータを指定します。これらのパラメータは、入力として a 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 以上をインストールする必要があります。プロバイダパッケージを新しいバージョンに更新する方法の詳細については、新しいプロバイダーパッケージの指定 を参照してください。

  6. [Save] を選択します。

ステップ 3: Apache Airflow AWS 接続の URI 文字列を生成する

接続」文字列を作成するには、キーボードの 「tab」 キーを使用して Connection オブジェクトのキーと値のペアをインデントします。また、シェルセッションで extra オブジェクト用の変数を作成することをおすすめします。次のセクションでは、Apache Airflow または Python スクリプトを使用して Amazon Word 環境の Apache Airflow 接続 Word URI文字列を生成する手順について説明します。 MWAA

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. キーボードの tab キーを使用して、接続オブジェクト内の以下のキーと値のペアをそれぞれインデントします。のサンプル値を置き換える red.

    1. AWS 接続タイプを指定します。

      ... conn_id='aws',
    2. Apache Airflow データベースオプションを指定します。

      ... conn_type='mysql',
    3. Amazon URL で Apache Airflow UI MWAA を指定します。

      ... host='288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com/home',
    4. Amazon MWAA にログインするための AWS アクセスキー 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()

    レスポンスに Connection 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. のプレースホルダーを置き換える red.

  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. [Next (次へ)] を選択します。

  9. [シークレットの設定] ページの [シークレットの名前と説明] ペインで、次の操作を行います。

    1. [シークレット名] には、シークレットの名前を入力します。

    2. (オプション)[説明] として、シークレットの説明を入力します。

    [Next (次へ)] を選択します。

  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 は接続文字列の各値を解析します。一重引用符や二重引用符は使用しないでください。そうしないと、接続が 1 つの文字列として解析されます。

  6. 暗号化キーで、ドロップダウンリストから AWS KMS キーオプションを選択します。

  7. [シークレット名] のテキストフィールドに、次の形式で名前を入力します。

    airflow/connections/YOUR_CONNECTION_NAME

    例:

    airflow/connections/myconn
  8. [Next (次へ)] を選択します。

  9. [シークレットの設定] ページの [シークレットの名前と説明] ペインで、次の操作を行います。

    1. [シークレット名] には、シークレットの名前を入力します。

    2. (オプション)[説明] として、シークレットの説明を入力します。

    [Next (次へ)] を選択します。

  10. [ローテーションの設定-オプション] では、デフォルトオプションのままにして、[次へ] を選択します。

  11. 追加したい変数があれば、Secrets Manager でこれらの手順を繰り返します。

  12. [レビュー] ページで、自分の秘密を確認し、[ストア] を選択します。

「サンプルコード」

リソース

次のステップ