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

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

Amazon ECS任务执行IAM角色

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

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

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

    • 从推送容器映像从Amazon ECR私有存储库。

    • 将容器日志发送到CloudWatch Logs使用awslogs日志驱动程序。有关更多信息,请参阅 使用 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": "*" } ] }

网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon ECS任务执行角色可以在Amazon ECS控制台;但是,您应该手动将托管IAM允许的任务策略Amazon ECS以便能够在引入未来功能和增强功能时添加这些功能的权限。您可以使用以下过程检查并确定您的账户是否已拥有 Amazon ECS 任务执行角色并且已附加托管 IAM 策略(如果需要)。

在 IAM 控制台中检查 ecsTaskExecutionRole

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 Roles

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

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

    1. 选择附加策略。​

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

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

  5. 选择信任关系,然后选择编辑信任关系

  6. 验证信任关系是否包含以下策略。如果信任关系符合以下策略,请选择 Cancel。如果信任关系不符合,请将策略复制到 Policy Document 窗口中并选择 Update Trust 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.amazonaws.cn/iam/

  2. 在导航窗格中,选择 RolesCreate role

  3. 选择受信任实体的类型部分,选择Amazon服务Elastic Container Service

  4. 适用于选择您的使用案例中,选择Elastic Container Service,然后选择后续:Permissions (下一步:权限)

  5. 附加权限策略部分,搜索AmazonECSTaskExecutionRolePolicy,选择策略,然后选择后续:标签

  6. 适用于添加标签(可选),指定要与策略关联的任何自定义标签,然后选择后续:审核

  7. 适用于Role name (角色名称),输入ecsTaskExecutionRole并选择创建角色

创建任务执行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. 创建IAM命名为的角色ecsTaskExecutionRole使用在上一步中创建的信任策略。

    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 策略

  • secretsmanager:GetSecretValue

  • kms:Decrypt—仅当您的密钥使用自定义KMS key而不是默认密钥。您的自定义密钥的 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" ] } ] }

必需IAM的权限Amazon ECS密钥

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

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

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

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

  • kms:Decrypt—仅当您的密钥使用自定义KMS key而不是默认密钥。您的自定义密钥的 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>" ] } ] }

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

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

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

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