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 Logs。如需詳細資訊,請參閱將 Amazon ECS 日誌傳送至 CloudWatch

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

注意

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

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

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

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

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

當您使用 Fargate 時,您必須使用 repositoryCredentials 對私有映像登錄檔進行驗證。無法設定 Amazon ECS 容器代理程式環境變數ECS_ENGINE_AUTH_DATAECS_ENGINE_AUTH_TYPE或修改 Fargate 上託管任務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. 新增許可區段中,搜尋 AmazonECSTaskExecutionRolePolicyWord,然後選擇政策。

  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 使用者指南中的新增和移除 Word 身分許可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 使用者指南中的新增和移除 Word 身分許可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 啟動類型的任務時,當 Amazon ECR 設定為使用介面 VPC 端點ECR時,您可以限制任務對特定 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 擷取檔案所需的許可。指定 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": "*" } ] }