Amazon MWAA 実行ロール - Amazon Managed Workflows for Apache Airflow

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

Amazon MWAA 実行ロール

実行ロールは、ユーザーに代わって他の AWS サービスのリソースを呼び出すアクセス許可を Amazon Managed Workflows for Apache Airflow に付与するアクセス許可ポリシーを持つ AWS Identity and Access Management (IAM) ロールです。これには、Amazon S3 バケット、AWS所有キー、CloudWatch Logs などのリソースが含まれる場合があります。Amazon MWAA 環境には、環境ごとに 1 つの実行ロールが必要です。このトピックでは、Amazon MWAA が環境で使用される他の AWS リソースにアクセスできるように、環境の実行ロールを使用および設定する方法について説明します。

実行ロールの概要

Amazon MWAA が環境で使用される他の AWS サービスを使用するためのアクセス許可は、実行ロールから取得されます。Amazon MWAA 実行ロールには、 環境で使用される以下の AWS サービスに対するアクセス許可が必要です。

  • Amazon CloudWatch (CloudWatch) — Apache Airflow メトリクスとログを送信します。

  • Amazon Simple Storage Service (Amazon S3) — 環境の DAG コードとサポートファイル (requirements.txt など) を解析します。

  • Amazon Simple Queue Service (Amazon SQS) — Amazon MWAA が所有する Amazon SQS キューに、環境の Apache Airflow タスクをキューイングします。

  • AWS Key Management Service (AWS KMS) – 環境のデータ暗号化用 ( AWS所有キーまたはカスタマーマネージドキーを使用)。

    注記

    Amazon MWAA が AWS 所有の KMS キーを使用してデータを暗号化することを選択した場合は、Amazon SQS を介してアカウントの外部に保存されている任意の KMS キーへのアクセスを許可する Amazon MWAA 実行ロールにアタッチされたポリシーでアクセス許可を定義する必要があります。環境の実行ロールが任意の KMS キーにアクセスするには、次の 2 つの条件が必要です。

    • サードパーティアカウントの KMS キーは、リソースポリシーを通じてクロスアカウントアクセスを許可する必要があります。

    • DAG コードは、サードパーティアカウントの airflow-celery- で始まる Amazon SQS キューにアクセスする必要があり、暗号化に同じ KMS キーを使用します。

    リソースへのクロスアカウントアクセスに関連するリスクを軽減するために、DAG に配置されたコードを見直して、ワークフローがアカウント外の任意の Amazon SQS キューにアクセスしていないことを確認することを推奨します。さらに、自分のアカウントに保存されているカスタマーマネージド KMS キーを使用して Amazon MWAA の暗号化を管理できます。これにより、環境の実行ロールがお使いのアカウントの KMS キーのみにアクセスするように制限されます。

    暗号化オプションを選択した後は、既存の環境では選択内容を変更できないことに注意してください。

実行ロールには、次の IAM アクションに対する権限も必要です。

  • airflow:PublishMetrics — Amazon MWAA が環境の状態を監視できるようにするため。

アクセス許可はデフォルトで付与されます。

Amazon MWAA コンソールのデフォルトオプションを使用して実行ロールと AWS所有キー を作成し、このページの手順を使用して実行ロールにアクセス権限ポリシーを追加できます。

  • コンソールで 新規ロールの作成 オプションを選択すると、Amazon MWAA は環境に必要な最小限のアクセス許可を実行ロールにアタッチします。

  • Amazon MWAA が最大限のアクセス許可を割り当てる場合もあります。例えば、環境を作成するときに Amazon MWAA コンソールのオプションを選択して実行ロールを作成することを推奨します。Amazon MWAA は、実行ロールの正規表現パターンを "arn:aws:logs:us-east-1:111122223333:log-group:airflow-your-environment-name-*" として使用して、すべての CloudWatch Logs グループのアクセス許可ポリシーを自動的に追加します

他の AWS サービスを使用するためのアクセス許可を追加する方法

