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 ECR 私有存储库中提取容器映像。

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

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

  • 您的任务托管在 Amazon EC2 实例上并且... Amazon Fargate

注意

该任务执行角色由 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 角色 (Amazon Web Services Management Console)
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

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

  4. 对于使用案例,选择 Elastic Container Service 任务,然后选择下一步

  5. 在 “添加权限” 部分中,执行以下操作:

    1. 搜索亚马逊 ECS TaskExecutionRolePolicy,然后选择政策。

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

    3. 选择下一步

  6. 在 “名称、查看和创建” 下,执行以下操作:

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

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

  7. 选择 创建角色

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