本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon MWAA 執行角色
執行角色是具有許可政策的 AWS Identity and Access Management (IAM) 角色,可授予 Amazon Managed Workflows for Apache Airflow AWS 代表您調用其他服務資源的許可。這可以包括資源,例如您的 Amazon S3 儲存貯體、AWS 擁有的金鑰和 CloudWatch Logs。Amazon MWAA 環境每個環境都需要一個執行角色。本主題說明如何使用和設定環境的執行角色,以允許 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 Word 擁有的 Amazon SQS 佇列中佇列您環境的 Apache Airflow 任務MWAA。
-
AWS Key Management Service (AWS KMS) – 適用於您環境的資料加密 (使用AWS 擁有的金鑰或您的客戶受管金鑰)。
注意
如果您已選擇讓 Amazon MWAA 使用 AWS 擁有的 KMS 金鑰來加密資料,則必須在連接至 Amazon MWAA 執行角色的政策中定義許可,以透過 Amazon KMS 授予帳戶外部儲存的任意 SQS 金鑰存取權。需要下列兩個條件,您環境的執行角色才能存取任意 KMS 金鑰:
-
第三方帳戶中的 KMS 金鑰需要允許透過其資源政策進行此跨帳戶存取。
-
您的 DAG 程式碼需要存取第三方帳戶中以 開頭
airflow-celery-
的 Amazon SQS 佇列,並使用相同的 KMS 金鑰進行加密。
為了降低與跨帳戶存取資源相關的風險,我們建議您檢閱 DAGs 中放置的程式碼,以確保您的工作流程不會存取帳戶外部的任意 Amazon SQS 佇列。此外,您可以使用存放在您帳戶中的客戶受管 KMS 金鑰來管理 Amazon MWAA 上的加密。這會將您環境的執行角色限制為僅存取您帳戶中的 KMS 金鑰。
請記住,選擇加密選項後,您無法變更現有環境的選擇。
-
執行角色也需要下列 IAM 動作的許可:
-
airflow:PublishMetrics
– 允許 Amazon MWAA 監控環境的運作狀態。
預設連接的許可
您可以使用 Amazon MWAA 主控台上的預設選項來建立執行角色和AWS 擁有的金鑰,然後使用此頁面上的步驟將許可政策新增至您的執行角色。
-
當您在主控台上選擇建立新角色選項時,Amazon MWAA 會將環境所需的最低許可連接至您的執行角色。
-
在某些情況下,Amazon MWAA 會連接最大許可。例如,我們建議您在建立環境時,選擇 Amazon MWAA 主控台上的 選項來建立執行角色。Amazon MWAA 使用執行角色中的 regex 模式作為 ,自動新增所有 CloudWatch Logs 群組的許可政策
"arn:aws:logs:your-region:your-account-id:log-group:airflow-your-environment-name-*"
。
如何新增使用其他服務的許可 AWS
建立環境後,Amazon MWAA 無法將許可政策新增至現有的執行角色。您必須使用環境所需的其他許可政策來更新執行角色。例如,如果您的 DAG 需要存取 AWS Glue,Amazon MWAA 無法自動偵測環境所需的這些許可,或將許可新增至您的執行角色。
您可以透過兩種方式將許可新增至執行角色:
-
透過內嵌修改執行角色的 JSON 政策。您可以使用此頁面上的 JSON 政策文件範例,在 JSON 主控台上新增或取代執行角色的 IAM 政策。
-
為 AWS 服務建立 JSON 政策,並將其連接至您的執行角色。您可以使用此頁面上的步驟,將 AWS 服務的新 IAM 政策文件與 JSON 主控台上的執行角色建立關聯。
假設執行角色已與您的環境建立關聯,Amazon MWAA 可以立即開始使用新增的許可政策。這也表示,如果您從執行角色移除任何必要的許可,您的 DAGs 可能會失敗。
如何關聯新的執行角色
您可以隨時變更環境的執行角色。如果新的執行角色尚未與您的環境建立關聯,請使用此頁面上的步驟建立新的執行角色政策,並將角色與您的環境建立關聯。
Create a new role (建立新角色)
根據預設,Amazon MWAA 會為您建立資料加密的AWS 擁有金鑰,以及執行角色。您可以在建立環境時選擇 Amazon MWAA 主控台上的預設選項。下圖顯示為環境建立執行角色的預設選項。
檢視和更新執行角色政策
您可以在 Amazon MWAA 主控台上檢視環境的執行角色,並在 JSON 主控台上更新角色的 IAM 政策。
更新執行角色政策
-
在 Amazon MWAA 主控台上開啟環境頁面
。 -
選擇環境。
-
在許可窗格上選擇執行角色,以在 IAM 中開啟許可頁面。
-
選擇執行角色名稱以開啟許可政策。
-
選擇 Edit Policy (編輯政策)。
-
選擇 JSON 索引標籤。
-
更新您的 JSON 政策。
-
選擇檢閱政策。
-
選擇 Save changes (儲存變更)。
連接 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":[ "*" ] } ] }
將政策連接至執行角色
-
在 Amazon MWAA 主控台上開啟環境頁面
。 -
選擇環境。
-
在許可窗格中選擇您的執行角色。
-
選擇連接政策。
-
選擇 建立政策。
-
選擇 JSON。
-
貼上 JSON 政策。
-
選擇下一步:標籤、下一步:檢閱。
-
輸入政策的描述性名稱 (例如
SecretsManagerReadPolicy
) 和描述。 -
選擇 建立政策。
使用帳戶層級公有存取區塊授予 Amazon S3 儲存貯體的存取權
您可能想要使用 Amazon S3 PutPublicAccessBlock
操作封鎖對帳戶中所有儲存貯體的存取。當您封鎖對帳戶中所有儲存貯體的存取時,您的環境執行角色必須在許可政策中包含 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 Airflow 的連線。
執行角色的 JSON 政策範例
本節中的範例許可政策顯示兩個政策,您可以使用 取代現有執行角色所使用的許可政策,或建立新的執行角色,並用於您的環境。這些政策包含 Apache Airflow 日誌群組的 Resource 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-env.amazonaws.com"
"airflow.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" ] } } } ] }
後續步驟?
-
了解您和您的 Apache Airflow 使用者在 中存取環境所需的必要許可存取 Amazon MWAA 環境。
-
了解 使用客戶受管金鑰進行加密。
-
探索更多客戶受管政策範例。