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 が環境で使用される他の AWS リソースにアクセスできるようにMWAA、環境の実行ロールを使用して設定する方法について説明します。

実行ロールの概要

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

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

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

  • Amazon Simple Queue Service (Amazon SQS) — Amazon が所有する Amazon キューで環境の Apache Airflow タスクをSQSキューに入れる。 MWAA

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

    注記

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

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

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

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

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

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

  • airflow:PublishMetrics — Amazon が環境の状態をMWAAモニタリングできるようにします。

権限はデフォルトで付与されます。

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

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

  • 場合によっては、Amazon は最大アクセス許可をアMWAAタッチします。例えば、環境を作成するときに Amazon MWAAコンソールで オプションを選択して実行ロールを作成することをお勧めします。Amazon は、実行ロールの正規表現パターンを として使用して、すべての CloudWatch Logs グループのアクセス許可ポリシーを自動的にMWAA追加します"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は追加されたアクセス許可ポリシーの使用をすぐに開始できます。つまり、実行ロールから必要なアクセス許可を削除すると、 が失敗DAGsする可能性があります。

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

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

新規ロールの作成

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

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

実行ロールポリシーの表示および更新

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

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

  2. 環境を選択します。

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

  4. 実行ロールの名前を選択し、権限ポリシーを開きます。

  5. [Edit policy] (ポリシーの編集) を選択します。

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

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

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

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

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

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. [Create policy] を選択します。

アカウントレベルのパブリックアクセスブロックで 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 ロググループのリソースARNプレースホルダー、Amazon S3 バケット、および Amazon MWAA環境 が含まれています。

サンプルポリシーをコピーし、サンプルARNsまたはプレースホルダーを置き換えてから、JSONポリシーを使用して実行ロールを作成または更新することをお勧めします。たとえば、{your-region}us-east-1 に置き換えます。

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

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:ListAllMyBuckets", "Resource": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "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" ] } } } ] }

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

{ "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": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "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" ] } } } ] }

次のステップ