

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

# Amazon ECS 容器執行個體 IAM 角色
<a name="instance_IAM_role"></a>

Amazon ECS 容器執行個體 (包括 Amazon EC2 和外部執行個體) 會執行 Amazon ECS 容器代理程式，並要求 IAM 角色，才能讓服務知道該代理程式為您所有。在您啟動容器執行個體並將它們註冊到叢集之前，您必須先為要使用的容器執行個體建立 IAM 角色。角色會在您用來登入主控台或執行 AWS CLI 命令的帳戶中建立。

**重要**  
如果您要向叢集註冊外部執行個體，則您使用的 IAM 角色也需要 Systems Manager 許可。如需詳細資訊，請參閱[Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。

Amazon ECS 提供 `AmazonEC2ContainerServiceforEC2Role` 受管 IAM 政策，其中包含使用完整 Amazon ECS 功能集所需的許可。此受管政策可連接至 IAM 角色，並與您的容器執行個體相關聯。或者，您可以在建立要使用的自訂政策時，使用受管政策作為指南。容器執行個體角色提供 Amazon ECS 容器代理程式和 Docker 協助程式代表您呼叫 AWS APIs所需的許可。如需受管政策的詳細資訊，請參閱 [AmazonEC2ContainerServiceforEC2Role](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEC2ContainerServiceforEC2Role)。

## 建立容器執行個體角色
<a name="instance-iam-role-create"></a>

**重要**  
如果您要向叢集註冊外部執行個體，請參閱 [Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。

您可手動建立角色並連接容器執行個體的受管 IAM 政策，讓 Amazon ECS 為日後推出的功能和改進新增許可。如有需要，請透過如下程序連接受管 IAM 政策。

------
#### [ AWS 管理主控台 ]

**建立 Elastic Container Service 的服務角色 (IAM 主控台)**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 在 IAM 主控台的導覽窗格中，選擇**角色**，然後選擇**建立角色**。

1. 對於 **Trusted entity type** (信任的實體類型)，請選擇 **AWS 服務**。

1. 在**服務或使用案例**欄位中，選擇 **Elastic Container Service**，然後選擇 **Elastic Container Service 的 EC2 角色**使用案例。

1. 選擇**下一步**。

1. 在**許可政策**區段中，確認已選取 **AmazonEC2ContainerServiceforEC2Role** 政策。
**重要**  
**AmazonEC2ContainerServiceforEC2Role** 受管政策應連接至容器執行個體 IAM 角色，否則您會收到使用 AWS 管理主控台 建立叢集的錯誤。

1. 選擇**下一步**。

1.  在**角色名稱**欄位中，輸入 **ecsInstanceRole**

1. 檢閱角色，然後選擇 **Create role** (建立角色)。

------
#### [ AWS CLI ]

將所有 *user input* 值取代為實際值。

1. 建立稱為 `instance-role-trust-policy.json` 的檔案，其中具有以下內容。  
****  

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

1. 使用以下命令，透過信任政策文件建立執行個體 IAM 角色。

   ```
   aws iam create-role \
       --role-name ecsInstanceRole \
       --assume-role-policy-document file://instance-role-trust-policy.json
   ```

1. 使用 [create-instance-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/create-instance-profile.html) 命令建立名為 `ecsInstanceRole-profile` 的執行個體設定檔。

   ```
   aws iam create-instance-profile --instance-profile-name ecsInstanceRole-profile
   ```

   回應範例

   ```
   {
       "InstanceProfile": {
           "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE",
           "Roles": [],
           "CreateDate": "2022-04-12T23:53:34.093Z",
           "InstanceProfileName": "ecsInstanceRole-profile",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceRole-profile"
       }
   }
   ```

1. 將 `ecsInstanceRole` 角色新增至 `ecsInstanceRole-profile` 執行個體設定檔。

   ```
   aws iam add-role-to-instance-profile \
       --instance-profile-name ecsInstanceRole-profile \
       --role-name ecsInstanceRole
   ```

1. 使用下列命令，將 `AmazonEC2ContainerServiceForEC2Role` 受管政策連接至角色。

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role \
       --role-name ecsInstanceRole
   ```

------

建立角色之後，請為角色新增下列功能的其他許可。


|  功能  |  額外許可  | 
| --- | --- | 
|  Amazon ECR 具有容器映像  |  [Amazon ECR 許可](#container-instance-role-ecr)  | 
| 讓 CloudWatch Logs 監控容器執行個體 | [監控容器執行個體許可](#cwl_iam_policy) | 
| Amazon S3 儲存貯體中的主機組態檔案 | [Amazon S3 唯讀存取權](#container-instance-role-s3) | 

## Amazon ECR 許可
<a name="container-instance-role-ecr"></a>

容器執行個體使用的 Amazon ECS 容器執行個體角色，必須擁有以下 Amazon ECR IAM 政策許可。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        }
    ]
}
```

------

如果您的容器執行個體使用 `AmazonEC2ContainerServiceforEC2Role` 受管政策，則您的角色具有適當的許可。

## 設定 awsvpcTrunking 帳戶設定所需的許可
<a name="container-instance-role-awsvpcTrunking-setting"></a>

Amazon ECS 支援使用受支援的 Amazon EC2 執行個體類型，以更高的 ENI 密度來啟動容器執行個體。當您使用此功能時，建議建立 2 個容器執行個體角色。為一個角色啟用 `awsvpcTrunking` 帳戶設定，並將該角色用於需要 ENI 主幹功能的任務。如需有關 `awsvpcTrunking` 帳戶設定的資訊，請參閱[透過帳戶設定使用 Amazon ECS 功能](ecs-account-settings.md)。

容器執行個體使用的容器執行個體角色，必須擁有以下設定帳戶設定的 IAM 政策許可 

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:ListAccountSettings", 
                "ecs:ListAttributes", 
                "ecs:PutAccountSetting" 
            ],
            "Resource": "*"
        }
    ]
}
```

------

若要使用容器執行個體角色，請將如下內容新增至執行個體使用者資料：

```
#!/bin/bash
aws ecs put-account-setting --name awsvpcTrunking --value enabled --region region
ECS_CLUSTER=MyCluster>> /etc/ecs/ecs.config
EOF
```

如需有關新增使用者資料至 EC2 執行個體的詳細資訊，請參閱 *Amazon EC2 User Guide* 中的 [Run commands on your Linux instance at launch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html)。

## Amazon S3 唯讀存取權
<a name="container-instance-role-s3"></a>

在 Amazon S3 中的私有儲存貯體內存放組態資訊，並對容器執行個體 IAM 角色授予唯讀存取權，這是一種允許容器執行個體在啟動時進行設定的安全且便利方法。您可以將`ecs.config`檔案的複本存放在私有儲存貯體中，使用 Amazon EC2 使用者資料安裝 ， AWS CLI 然後在執行個體啟動`/etc/ecs/ecs.config`時將您的組態資訊複製到 。

如需建立 `ecs.config` 檔案、將其存放在 Amazon S3 以及使用此組態啟動執行個體的詳細資訊，請參閱 [將 Amazon ECS 容器執行個體組態儲存於 Amazon S3 中](ecs-config-s3.md)。

您可以使用下列 AWS CLI 命令來允許容器執行個體角色的 Amazon S3 唯讀存取。將 *ecsInstanceRole* 取代為您建立的角色名稱。

```
aws iam attach-role-policy \
      --role-name ecsInstanceRole \
      --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
