Amazon ECS任務執行IAM角色 - Amazon Elastic Container Service

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

Amazon ECS任務執行IAM角色

任務執行角色會授予 Amazon ECS容器和 Fargate 代理程式代表您 AWS API撥打電話的許可。任務執行IAM角色是必要的,視任務的需求而定。您可擁有多個任務執行角色,以用於與帳戶相關聯的不同用途和服務。如需應用程式需要執行的IAM許可,請參閱 Amazon ECS任務IAM角色

以下是任務執行IAM角色的常見使用案例:

  • 您的任務託管在 AWS Fargate外部執行個體上或外部執行個體上,並且:

    • 從 Amazon ECR私有儲存庫提取容器映像。

    • 從執行任務的帳戶的不同帳戶中的 Amazon ECR私有儲存庫提取容器映像。

    • 會使用 CloudWatch 日誌驅動程式將容器日誌傳送至awslogs日誌。如需詳細資訊,請參閱將 Amazon ECS日誌傳送至 CloudWatch

  • 您的任務託管在 AWS Fargate 或 Amazon EC2執行個體上,並且:

注意

Amazon ECS容器代理程式 1.16.0 版及更新版本支援任務執行角色。

Amazon ECS提供名為 A 的受管政策mazonECSTaskExecutionRolePolicy ,其中包含上述常見使用案例所需的許可。如需詳細資訊,請參閱 AWS 受管政策參考指南 中的 AmazonECSTaskExecutionRolePolicy。對於特殊使用案例,可能需要將內嵌政策新增至任務執行角色

Amazon ECS主控台會建立任務執行角色。您可以手動連接任務的 受管IAM政策,以允許 Amazon ECS 在引入未來功能和增強功能時新增許可。您可以使用IAM主控台搜尋來搜尋ecsTaskExecutionRole,並查看您的帳戶是否已具有任務執行角色。如需詳細資訊,請參閱 IAM 使用者指南 中的IAM主控台搜尋

如果您以已驗證的使用者身分提取映像,則不太可能受到 Docker Hub 的提取速率限制 所發生的變更影響。如需詳細資訊,請參閱容器執行個體的私有登錄檔身分驗證

透過使用 Amazon ECR和 Amazon ECR Public,您可以避免 Docker 施加的限制。如果您從 Amazon 提取映像ECR,這也有助於縮短網路提取時間,並減少流量離開 時的資料傳輸變更VPC。

當您使用 Fargate 時,您必須使用 repositoryCredentials 對私有映像登錄檔進行驗證。無法為 Fargate 上託管的任務設定 Amazon ECS容器代理程式環境變數ECS_ENGINE_AUTH_TYPEECS_ENGINE_AUTH_DATA或修改 ecs.config 檔案。如需詳細資訊,請參閱任務的私有登錄檔身分驗證

建立任務執行 角色

如果您的帳戶尚未具有任務執行角色,請使用下列步驟建立角色。

AWS Management Console
建立 Elastic Container Service 的服務角色 (IAM 主控台)
  1. 登入 AWS Management Console 並在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在IAM主控台的導覽窗格中,選擇角色 ,然後選擇建立角色

  3. 對於 Trusted entity type (信任的實體類型),請選擇 AWS 服務

  4. 針對服務或使用案例 ,選擇彈性容器服務 ,然後選擇彈性容器服務任務使用案例。

  5. 選擇 Next (下一步)

  6. 新增許可區段中,搜尋 A mazonECSTaskExecutionRolePolicy,然後選擇政策。

  7. 選擇 Next (下一步)

  8. 針對角色名稱 ,輸入ecsTaskExecution角色

  9. 檢閱角色,然後選擇 Create role (建立角色)。

AWS CLI

取代全部 user input 使用您自己的資訊。

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

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. ecsTaskExecutionRole 使用上一個步驟中建立的信任政策來建立名為 IAM的角色。

    aws iam create-role \ --role-name ecsTaskExecutionRole \ --assume-role-policy-document file://ecs-tasks-trust-policy.json
  3. 將 AWS 受管AmazonECSTaskExecutionRolePolicy政策連接至ecsTaskExecutionRole角色。

    aws iam attach-role-policy \ --role-name ecsTaskExecutionRole \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

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

功能 額外許可

使用 Secrets Manager 憑證來存取容器映像私有儲存庫

私有登錄驗證許可

使用 Systems Manager 或 Secrets Manager 傳遞敏感資料

Secrets Manager 或 Systems Manager 許可

讓 Fargate 任務透過介面端點提取 Amazon ECR映像

Fargate 任務透過介面端點許可提取 Amazon ECR映像

Amazon S3 儲存貯體中的主機組態檔案

Amazon S3 檔案儲存許可

設定 Container Insights 以檢視 Amazon ECS生命週期事件

設定 Container Insights 以檢視 Amazon ECS生命週期事件所需的許可

在 Container Insights 中檢視 Amazon ECS生命週期事件

在 Container Insights 中檢視 Amazon ECS生命週期事件所需的許可

