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 私有儲存庫提取容器映像。

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

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

注意

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

Amazon ECS 提供名為 AmazonECSTaskExecutionRolePolicy 的受管政策,其中包含上述常見使用案例所需的許可。如需詳細資訊,請參閱《 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 ,並在 https://https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

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

  5. 選擇 Next (下一步)

  6. 新增許可區段中,搜尋 AmazonECSTaskExecutionRolePolicy,然後選取政策。

  7. 選擇 Next (下一步)

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

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

AWS CLI

所有使用者輸入取代為您自己的資訊。

  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 映像

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

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" ] } ] }

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

當 Amazon ECR 設定為使用介面 VPC 端點時,只要您啟動使用 Fargate 啟動類型的任務時 (此類型可從 Amazon 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 生命週期事件所需的許可

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

  • events:PutRule

  • events:PutTargets

  • logs:CreateLogGroup

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

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

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

  • events:DescribeRule

  • events:ListTargetsByRule

  • logs:DescribeLogGroups

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