Amazon ECS 任务执行 IAM 角色 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon ECS 任务执行 IAM 角色

任务执行角色的 ,该角色授予 Amazon ECS 容器和 Fargate 代理代表您进行 Amazon API 调用的权限。任务执行 IAM 角色是必需的,具体取决于任务的要求。您可以将多个任务执行角色用于与您的账户关联的服务不同目的。

以下是任务执行 IAM 角色的常见使用案例:

  • 您的任务托管在 Amazon Fargate 和...

    • 从 Amazon ECR 私有存储库中提取容器映像。

    • 使用 awslogs 日志驱动程序将容器日志发送到 CloudWatch Logs。有关更多信息,请参阅使用 awslogs 日志驱动程序

  • 您的任务托管位置可以在 Amazon Fargate 或 Amazon EC2 instances 以及...

注意

该任务执行角色由 Amazon ECS 容器代理版本 1.16.0 和更高版本支持。

Amazon ECS 提供了名为 AmazonECSTaskExecutionRolePolicy 的托管策略,该策略包含上述常见使用案例所需的权限。对于特殊使用案例,可能需要向您的任务执行角色添加内联策略,这些策略概述如下。

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

可以在 Amazon ECS 控制台中为您创建一个Amazon ECS 任务执行角色;但是,您应该为任务手动附加托管 IAM policy,允许 Amazon ECS 在引入未来功能和增强功能时添加权限。您可以使用以下过程检查并确定您的账户是否已拥有 Amazon ECS 任务执行角色并且已附加托管 IAM policy (如果需要)。

在 IAM 控制台中检查 ecsTaskExecutionRole

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 Roles(角色)。

  3. 在角色列表中搜索 ecsTaskExecutionRole。如果角色不存在,请参阅创建任务执行 IAM 角色。如果角色存在,请选择角色以查看附加的策略。

  4. Permissions (权限) 选项卡上,确保将 AmazonECSTaskExecutionRolePolicy 托管策略附加到该角色。如果附加该策略,则将正确配置 Amazon ECS 任务执行角色。否则,请执行以下子步骤来附加策略。

    1. 依次选择 Add Permissions(添加权限)和 Attach policies(附加策略)。

    2. 要缩小要附加的可用策略的范围,请为筛选条件键入 AmazonECSTaskExecutionRolePolicy

    3. 选中 AmazonECSTaskExecutionRolePolicy 策略左侧的框并选择 Attach policy

  5. 选择 Trust Relationships (信任关系)

  6. 验证信任关系是否包含以下策略。如果信任关系符合以下策略,请选择 Cancel。如果信任关系不符合,请选择 Edit trust policy(编辑信任策略),将策略复制到 Policy Document(策略文档)窗口中并选择 Update policy(更新策略)。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

创建任务执行 IAM 角色

如果您的账户尚未具有任务执行角色,请使用以下步骤创建角色。

创建任务执行 IAM 角色 (Amazon Web Services Management Console)

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 Roles(角色)和 Create role(创建角色)。

  3. Trusted entity type(可信实体类型)部分,选择 Amazon service(Amazon 服务)、Elastic Container Service

  4. 对于 Use case(使用案例),选择 Elastic Container Service Task(Elastic Container Service 任务),然后选择 Next(下一步)。

  5. Attach permissions policy(附加权限策略)页面上,执行以下操作:

    1. 搜索 AmazonECSTaskExecutionRolePolicy,然后选择策略。

    2. Set permissions boundary - optional(设置权限边界 - 可选)下,选择 Create role without a permissions boundary(创建没有权限边界的角色)。

    3. 选择 Next (下一步)

  6. Role details(角色详细信息)下,执行以下操作:

    1. 对于 Role name(角色名称),键入 ecsTaskExecutionRole

    2. 对于 Add tags (optional)(添加标签(可选)),指定要与策略关联的任何自定义标签。

  7. 选择 Create role(创建角色)。

创建任务执行 IAM 角色 (Amazon 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. 将 Amazon 托管 AmazonECSTaskExecutionRolePolicy 策略 附加到 ecsTaskExecutionRole 角色。此策略提供:

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

私有注册表身份验证所需的 IAM 权限

需要 Amazon ECS 任务执行角色才能使用私有注册表身份验证功能。这允许容器代理拉取容器映像。有关更多信息,请参阅任务的私有注册表身份验证

要提供对您创建的 密钥的访问权限,请将以下权限作为内联策略手动添加到任务执行角色。有关更多信息,请参阅添加和删除 IAM policy

  • secretsmanager:GetSecretValue

  • kms:Decrypt - 仅当密钥使用自定义 KMS 密钥而不是原定设置密钥时才需要。您的自定义密钥的 ARN 应添加为资源。

添加权限的示例内联策略如下所示。

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

密钥 Amazon ECS 机密所需的 IAM 权限

要使用 Amazon ECS 密钥功能,您必须具有 Amazon ECS 任务执行角色并在任务定义中引用它。这允许容器代理提取必要的 Amazon Systems Manager 或 Secrets Manager 资源。有关更多信息,请参阅指定敏感数据

要提供对您创建的 Amazon Systems Manager Parameter Store 参数的访问权限,请将以下权限作为内联策略手动添加到任务执行角色。有关更多信息,请参阅添加和删除 IAM policy

  • ssm:GetParameters— 当您在任务定义中引用 Systems Manager Parameter Store 参数时是必需的。

  • secretsmanager:GetSecretValue— 当您直接引用 Secrets Manager 密钥或者您的 System Manager Parameter Store 参数在任务定义中引用 Secrets Manager 密钥时,这是必需的。

  • kms:Decrypt- 仅当您的密钥使用自定义 KMS 密钥而不是默认密钥时才需要。您的自定义密钥的 ARN 应添加为资源。

以下示例内联策略添加所需权限:

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

通过接口端点拉取 Amazon ECR 映像的 Fargate 任务的可选 IAM 权限

在 Amazon ECR 配置为使用接口 VPC 端点的情况下,当启动使用 Fargate 启动类型的任务(该任务从 Amazon ECR 中提取映像)时,可以限制任务对特定 VPC 或 VPC 端点的访问。可通过为要使用 IAM 条件键的任务创建任务执行角色来做到这一点。

使用以下 IAM 全局条件键来限制对特定 VPC 或 VPC 端点的访问。有关更多信息,请参阅 Amazon Global Condition Context Keys

  • aws:SourceVpc - 限制对特定 VPC 的访问。

  • aws:SourceVpce - 限制对特定 VPC 端点的访问。

以下任务执行角色策略提供了一个添加条件键的示例:

重要

无法对 ecr:GetAuthorizationToken API 操作应用 aws:sourceVpcaws:sourceVpce 条件键,因为 GetAuthorizationToken API 调用将通过 Amazon Fargate拥有的弹性网络接口而不是任务的弹性网络接口。

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