翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon MWAA実行ロール
実行ロールは、Amazon Managed Workflows for Apache Airflow にユーザーに代わって他の AWS サービスのリソースを呼び出すアクセス許可を付与するアクセス許可ポリシーを持つ 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ポリシーを更新できます。
実行ロールポリシーを更新するには
-
Amazon MWAAコンソールで環境ページ
を開きます。 -
環境を選択します。
-
アクセス許可ペインで実行ロールを選択して、 のアクセス許可ページを開きますIAM。
-
実行ロールの名前を選択し、権限ポリシーを開きます。
-
[ポリシーの編集] を選択します。
-
[JSON] タブを選択します。
-
JSON ポリシーを更新します。
-
[ポリシーの確認] を選択します。
-
[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":[ "*" ] } ] }
実行ロールにポリシーを添付するには
-
Amazon MWAAコンソールで環境ページ
を開きます。 -
環境を選択します。
-
[権限] ペインで実行ロールを選択します。
-
[ポリシーのアタッチ] を選択します。
-
[Create policy] を選択します。
-
JSON を選択します。
-
JSON ポリシーを貼り付けます。
-
[次の手順: タグ]、[次の手順: 確認] の順に選択します。
-
わかりやすい名前 (
SecretsManagerReadPolicy
など) とポリシーの説明を入力します。 -
[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"
] } } } ] }
次に、ユーザーに代わってアクションを実行するために、Amazon がこのロールを引き受けMWAAることを許可する必要があります。これは、 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 ログの 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" ] } } } ] }
次のステップ
-
あなたと Apache Airflow ユーザーが Amazon MWAA環境へのアクセス で環境にアクセスするために必要な権限について説明します。
-
暗号化のためのカスタマーマネージドキーの使用 についてはこちら。
-
その他のカスタマー管理ポリシーの例をご覧ください。