本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon ECS 受管執行個體執行個體設定檔
執行個體設定檔是 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授與,執行個體角色就可以擁有任何名稱。
使用信任政策建立角色
將所有 user input 取代為自己的資訊。
-
建立名為
ecsInstanceRole-trust-policy.json的檔案,其中包含用於 IAM 角色的信任政策。檔案應包含以下內容: -
使用以下 AWS CLI 命令,
ecsInstanceRole使用您在上一個步驟中建立的信任政策來建立名為 的角色。aws iam create-role \ --role-name ecsInstanceRole \ --assume-role-policy-document file://ecsInstanceRole-trust-policy.json -
將 AWS 受管
AmazonECSInstanceRolePolicyForManagedInstances政策連接至ecsInstanceRole角色。aws iam attach-role-policy \ --role-name ecsInstanceRole \ --policy-arn arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstances注意
如果您選擇套用最低權限許可,並改為指定自己的許可,您可以新增下列許可,以協助疑難排解 Amazon ECS 受管執行個體的任務相關問題:
ecs:StartTelemetrySessionecs: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 授權錯誤而失敗
如果您的任務失敗並提及 ResourceInitializationError,iam:PassRole請確認您的執行個體角色名稱以 開頭ecsInstanceRole。您可以在 CloudFormation 主控台的堆疊資源索引標籤下檢查自動產生的名稱。如果名稱不相符,則:
-
將
RoleName: ecsInstanceRole新增至您的AWS::IAM::Role資源。 -
將明確的
iam:PassRole內嵌政策新增至您的基礎設施角色。如需詳細資訊,請參閱選項 2:使用自訂角色名稱。