Amazon MWAA は、環境の作成後に既存の実行ロールにアクセス権限ポリシーを追加または編集することはできません。環境に必要な追加のアクセス権限ポリシーを使用して実行ロールを更新する必要があります。例えば、DAG が へのアクセスを必要とする場合 AWS Glue、Amazon MWAA は環境に必要なこれらのアクセス許可を自動的に検出したり、実行ロールにアクセス許可を追加したりすることはできません。

実行ロールにアクセス許可は、次の 2 つのページから追加できます。

  • 実行ロールの JSON ポリシーをインラインで変更します。このページにあるサンプル JSON ポリシードキュメント を使用して、IAM コンソールの実行ロールの JSON ポリシーを追加したり、置き換えたりできます。

  • AWS サービスの JSON ポリシーを作成し、実行ロールにアタッチします。このページのステップを使用して、 AWS サービスの新しい JSON ポリシードキュメントを IAM コンソールの実行ロールに関連付けることができます。

実行ロールが既に環境に関連付けられていると仮定すると、Amazon MWAA は追加されたアクセス許可ポリシーをすぐに使い始めることができます。つまり、実行ロールから必要なアクセス許可を削除すると、お使いの DAG が機能しなくなる可能性があるということです。

新しい実行ロールを関連付ける方法

お使いの環境の実行ロールはいつでも変更できます。新しい実行ロールがまだお使いの環境に関連付けられていない場合は、このページの手順を使用して新しい実行ロールポリシーを作成し、そのロールを環境に関連付けます。

新規ロールの作成

デフォルトでは、Amazon MWAA はデータ暗号化用の AWS所有キー とユーザーに代わって実行ロールを作成します。環境を作成するときに Amazon MWAA コンソールでデフォルトオプションを選択できます。次の画像は、環境の実行ロールを作成するためのデフォルトオプションを示しています。

これは新しいロールを作成するためのデフォルトオプションを含むイメージです。
重要

新しい実行ロールを作成するときは、削除された実行ロールの名前を再利用しないでください。一意の名前を付けると、競合を防ぎ、適切なリソース管理が可能になります。

実行ロールポリシーのアクセスおよび更新

Amazon MWAA コンソールで環境の実行ロールにアクセスし、IAM コンソールでロールの JSON ポリシーを更新できます。

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

  2. 環境を選択します。

  3. アクセス許可 ペインで実行ロールを選択し、IAM の権限ページを開きます。

  4. 実行ロールの名前を選択し、アクセス許可ポリシーを開きます。

  5. ポリシーの編集 を選択します。

  6. JSON タブを選択します。

  7. JSON ポリシーを更新します。

  8. ポリシーの確認 を選択します。

  9. [Save changes] (変更の保存) をクリックします。

JSON ポリシーをアタッチして他の AWS サービスを使用する

AWS サービスの JSON ポリシーを作成し、実行ロールにアタッチできます。例えば、次の JSON ポリシーをアタッチして、 AWS Secrets Managerのすべてのリソースへの読み取り専用アクセスレベルを付与することができます。

JSON
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource":[ "*" ] } ] }
実行ロールにポリシーを添付するには
  1. Amazon MWAA コンソールで、環境ページ を開きます。

  2. 環境を選択します。

  3. アクセス許可 ペインで実行ロールを選択します。

  4. ポリシーのアタッチ を選択します。

  5. ポリシーを作成 を選択します。

  6. JSON を選択します。

  7. JSON ポリシーを貼り付けます。

  8. 次の手順: タグ次の手順: 確認 の順に選択します。

  9. わかりやすい名前 (SecretsManagerReadPolicy など) とポリシーの説明を入力します。

  10. ポリシーを作成 を選択します。

アカウントレベルのパブリックアクセスブロックで Amazon S3 バケットへのアクセスを許可する

PutPublicAccessBlock Amazon S3 オペレーションを使用して、アカウントのすべてのバケットへのアクセスをブロックしたい場合があります。アカウントのすべてのバケットへのアクセスをブロックする場合、環境実行ロールはその s3:GetAccountPublicAccessBlock アクションをアクセス権限ポリシーに含める必要があります。