```

您也可以透過 IAM 主控台為角色新增 Amazon S3 唯讀存取權 (`AmazonS3ReadOnlyAccess`)。如需詳細資訊，請參閱 *AWS Identity and Access Management User Guide* 中的 [Updating permissions for a role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)。

## 監控容器執行個體許可
<a name="cwl_iam_policy"></a>

在容器執行個體將日誌資料傳送至 CloudWatch Logs 之前，您必須建立 IAM 政策，以允許 Amazon ECS 代理程式將客戶的應用程式日誌寫入 CloudWatch (通常透過 `awslogs` 驅動程式處理)。建立政策後，請將政策連接至 `ecsInstanceRole`。

------
#### [ AWS 管理主控台 ]

**若要使用 JSON 政策編輯器來建立政策**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側的導覽窗格中，選擇 **Policies (政策)**。

   如果這是您第一次選擇 **Policies (政策)**，將會顯示 **Welcome to Managed Policies (歡迎使用受管政策)** 頁面。選擇 **Get Started (開始使用)**。

1. 在頁面頂端，選擇 **Create policy (建立政策)**。

1. 在**政策編輯器**中，選擇 **JSON** 選項。

1. 輸入下列 JSON 政策文件：

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:PutLogEvents",
                   "logs:DescribeLogStreams"
               ],
               "Resource": ["arn:aws:logs:*:*:*"]
           }
       ]
   }
   ```

1. 選擇**下一步**。
**注意**  
您可以隨時切換**視覺化**與 **JSON** 編輯器選項。不過，如果您進行變更或在**視覺化**編輯器中選擇**下一步**，IAM 就可能會調整您的政策結構，以便針對視覺化編輯器進行最佳化。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[調整政策結構](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_policies.html#troubleshoot_viseditor-restructure)。

1. 在**檢視與建立**頁面上，為您正在建立的政策輸入**政策名稱**與**描述** (選用)。檢視**此政策中定義的許可**，來查看您的政策所授予的許可。

1. 選擇 **Create policy** (建立政策) 儲存您的新政策。

建立政策後，請將政策連接至容器執行個體角色。如需有關如何將政策連接至角色的資訊，請參閱 *AWS Identity and Access Management User Guide* 中的 [Updating permissions for a role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)。

------
#### [ AWS CLI ]

1. 建立稱為 `instance-cw-logs.json` 的檔案，其中具有以下內容。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:PutLogEvents",
                   "logs:DescribeLogStreams"
               ],
               "Resource": ["arn:aws:logs:*:*:*"]
           }
       ]
   }
   ```

1. 使用以下 命令，透過 JSON 政策文件檔案建立 IAM 政策。

   ```
   aws iam create-policy \
         --policy-name cwlogspolicy \
         --policy-document file://instance-cw-logs.json
   ```

1. 透過以下命令擷取您所建立 IAM 政策的 ARN。將 *cwlogspolicy* 取代為您建立的政策名稱。

   ```
   aws iam list-policies --scope Local --query 'Policies[?PolicyName==`cwlogspolicy`].Arn'
   ```

1. 使用下列命令，透過政策 ARN 將政策連接至容器執行個體 IAM 角色。

   ```
   aws iam attach-role-policy \
         --role-name ecsInstanceRole \
         --policy-arn arn:aws:iam:111122223333:aws:policy/cwlogspolicy
   ```

------