Apache Airflow 接続を秘密 AWS Secrets Manager を使用して構成する
AWS Secrets Manager は、Amazon Managed Workflows for Apache Airflow (Amazon Managed Workflows) 環境でサポートされています。このトピックでは、Amazon Managed Workflows for Apache Airflow 上の Apache Airflow 変数および Apache Airflow 接続のために AWS Secrets Manager を使用して秘密を安全に保存する方法を説明します。
注記
-
作成したシークレットに対して料金が発生します。Secret Manager の価格設定の詳細については、AWS料金
を参照してください。 -
AWS Systems Manager Parameter Store は、Amazon MWAA のシークレットバックエンドとしてもサポートされています。詳細については、Amazon プロバイダーパッケージのドキュメント
を参照してください。
目次
ステップ 1: Amazon MWAA にSecrets Manager のシークレットキーにアクセスする権限を付与する
Amazon MWAA 環境の 実行ロール には、AWS Secrets Manager 内のシークレットキーへの読み取りアクセス権が必要です。次の IAM ポリシーでは、AWS マネージド SecretsManagerReadWrite
実行ロールにポリシーを添付するには
-
Amazon MWAA コンソールで、環境ページ
を開きます。 -
環境を選択します。
-
アクセス許可 ペインで実行ロールを選択します。
-
ポリシーの添付 を選択します。
-
[Filter policies] (フィルターポリシー) テキストフィールドに
SecretsManagerReadWriteをタイプ。 -
ポリシーの添付 を選択します。
AWS で管理されたアクセス権限ポリシーを使用したくない場合は、環境の実行ロールを直接更新して、Secrets Manager リソースへの任意のレベルのアクセスを許可できます。例えば、次のポリシーステートメントは、SecretsManager の特定の AWS リージョン で作成したすべてのシークレットへの読み取りアクセスを許可します。
ステップ 2: Secrets Manager のバックエンドを Apache Airflow 設定オプションとして作成する
次のセクションでは、Amazon MWAA コンソールで AWS Secrets Manager バックエンド用の Apache Airflow 設定オプションを作成する方法について説明します。airflow.cfg で同じ名前の設定を使用している場合は、次のステップで作成した設定が優先され、設定よりも優先されます。
-
Amazon MWAA コンソールで、環境ページ
を開きます。 -
環境を選択します。
-
編集 を選択します。
-
次へ を選択します。
-
Airflow 設定オプション ペインで カスタム設定を追加 を選択します。以下のキーと値のペアを追加します。
-
:secrets.backendairflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend -
:secrets.backend_kwargsこれにより、Apache Airflow は接続文字列と変数を{"connections_prefix" : "airflow/connections", "variables_prefix" : "airflow/variables"}airflow/connections/*およびairflow/variables/*のパスで検索するように設定されます。ルックアップパターン
を使用すると、Amazon MWAA がユーザーに代わって Secrets Manager に対して行う API 呼び出しの数を減らすことができます。検索パターンを指定しない場合、Apache Airflow は設定されたバックエンドのすべての接続と変数を検索します。パターンを指定することで、Apache Airflow が検索する可能性のあるパスを絞り込むことができます。これにより、Amazon MWAA でSecrets Manager を使用する場合のコストを削減できます。 ルックアップパターンを指定するには、
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 以上をインストールする必要があります。プロバイダパッケージを新しいバージョンに更新する方法の詳細については、制約ファイル を参照してください。
-
-
保存 を選択します。
ステップ 3: Apache Airflow AWS 接続の URI 文字列を生成します。
「接続extra オブジェクト用の変数を作成することをおすすめします。以下のセクションでは、Apache Airflow または Python スクリプトを使用して Amazon MWAA 環境用の Apache Airflow 接続 URI 文字列を生成する
ステップ 4: Secrets Manager に変数を追加する
次のセクションでは、Secrets Manager で変数のシークレットを作成する方法について説明します。
シークレットを作成するには
-
AWS Secrets Manager コンソール
を開きます。 -
新しいシークレットを保存 を選択します。
-
他の種類のシークレット を選択します。
-
このシークレットに保存するキーと値のペアを指定してください ペインで、プレーンテキスト を選択します。
-
変数値を次の形式で プレーン テキストとして追加します。
"YOUR_VARIABLE_VALUE"例えば、整数を指定するには:
14例えば、文字列を指定には:
"mystring" -
暗号化キーでは、ドロップダウンリストから AWS KMS キーオプションを選択します。
-
シークレット名 のテキストフィールドに、次の形式で名前を入力します。
airflow/variables/YOUR_VARIABLE_NAME例:
airflow/variables/test-variable -
次へ を選択します。
-
シークレットの設定 ページの シークレットの名前と説明 ペインで、次の操作を行います。
-
シークレット名 には、シークレットの名前を入力します。
-
(オプション)説明 として、シークレットの説明を入力します。
次へ を選択します。
-
-
ローテーションの設定-オプション では、デフォルトオプションのままにして、次へ を選択します。
-
追加したい変数があれば、Secrets Manager でこれらの手順を繰り返します。
-
レビュー ページで、自分の秘密を確認し、ストア を選択します。
ステップ 5: Secrets Manager に接続を追加する
次のセクションでは、Secrets Manager で接続文字列 URI のシークレットを作成する方法について説明します。
シークレットを作成するには
-
AWS Secrets Manager コンソール
を開きます。 -
新しいシークレットを保存 を選択します。
-
他の種類のシークレット を選択します。
-
このシークレットに保存するキーと値のペアを指定してください ペインで、プレーンテキスト を選択します。
-
接続 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®ion_name=us-east-1警告
Apache Airflow は接続文字列の各値を解析します。一重引用符や二重引用符は使用 しない でください。そうしないと、接続が 1 つの文字列として解析されます。
-
暗号化キー では、ドロップダウンリストから AWS KMS キーオプションを選択します。
-
シークレット名 のテキストフィールドに、次の形式で名前を入力します。
airflow/connections/YOUR_CONNECTION_NAME例:
airflow/connections/myconn -
次へ を選択します。
-
シークレットの設定 ページの シークレットの名前と説明 ペインで、次の操作を行います。
-
シークレット名 には、シークレットの名前を入力します。
-
(オプション)説明 として、シークレットの説明を入力します。
次へ を選択します。
-
-
ローテーションの設定-オプション では、デフォルトオプションのままにして、次へ を選択します。
-
追加したい変数があれば、Secrets Manager でこれらの手順を繰り返します。
-
レビュー ページで、自分の秘密を確認し、ストア を選択します。
サンプルコード
-
このページの Apache Airflow 接続 (
myconn) のシークレットキーの使用方法については、AWS Secrets Manager の Apache Airflow 接続でのシークレットキーの使用 のサンプルコードを参照してください。 -
このページの Apache Airflow 変数 (
test-variable) のシークレットキーの使用方法については、Apache Airflow 変数の AWS Secrets Manager におけるシークレットキーの使用 にあるサンプルコードを使用して学習してください。
リソース
-
コンソールと AWS CLI を使ったシークレットマネージャーのシークレットの設定については、AWS Secrets Managerユーザーガイド の シークレットの作成 を参照してください。
-
Apache Airflowの大量の変数や接続をSecrets Managerに移行するために、Pythonスクリプトを使用して、Apache Airflowの接続と変数を AWS Secrets Manager に移動してください
。
次のステップ
-
Apache Airflow へのアクセス で Apache Airflow UI にアクセスするトークンを生成する方法について説明します。