次の例は、アカウントのすべての Amazon S3 バケットへのアクセスをブロックするときに実行ロールにアタッチする必要があるポリシーを示しています。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetAccountPublicAccessBlock", "Resource": "*" } ] }

Amazon S3 バケットへのパブリックアクセスのブロックの詳細については、Amazon Simple Storage Service ユーザーガイドAmazon S3 ストレージへのパブリックアクセスのブロック を参照してください。

Apache Airflow 接続を使用する

Apache Airflow 接続を作成し、Apache Airflow 接続オブジェクトで実行ロールとその ARN を指定することもできます。詳細については、Apache エアフローへの接続の管理 を参照してください。

実行ロールのサンプル JSON ポリシー

このセクションの 2 つのサンプルクセス許可ポリシーを使用して、既存の実行ロールに使用されているクセス許可ポリシーを置き換えたり、新しい実行ロールを作成して環境に使用したりできます。これらのポリシーには、Apache Airflow ロググループ、Amazon S3 バケット、および Amazon MWAA 環境リソース ARN プレースホルダーが含まれています。

ポリシー例をコピーし、サンプル ARN またはプレースホルダーを置き換えてから、JSON ポリシーを使用して実行ロールを作成または更新することを推奨します。

カスタマーマネージドキーのポリシー例

次の例は、カスタマーマネージドキーに使用できる実行ロールポリシーを示しています。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:ListAllMyBuckets", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents", "logs:GetLogEvents", "logs:GetLogRecord", "logs:GetLogGroupFields", "logs:GetQueryResults" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:airflow-your-environment-name:*" ] }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetAccountPublicAccessBlock" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "cloudwatch:PutMetricData", "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:us-east-1:*:airflow-celery-*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt" ], "Resource": "arn:aws:kms:us-east-1:111122223333:key/your-kms-cmk-id", "Condition": { "StringLike": { "kms:ViaService": [ "sqs.us-east-1.amazonaws.com", "s3.us-east-1.amazonaws.com" ] } } } ] }

次に、ユーザーに代わってアクションを実行するために、Amazon MWAA がこのロールを引き受けることを許可する必要があります。そのためには、IAM コンソールを使用して、この実行ロールの信頼できるエンティティのリストに "airflow.amazonaws.com""airflow-env.amazonaws.com" サービスプリンシパルを追加するか、または AWS CLIを使用して、IAM create-role コマンドを介して、これらのサービスプリンシパルをこの実行ロールのロール割り当てポリシードキュメントに配置します。次のサンプルの役割引き受けポリシードキュメントを参照してください。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": ["airflow.amazonaws.com","airflow-env.amazonaws.com"] }, "Action": "sts:AssumeRole" } ] }

次に、次の JSON ポリシーを カスタマーマネージドキー に添付します。このポリシーでは、kms:EncryptionContext条件キープレフィックスを使用して CloudWatch Logs の Apache Airflow ロググループへのアクセスを許可します。

{ "Sid": "Allow logs access", "Effect": "Allow", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-east-1:111122223333:*" } } }

AWS所有キーのサンプルポリシー

次の例は、AWSカスタマーマネージドキーに使用できる実行ロールポリシーを示しています。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "airflow:PublishMetrics", "Resource": "arn:aws:airflow:us-east-1:111122223333:environment/{your-environment-name}" }, { "Effect": "Deny", "Action": "s3:ListAllMyBuckets", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents", "logs:GetLogEvents", "logs:GetLogRecord", "logs:GetLogGroupFields", "logs:GetQueryResults" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:airflow-{your-environment-name}-*" ] }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetAccountPublicAccessBlock" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "cloudwatch:PutMetricData", "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:us-east-1:*:airflow-celery-*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt" ], "NotResource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringLike": { "kms:ViaService": [ "sqs.us-east-1.amazonaws.com" ] } } } ] }

次のステップ