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

Amazon ECS 任務執行 IAM 角色

任務執行角色會授予 Amazon ECS 容器和 Fargate 代理程式許可,以代表您進行 AWS API 呼叫。視任務需求而定,任務執行 IAM 角色是必要的項目。您可擁有多個任務執行角色,以用於與帳戶相關聯的不同用途和服務。

注意

Amazon ECS 會定期傳送角色的臨時憑證給在執行個體上執行的代理程式,從而使代理程式能夠使用這些許可,但任務中的容器無法直接存取這些許可。有關容器內應用程式程式碼需要執行的 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 Managed Policy Reference Guide 中的 AmazonECSTaskExecutionRolePolicy。針對特殊使用案例,可能需要將內嵌政策新增至任務執行角色

Amazon ECS 主控台會建立任務執行角色。您可手動連接任務的受管 IAM 政策,讓 Amazon ECS 為日後推出的功能和增強功能新增許可。您可以使用 IAM 主控台搜尋功能來搜尋 ecsTaskExecutionRole,確認帳戶是否已具備任務執行角色。如需詳細資訊,請參閱 IAM user guide 中的 IAM console search

如果您以經身分驗證的使用者提取映像,受到 Docker Hub usage and limits 變更的影響會較小。如需詳細資訊,請參閱容器執行個體的私有登錄檔身分驗證

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

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

建立任務執行角色

如果帳戶還沒有任務執行角色,請使用下列步驟來建立角色。

the console
建立 Elastic Container Service 的服務角色 (IAM 主控台)
  1. 登入 the console,並前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

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

  4. 服務或使用案例欄位中選擇 Elastic Container Service,然後選擇 Elastic Container Service 任務使用案例。

  5. 選擇下一步

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

  7. 選擇下一步

  8. 角色名稱欄位中,輸入 ecsTaskExecutionRole

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

AWS CLI

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

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

    JSON
    JSON
    { "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 憑證從 AWS 外部私有登錄檔 (例如 Docker Hub、Quay.io 或您自己的私有登錄檔) 提取容器映像

私有登錄檔身分驗證許可

透過 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 生命週期事件所需的許可

私有登錄檔身分驗證許可

私有登錄檔身分驗證允許 Amazon ECS 任務從需要身分驗證憑證的 AWS 外部私有登錄檔 (例如 Docker Hub、Quay.io 或您自己的私有登錄檔) 提取容器映像。此功能透過 Secrets Manager 安全地儲存登錄檔憑證,這些憑證隨後會在任務定義中透過 repositoryCredentials 參數進行引用。

如需有關設定私有登錄檔身分驗證的詳細資訊,請參閱在 Amazon ECS 中使用非 AWS 容器映像

若要存取內含私有登錄檔憑證的秘密,請將以下許可以內嵌政策形式新增至任務執行角色。如需詳細資訊,請參閱新增和移除 IAM 政策

  • secretsmanager:GetSecretValue – 從 Secrets Manager 擷取私有登錄檔憑證時需要。

  • kms:Decrypt - 只有在您的秘密使用自訂 KMS 金鑰而非預設金鑰時,才需要此項目。您的自訂金鑰的 Amazon Resource Name (ARN) 必須新增為資源。

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

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret_name", "arn:aws:kms:us-east-1:111122223333: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 擷取密碼的許可。

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

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-east-1:111122223333: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 應該新增為資源。新增解密客戶受管金鑰的許可。

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

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

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

當 Amazon ECR 設定為使用介面 VPC 端點時,只要您啟動使用 Fargate 的任務 (可從 Amazon ECR 中提取映像) 時,您就可以限制任務存取特定的 VPC 或 VPC 端點。建立任務執行角色,讓任務使用利用 IAM 條件金鑰的角色,即可完成此操作。

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

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

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

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

JSON
{ "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": "arn:aws:ecr:*:*:repository/*", "Condition": { "StringEquals": { "aws:sourceVpce": "vpce-0123456789abcdef0" } } } ] }

Amazon ECR 許可

當您需要從 Amazon ECR 私有儲存庫提取容器映像時,需要如下許可。任務執行角色應具有這些許可,以允許 Amazon ECS 容器與 Fargate 代理程式代表您提取容器映像。對於基本 ECS 實作,這些許可應新增至任務執行角色,而非任務 IAM 角色。

Amazon ECS 任務執行角色受管政策 (AmazonECSTaskExecutionRolePolicy) 包含從 Amazon ECR 提取映像的必要許可。如果使用受管政策,則不需要另外新增這些許可。

如果要建立自訂政策,請包含下列許可,以允許從 Amazon ECR 提取映像:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", "ecr:GetAuthorizationToken" ], "Resource": "*" } ] }

請注意,如果應用程式程式碼需要直接與 Amazon ECR API 互動,這些許可與任務 IAM 角色中可能需要的許可不同。如需有關任務 IAM 角色許可的資訊,請參閱 Amazon ECR 許可

Amazon S3 檔案儲存許可

如果您指定的組態檔案託管於 Amazon S3,則任務執行角色必須包含組態檔案的 s3:GetObject 許可,以及檔案所在 Amazon S3 儲存貯體的 s3:GetBucketLocation 許可。如需詳細資訊,請參閱 Amazon Simple Storage Service User Guide 中的 Policy actions for Amazon S3

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

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