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 ログなどのリソースが含まれます。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 は、実行ロールの正規表現パターンを として使用して、すべての CloudWatch Logs グループのアクセス許可ポリシーを自動的に追加します"arn:aws:logs:your-region:your-account-id:log-group:airflow-your-environment-name-*"

他の 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. [Edit policy] (ポリシーの編集) を選択します。

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

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

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

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

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

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

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

  2. 環境を選択します。

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

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

  5. [Create policy] を選択します。

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

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

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

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

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

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

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

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

{ "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 ポリシーを使用して実行ロールを作成または更新することを推奨します。たとえば、{your-region}us-east-1 に置き換えます。

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

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ], "Resource": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents", "logs:GetLogEvents", "logs:GetLogRecord", "logs:GetLogGroupFields", "logs:GetQueryResults" ], "Resource": [ "arn:aws:logs:{your-region}:{your-account-id}: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:{your-region}:*:airflow-celery-*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt" ], "Resource": "arn:aws:kms:{your-region}:{your-account-id}:key/{your-kms-cmk-id}", "Condition": { "StringLike": { "kms:ViaService": [ "sqs.{your-region}.amazonaws.com", "s3.{your-region}.amazonaws.com" ] } } } ] }

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

{ "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.{your-region}.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:{your-region}:{your-account-id}:*" } } }

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

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "airflow:PublishMetrics", "Resource": "arn:aws:airflow:{your-region}:{your-account-id}:environment/{your-environment-name}" }, { "Effect": "Deny", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ], "Resource": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents", "logs:GetLogEvents", "logs:GetLogRecord", "logs:GetLogGroupFields", "logs:GetQueryResults" ], "Resource": [ "arn:aws:logs:{your-region}:{your-account-id}: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:{your-region}:*:airflow-celery-*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt" ], "NotResource": "arn:aws:kms:*:{your-account-id}:key/*", "Condition": { "StringLike": { "kms:ViaService": [ "sqs.{your-region}.amazonaws.com" ] } } } ] }

次のステップ