

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

# Amazon ECS 受管執行個體執行個體設定檔
<a name="managed-instances-instance-profile"></a>

執行個體設定檔是 IAM 容器，只擁有一個 IAM 角色，並允許 Amazon ECS 受管執行個體安全地擔任該角色。執行個體設定檔包含執行個體角色，ECS 代理程式會擔任此角色來向叢集註冊執行個體，並與 ECS 服務通訊。

**重要**  
如果您使用 Amazon ECS 受管執行個體搭配 `AmazonECSInfrastructureRolePolicyForManagedInstances`受管政策，執行個體角色名稱必須以 開頭`ecsInstanceRole`。政策範圍`iam:PassRole`為 `arn:aws:iam::*:role/ecsInstanceRole*`，因此不相符的名稱會在任務啟動時造成授權錯誤。當您省略 CloudFormation 時，這很常見`RoleName`，因為 CloudFormation 會自動產生 等名稱`MyStack-InstanceRole-ABC123`。  
如果您改為使用自訂基礎設施角色政策，只要您的政策包含以執行個體角色 ARN 為目標的`iam:PassRole`授與，執行個體角色就可以擁有任何名稱。

## 使用信任政策建立角色
<a name="create-instance-role"></a>

將所有 *user input* 取代為自己的資訊。

1. 建立名為 `ecsInstanceRole-trust-policy.json` 的檔案，其中包含用於 IAM 角色的信任政策。檔案應包含以下內容：

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

****  

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

------

1. 使用以下 AWS CLI 命令，`ecsInstanceRole`使用您在上一個步驟中建立的信任政策來建立名為 的角色。

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

1. 將 AWS 受管`AmazonECSInstanceRolePolicyForManagedInstances`政策連接至`ecsInstanceRole`角色。

   ```
   aws iam attach-role-policy \
         --role-name ecsInstanceRole \
         --policy-arn arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstances
   ```
**注意**  
如果您選擇套用最低權限許可，並改為指定自己的許可，您可以新增下列許可，以協助疑難排解 Amazon ECS 受管執行個體的任務相關問題：  
`ecs:StartTelemetrySession`
`ecs:PutSystemLogEvents`

您也可以透過 IAM 主控台的**自訂信任政策**工作流程來建立角色。如需詳細資訊，請參閱 *IAM User Guide* 中的 [Creating a role using custom trust policies (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

建立檔案之後，您必須授予使用者將角色傳遞至 Amazon ECS 的許可。

## 使用 建立執行個體描述檔 AWS CLI
<a name="create-instance-profile"></a>

建立角色之後，請使用 AWS CLI建立執行個體設定檔：

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

將角色新增至執行個體設定檔：

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

驗證設定檔是否建立成功：

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

## 使用 建立執行個體描述檔 CloudFormation
<a name="create-instance-profile-cfn"></a>

您可以使用 AWS CloudFormation 來建立執行個體角色和執行個體描述檔。根據您是否使用 AWS受管基礎設施政策或自訂政策，選擇下列其中一個選項。

### 選項 1：使用 ecsInstanceRole 命名慣例 （建議）
<a name="create-instance-profile-cfn-managed"></a>

當您使用 AWS受管基礎設施政策時，您必須明確`RoleName`地將 設定為開頭為 的值`ecsInstanceRole`。如果您省略 `RoleName`， CloudFormation 會自動產生不符合受管政策`iam:PassRole`條件的名稱，且任務無法啟動。

```
Resources:
  EcsInstanceRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: ecsInstanceRole
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstances

  EcsInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      InstanceProfileName: ecsInstanceRole
      Roles:
        - !Ref EcsInstanceRole
```

### 選項 2：使用自訂角色名稱
<a name="create-instance-profile-cfn-custom"></a>

如果您偏好讓 CloudFormation 產生角色名稱，或使用開頭不是 的自訂名稱`ecsInstanceRole`，則必須在基礎設施角色上新增授予執行個體角色`iam:PassRole`的內嵌政策。

```
Resources:
  EcsInstanceRole:
    Type: AWS::IAM::Role
    Properties:
      # No RoleName — CFN auto-generates
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstances

  EcsInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Roles:
        - !Ref EcsInstanceRole

  EcsInfrastructureRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: ecs.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonECSInfrastructureRolePolicyForManagedInstances
      Policies:
        - PolicyName: PassInstanceRoleToEC2
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action: iam:PassRole
                Resource: !GetAtt EcsInstanceRole.Arn
                Condition:
                  StringLike:
                    iam:PassedToService: "ec2.*"
```

## 疑難排解
<a name="managed-instances-instance-profile-troubleshooting"></a>

### 任務因 iam：PassRole 授權錯誤而失敗
<a name="managed-instances-instance-profile-ts-passrole"></a>

如果您的任務使用提及 `ResourceInitializationError`的 失敗`iam:PassRole`，請確認您的執行個體角色名稱以 開頭`ecsInstanceRole`。您可以在 CloudFormation 主控台的堆疊**資源**索引標籤下檢查自動產生的名稱。如果名稱不相符，則：
+ 將 `RoleName: ecsInstanceRole`新增至您的 `AWS::IAM::Role` 資源。
+ 將明確的`iam:PassRole`內嵌政策新增至您的基礎設施角色。如需詳細資訊，請參閱[選項 2：使用自訂角色名稱](#create-instance-profile-cfn-custom)。