

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon MWAA 執行角色
<a name="mwaa-create-role"></a>

執行角色是具有許可政策的 AWS Identity and Access Management (IAM) 角色，授予 Amazon Managed Workflows for Apache Airflow AWS 代表您調用其他服務資源的許可。這可能包括您的 Amazon S3 儲存貯體、 [AWS擁有的金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)和 CloudWatch Logs 等資源。Amazon MWAA 環境每個環境都需要一個執行角色。本主題說明如何使用和設定您環境的執行角色，以允許 Amazon MWAA 存取您環境使用的其他 AWS 資源。

**Contents**
+ [執行角色概觀](#mwaa-create-role-how)
  + [預設連接的許可](#mwaa-create-role-how-create-role)
  + [如何新增使用其他服務的許可 AWS](#mwaa-create-role-how-adding)
  + [如何關聯新的執行角色](#mwaa-create-role-how-associating)
+ [Create a new role (建立新角色)](#mwaa-create-role-mwaa-onconsole)
+ [存取和更新執行角色政策](#mwaa-create-role-update)
  + [連接 JSON 政策以使用其他 AWS 服務](#mwaa-create-role-attach-json-policy)
+ [使用帳戶層級公有存取區塊授予 Amazon S3 儲存貯體的存取權](#mwaa-create-role-s3-publicaccessblock)
+ [使用 Apache Airflow 連線](#mwaa-create-role-airflow-connections)
+ [執行角色的 JSON 政策範例](#mwaa-create-role-json)
  + [客戶受管金鑰的範例政策](#mwaa-create-role-cmk)
  + [AWS擁有金鑰的範例政策](#mwaa-create-role-aocmk)
+ [後續步驟？](#mwaa-create-role-next-up)

## 執行角色概觀
<a name="mwaa-create-role-how"></a>

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擁有的金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)或[客戶管理的金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk))。
**注意**  
如果您已選擇讓 Amazon MWAA 使用 AWS 擁有的 KMS 金鑰來加密資料，則必須在連接至 Amazon MWAA 執行角色的政策中定義許可，以透過 Amazon SQS 授予帳戶外部存放之任意 KMS 金鑰的存取權。需要以下兩個條件，您環境的執行角色才能存取任意 KMS 金鑰：  
第三方帳戶中的 KMS 金鑰需要透過其資源政策允許此跨帳戶存取。
您的 DAG 程式碼需要存取在第三方帳戶中以 開頭的 Amazon SQS 佇列`airflow-celery-`，並使用相同的 KMS 金鑰進行加密。
為了降低與跨帳戶存取 資源相關的風險，我們建議您檢閱 DAGs 中放置的程式碼，以確保您的工作流程不會存取您帳戶外部的任意 Amazon SQS 佇列。此外，您可以使用存放在您自己帳戶中的客戶受管 KMS 金鑰來管理 Amazon MWAA 上的加密。這會將您環境的執行角色限制為僅存取您帳戶中的 KMS 金鑰。  
請記住，選擇加密選項後，您無法變更現有環境的選擇。

執行角色還需要下列 IAM 動作的許可：
+ `airflow:PublishMetrics` – 允許 Amazon MWAA 監控環境的運作狀態。

### 預設連接的許可
<a name="mwaa-create-role-how-create-role"></a>

您可以使用 Amazon MWAA 主控台上的預設選項來建立執行角色和 [AWS擁有的金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)，然後使用此頁面上的步驟將許可政策新增至您的執行角色。
+ 當您在主控台上選擇**建立新角色**選項時，Amazon MWAA 會將環境所需的最低許可連接至您的執行角色。
+ 在某些情況下，Amazon MWAA 會連接最大許可。例如，我們建議您在建立環境時，選擇 Amazon MWAA 主控台上的 選項來建立執行角色。Amazon MWAA 會使用執行角色中的 regex 模式作為 ，自動新增所有 CloudWatch Logs 群組的許可政策`"arn:aws:logs:us-east-1:111122223333:log-group:airflow-your-environment-name-*"`。

### 如何新增使用其他服務的許可 AWS
<a name="mwaa-create-role-how-adding"></a>

建立環境後，Amazon MWAA 無法新增或編輯許可政策至現有的執行角色。您必須使用環境所需的其他許可政策來更新您的執行角色。例如，如果您的 DAG 需要存取 AWS Glue，Amazon MWAA 無法自動偵測您的環境所需的這些許可，或將許可新增至您的執行角色。

您可以透過兩種方式將許可新增至執行角色：
+ 透過為執行角色內嵌修改 JSON 政策。您可以使用此頁面上的範例 [JSON 政策文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html)，在 IAM 主控台上新增或取代執行角色的 JSON 政策。
+ 為 AWS 服務建立 JSON 政策，並將其連接至您的執行角色。您可以使用此頁面上的步驟，將 AWS 服務的新 JSON 政策文件與 IAM 主控台上的執行角色建立關聯。

假設執行角色已與您的環境相關聯，Amazon MWAA 可以立即開始使用新增的許可政策。這也表示如果您從執行角色移除任何必要的許可，您的 DAGs可能會失敗。

### 如何關聯新的執行角色
<a name="mwaa-create-role-how-associating"></a>

您可以隨時變更環境的執行角色。如果新的執行角色尚未與您的環境建立關聯，請使用此頁面的步驟建立新的執行角色政策，並將角色與您的環境建立關聯。

## Create a new role (建立新角色)
<a name="mwaa-create-role-mwaa-onconsole"></a>

根據預設，Amazon MWAA 會代表您建立 [AWS擁有的金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)以進行資料加密和執行角色。您可以在建立環境時選擇 Amazon MWAA 主控台上的預設選項。下圖顯示為環境建立執行角色的預設選項。

![\[這是具有預設選項的映像，用於建立新的角色。\]](http://docs.aws.amazon.com/zh_tw/mwaa/latest/userguide/images/mwaa-console-permissions.png)


**重要**  
當您建立新的執行角色時，請勿重複使用已刪除執行角色的名稱。唯一名稱有助於防止衝突，並確保適當的資源管理。

## 存取和更新執行角色政策
<a name="mwaa-create-role-update"></a>

您可以在 Amazon MWAA 主控台上存取您環境的執行角色，並在 IAM 主控台上更新角色的 JSON 政策。

**更新執行角色政策**

1. 在 Amazon MWAA 主控台上開啟[環境](https://console.aws.amazon.com/mwaa/home#/environments)頁面。

1. 選擇環境。

1. 在**許可**窗格中選擇執行角色，以在 IAM 中開啟許可頁面。

1. 選擇執行角色名稱以開啟許可政策。

1. 選擇 **Edit Policy** (編輯政策)。

1. 選擇 **JSON** 標籤。

1. 更新您的 JSON 政策。

1. 選擇**檢閱政策**。

1. 選擇**儲存變更**。

### 連接 JSON 政策以使用其他 AWS 服務
<a name="mwaa-create-role-attach-json-policy"></a>

您可以為 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 主控台上開啟[環境](https://console.aws.amazon.com/mwaa/home#/environments)頁面。

1. 選擇環境。

1. 在**許可**窗格中選擇您的執行角色。

1. 選擇**連接政策**。

1. 選擇 **Create policy** (建立政策)。

1. 選擇 **JSON**。

1. 貼上 JSON 政策。

1. 選擇**下一步：標籤**、**下一步：檢閱**。

1. 輸入政策的描述性名稱 （例如 `SecretsManagerReadPolicy`) 和描述。

1. 選擇**建立政策**。

## 使用帳戶層級公有存取區塊授予 Amazon S3 儲存貯體的存取權
<a name="mwaa-create-role-s3-publicaccessblock"></a>

您可能想要使用 Amazon S3 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutPublicAccessBlock.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutPublicAccessBlock.html) 操作來封鎖對您帳戶中所有儲存貯體的存取。當您封鎖對帳戶中所有儲存貯體的存取時，您的環境執行角色必須在許可政策中包含 `s3:GetAccountPublicAccessBlock`動作。

下列範例示範當封鎖對您帳戶中所有 Amazon S3 儲存貯體的存取時，您必須連接至執行角色的政策。

------
#### [ JSON ]

****  

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

------

如需限制存取 Amazon S3 儲存貯體的詳細資訊，請參閱《[Amazon Simple Storage Service 使用者指南》中的封鎖對 Amazon S3 儲存體的公開存取](https://docs.aws.amazon.com/)。 **

## 使用 Apache Airflow 連線
<a name="mwaa-create-role-airflow-connections"></a>

您也可以建立 Apache Airflow 連線，並在 Apache Airflow 連線物件中指定執行角色及其 ARN。若要進一步了解，請參閱 [管理 Apache Airflow 的連線](manage-connections.md)。

## 執行角色的 JSON 政策範例
<a name="mwaa-create-role-json"></a>

您可以使用本節中的兩個範例許可政策來取代用於現有執行角色的許可政策，或建立新的執行角色並用於您的環境。這些政策包含 Apache Airflow 日誌群組[的資源 ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html) 預留位置、[Amazon S3 儲存貯體](mwaa-s3-bucket.md)和 [Amazon MWAA 環境](create-environment.md)。

我們建議複製範例政策、取代範例 ARNs 或預留位置，然後使用 JSON 政策來建立或更新執行角色。

### 客戶受管金鑰的範例政策
<a name="mwaa-create-role-cmk"></a>

下列範例提供可用於[客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)的執行角色政策。

------
#### [ 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 主控台將](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) `"airflow.amazonaws.com"` `"airflow-env.amazonaws.com"`和服務主體新增至此執行角色的信任實體清單，或使用 將這些服務主體放入此執行角色的擔任角色政策文件中[https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) AWS CLI。請參閱下列擔任角色政策文件範例：

------
#### [ JSON ]

****  

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

------

然後將下列 JSON 政策連接至您的[客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。此政策使用 [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context) 條件金鑰字首，以允許存取 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擁有金鑰的範例政策
<a name="mwaa-create-role-aocmk"></a>

下列範例顯示您可以用於 [AWS擁有的金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)的執行角色政策。

------
#### [ 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"
                    ]
                }
            }
        }
    ]
}
```

------

## 後續步驟？
<a name="mwaa-create-role-next-up"></a>
+ 了解您和您的 Apache Airflow 使用者在 中存取您的環境所需的許可[存取 Amazon MWAA 環境](access-policies.md)。
+ 了解 [使用客戶受管金鑰進行加密](custom-keys-certs.md)。
+ 探索更多[客戶受管政策範例](https://docs.aws.amazon.com/kms/latest/developerguide/customer-managed-policies.html)。