私有登錄驗證許可

若要將存取提供給您建立的秘密,請將以下許可字作為內嵌政策,新增到任務執行角色。如需詳細資訊,請參閱新增和移除IAM政策。

  • secretsmanager:GetSecretValue

  • kms:Decrypt—只有當您的金鑰使用自訂KMS金鑰而非預設金鑰時才需要。必須新增自訂金鑰的 Amazon Resource Name (ARN) 作為資源。

下列為新增許可的內嵌政策範例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name", "arn:aws:kms:<region>:<aws_account_id>:key/key_id" ] } ] }

Secrets Manager 或 Systems Manager 許可

允許容器代理程式提取必要 AWS Systems Manager 或 Secrets Manager 資源的許可。如需詳細資訊,請參閱將敏感資料傳遞至 Amazon ECS容器

使用 Secrets Manager

若要允許存取您建立的 Secrets Manager 秘密,請將以下許可新增到任務執行角色。如需有關如何管理許可的資訊,請參閱 IAM 使用者指南 中的新增和移除IAM身分許可

  • secretsmanager:GetSecretValue – 如果參考 Secrets Manager 秘密,則此項目為必要。新增從 Secrets Manager 擷取密碼的許可。

下列政策範例新增必要許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name" ] } ] }

使用 Systems Manager

重要

對於使用EC2啟動類型的任務,您必須使用ECS代理程式組態變數ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true才能使用此功能。您可以在建立容器執行個體期間將其新增至./etc/ecs/ecs.config檔案,也可以將其新增至現有執行個體,然後重新啟動ECS代理程式。如需詳細資訊,請參閱Amazon ECS容器代理程式組態

若要允許存取您建立的 Systems Manager Parameter Store 參數,請將以下許可當作政策,手動新增到任務執行角色。如需有關如何管理許可的資訊,請參閱 IAM 使用者指南 中的新增和移除IAM身分許可

  • ssm:GetParameters – 如果參考任務定義中的 Systems Manager Parameter Store 參數,則此項目為必要。新增擷取 Systems Manager 參數的許可。

  • secretsmanager:GetSecretValue – 如果直接參考 Secrets Manager 秘密,或者 Systems Manager Parameter Store 參數參考任務定義中的 Secrets Manager 秘密,則此項目為必要。新增從 Secrets Manager 擷取密碼的許可。

  • kms:Decrypt – 只有在秘密使用客戶受管金鑰而非預設金鑰時,此項目為必要。自訂金鑰ARN的 應新增為資源。新增解密客戶受管金鑰的許可。

下列政策範例新增必要許可:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters", "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:ssm:region:aws_account_id:parameter/parameter_name", "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name", "arn:aws:kms:region:aws_account_id:key/key_id" ] } ] }

Fargate 任務透過介面端點許可提取 Amazon ECR映像

當啟動使用 Fargate 啟動類型的任務ECR時,當 ECR Amazon 設定為使用介面VPC端點時從 Amazon 提取映像時,您可以限制任務對特定VPC或VPC端點的存取。透過為要使用IAM條件索引鍵的任務建立任務執行角色來執行此操作。

使用下列IAM全域條件金鑰來限制對特定 VPC 或 VPC 端點的存取。如需詳細資訊,請參閱 AWS 全域條件內容金鑰

  • aws:SourceVpc- 限制對特定 的存取VPC。您可以將 限制VPC為VPC託管任務和端點的 。

  • aws:SourceVpce- 限制對特定VPC端點的存取。

以下任務執行角色政策提供新增條件金鑰的範例:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpce": "vpce-xxxxxx", "aws:sourceVpc": "vpc-xxxxx" } } } ] }

Amazon S3 檔案儲存許可

當您指定託管在 Amazon S3 中的組態檔案時,任務執行角色必須包含組態檔案的s3:GetObject許可,以及檔案所在的 Amazon S3 儲存貯體的s3:GetBucketLocation許可。如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的在政策中指定許可

下列範例政策新增從 Amazon S3 擷取檔案所需的許可。指定 Amazon S3 儲存貯體的名稱和組態檔案名稱。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/folder_name/config_file_name" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ] } ] }

設定 Container Insights 以檢視 Amazon ECS生命週期事件所需的許可

任務角色需要下列許可才能設定生命週期事件:

  • 事件:PutRule

  • 事件:PutTargets

  • 日誌:CreateLogGroup

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutRule", "events:PutTargets", "logs:CreateLogGroup" ], "Resource": "*" } ] }

在 Container Insights 中檢視 Amazon ECS生命週期事件所需的許可

檢視生命週期事件需要以下許可: 將以下許可作為內嵌政策新增至任務執行角色。如需詳細資訊,請參閱新增和移除IAM政策。

  • 事件:DescribeRule

  • 事件:ListTargetsByRule

  • 日誌:DescribeLogGroups

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:DescribeRule", "events:ListTargetsByRule", "logs:DescribeLogGroups" ], "Resource": "*" } ] }