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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon ECS 任务执行 IAM 角色

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

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

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

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

    • 在与运行任务的账户不同的账户中,从 Amazon ECR 私有存储库中提取容器映像。

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

  • 您的任务托管在两 Amazon Fargate 个 Amazon EC2 实例上,而且...

注意

该任务执行角色由 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 在引入未来功能和增强功能时添加权限。您可以使用 IAM 控制台搜索来搜索ecsTaskExecutionRole并查看您的账户是否已拥有任务执行角色。有关更多信息,请参阅 IAM 用户指南中的 IAM 控制台搜索

创建任务执行 (ecsTaskExecutionRole) 角色

如果您的账户还没有任务执行角色,请按照以下步骤创建该角色。

Amazon Web Services Management Console
为弹性容器服务创建服务角色(IAM 控制台)
  1. 登录 Amazon Web Services Management Console 并打开 IAM 控制台,网址为 https://console.aws.amazon.com/iam/

  2. 在 IAM 控制台的导航窗格中,选择角色,然后选择创建角色

  3. 对于 Trusted entity type(可信实体类型),选择 Amazon Web Service

  4. 对于服务或用例,选择弹性容器服务,然后选择弹性容器服务任务用例。

  5. 选择下一步

  6. 在 “添加权限” 部分,搜索 AmazonECS TaskExecutionRolePolicy,然后选择策略。

  7. (可选)设置权限边界。这是一项高级特征,可用于服务角色,但不可用于服务相关角色。

    1. 打开设置权限边界部分,然后选择使用权限边界控制最大角色权限

      IAM 包含您账户中的 Amazon 托管策略和客户托管策略列表。

    2. 选择要用于权限边界的策略。

  8. 选择下一步

  9. 输入有助于识别角色的作用的角色名称或者角色名称后缀。

    重要

    命名角色时,请注意以下事项:

    • 角色名称在您内部必须是唯一的 Amazon Web Services 账户,并且不能因大小写而变得唯一。

      例如,不要同时创建名为 PRODROLEprodrole 的角色。当角色名称在策略中使用或者作为 ARN 的一部分时,角色名称区分大小写,但是当角色名称在控制台中向客户显示时(例如,在登录期间),角色名称不区分大小写。

    • 创建角色后,您无法编辑该角色的名称,因为其他实体可能会引用该角色。

  10. (可选)对于描述,输入角色的描述。

  11. (可选)要编辑角色的使用案例和权限,请在步骤 1:选择可信实体步骤 2:添加权限部分中选择编辑

  12. (可选)为了帮助识别、组织或搜索角色,请以键值对形式添加标签。有关在 IAM 中使用标签的更多信息,请参阅《IAM 用户指南》中的标记 IAM 资源

  13. 检查该角色,然后选择创建角色

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 密钥而不是原定设置密钥时才需要。您的自定义密钥的 Amazon 资源名称(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" ] } ] }

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

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

使用 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 密钥或者您的 System 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 任务的可选 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:GetAuthorizationTokenAPI 操作无法应用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" } } } ] }