AWS Secrets Manager と Amazon Managed Workflows for Apache Airflow (Amazon MWAA) との統合に関する問題を解決したい。
簡単な説明
エアフロー接続と変数を保存するために、Secrets Manager のシークレットを Amazon MWAA のシークレットバックエンドとして設定できます。エアフローの設定が正しくないと、Amazon MWAA 環境を作成または更新するときに問題が発生する可能性があります。
Amazon MWAA と Secrets Manager の統合の問題の一般的な原因には、次のものがあります。
- Amazon MWAA ロールに、Secrets Manager に必要なアクセス許可がない。
- Amazon MWAA のプライベートサブネットに、Secrets Manager への正しいルートがない。
- Secrets Manager のエアフロー設定オプションに誤りがある。たとえば、クラス名が誤っている場合です。クラス名のキーは secrets.backend であり、値は airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend である必要があります。
- Amazon MWAA ロールに、Secrets Manager の暗号化に使用する AWS Key Management Service (AWS KMS) キーへのアクセス許可がない。
解決方法
以下のシナリオに基づいて、Amazon MWAA と Secrets Manager の統合の問題を解決します。
Amazon MWAA が「使用可能」状態ではない
Amazon MWAA 環境が「使用可能」状態にならない一般的な理由は次のとおりです。
- Amazon MWAA の Secrets バックエンドクラスのエアフロー設定オプションに誤りがある。
- Secrets Manager 用のネットワークがない。
- Secrets Manager のアクセス許可がない。
- エアフロー接続 aws_default が変更された。
これらの問題を解決するには、次の手順を実行してください。
- Amazon プロバイダーパッケージがインストールされていることを確認するには、以下を実行します。
エアフロー UI を開きます。
[管理] タブで、[プロバイダー] を選択します。
apache-airflow-providers-amazon プロバイダーパッケージを確認します。
- secrets.backend に正しいエアフロー設定クラスが指定されていることを確認します。
キー: secrets.backend
値: airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend
- Amazon MWAA のプライベートサブネットから、Secrets Manager の接続を確認します。接続は NAT ゲートウェイまたは Secrets Manager の Amazon Virtual Private Cloud (Amazon VPC) エンドポイントのいずれかから行うことができます。
- Amazon MWAA ロールに、Secrets Manager と、Secrets Manager で使用する AWS KMS キーに対する正しいアクセス許可があることを確認します。
- エアフロー接続 aws_default が変更されていないことを確認します。また、aws_default という名前で Secrets Manager を作成しないでください。
AWS CloudTrail で、Amazon MWAA による GetSecretValue API コールに関するエラーが表示される
Amazon MWAA で GetSecretValue API を実行すると、次のエラーが表示されることがあります。
"errorCode": "ResourceNotFoundException",
"errorMessage": "Secrets Manager は指定されたシークレットを見つけることができません。"
このエラーを解決するには、次の手順を実行します。
- GetSecretValue API の詳細を取得するには、ユーザー AmazonMWAA-Airflow が呼び出しを行う CloudTrail API を使用します。
- Amazon MWAA エアフロー接続または変数で設定されている Secrets Manager を確認します。connections_prefix:airflow/connections のプレフィックスと名前は、シークレットの名前と一致する必要があります。
- Secrets Manager に、そのエアフロー接続または変数があるかどうかを確認します。
Amazon MWAA ロールに、Secrets Manager に必要なアクセス許可がない
Amazon MWAA ロールに Secrets Manager に必要なアクセス許可がないと、次のエラーが表示されます。
"botocore.exceptions.ClientError: GetSecretValue 操作の呼び出し時にエラー AccessDeniedException が発生しました。 User: arn:aws:sts::123456789:assumed-role/rjf-use2-dev-demo-mwaa-env-mwaa-execution-role/AmazonMWAA-airflow は、secretsmanager:GetSecretValue on resource: <connection_prefix>/secret_name を実行できません。secretsmanager:GetSecretValue アクションを許可する ID ベースのポリシーがありません"
このエラーを解決するには、ステップ 1 を参照してください。 Amazon MWAA に、Secrets Manager のシークレットキーにアクセスするアクセス許可を付与します。
Amazon MWAA による aws_default に対する Secrets Manager API コールが多い
Amazon MWAA が Secrets Manager に対して行う API コールの数を減らすには、ルックアップパターンを使用します。詳細については、Apache Airflow ウェブサイトで「オプションでのルックアップ」を参照してください。ルックアップパターンを指定すると、Apache Airflow が検索するパスの数を減らすことができます。そうすることで、Amazon MWAA で Secrets Manager を使用する際のコストを削減できます。
検索パターンを指定するには、connections_lookup_pattern と variables_lookup_pattern パラメータを指定します。これらのパラメータは RegEx 文字列を入力として受け入れます。たとえば、aws_default ルックアップを指定するには、secrets.backend_kwargs に次のように入力します。
"connections_lookup_pattern" : "^(?!aws-default).*"
注: connections_lookup_pattern パラメーターと variables_lookup_pattern パラメータを使用するには、apache-airflow-providers-amazon バージョン 7.3.0 以降のインストールが必要です。詳細については、「新しいプロバイダーパッケージを指定する」を参照してください。
Secrets Manager 接続にアクセスできない
Secrets Manager が Amazon MWAA で設定されている場合、設定した connections_prefix パスで作成した接続にアクセスできます。その接続にアクセスするには、エアフローオペレーターのシークレット名を使用します。
例:
注: お使いのものでそれぞれ、example-mysql-task を MySQL タスクに、example-connection_prefix/mysql-connection を接続プレフィックスと MySQL 接続 ID に置き換えてください。
mysql_uri_operator = MySqlOperator(
task_id='example-mysql-task',
mysql_conn_id = '<example-connection_prefix>/example-mysql-connection
sql=CREATE_SQL
)
関連情報
Secrets Manager のシークレットを使用した Apache Airflow 接続の設定
Apache Airflow 接続と変数を Secrets Manager に移動する
Apache Airflow ウェブサイトにある airflow.providers.amazon.aws.secrets.secrets_manager のソースコード