View a markdown version of this page

Amazon ECS 受管執行個體執行個體設定檔 - Amazon Elastic Container Service

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

Amazon ECS 受管執行個體執行個體設定檔

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

重要

如果您使用 Amazon ECS 受管執行個體搭配 AmazonECSInfrastructureRolePolicyForManagedInstances受管政策,執行個體角色名稱必須以 開頭ecsInstanceRole。政策範圍iam:PassRolearn:aws:iam::*:role/ecsInstanceRole*,因此不相符的名稱會在任務啟動時造成授權錯誤。當您省略 CloudFormation 時,這很常見RoleName,因為 CloudFormation 會自動產生 等名稱MyStack-InstanceRole-ABC123

如果您改為使用自訂基礎設施角色政策,只要您的政策包含以執行個體角色 ARN 為目標的iam:PassRole授與,執行個體角色就可以擁有任何名稱。

使用信任政策建立角色

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

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

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
  2. 使用以下 AWS CLI 命令,ecsInstanceRole使用您在上一個步驟中建立的信任政策來建立名為 的角色。

    aws iam create-role \ --role-name ecsInstanceRole \ --assume-role-policy-document file://ecsInstanceRole-trust-policy.json
  3. 將 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)

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

使用 建立執行個體描述檔 AWS CLI

建立角色之後,請使用 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

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

選項 1:使用 ecsInstanceRole 命名慣例 (建議)

當您使用 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:使用自訂角色名稱

如果您偏好讓 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.*"

疑難排解

任務因 iam:PassRole 授權錯誤而失敗

如果您的任務失敗並提及 ResourceInitializationErroriam:PassRole請確認您的執行個體角色名稱以 開頭ecsInstanceRole。您可以在 CloudFormation 主控台的堆疊資源索引標籤下檢查自動產生的名稱。如果名稱不相符,則:

  • RoleName: ecsInstanceRole新增至您的 AWS::IAM::Role 資源。

  • 將明確的iam:PassRole內嵌政策新增至您的基礎設施角色。如需詳細資訊,請參閱選項 2:使用自訂角色名稱