Amazon ECS
AWS Fargate 用户指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon ECS 任务执行 IAM 角色

Amazon ECS 容器代理将代表您调用 Amazon ECS API,因此,容器实例需要服务的 IAM 策略和角色,以便知道该代理属于您。以下是需要任务执行 IAM 角色时的使用案例:

  • 您的任务使用 Fargate 启动类型并且...

    • 从 Amazon ECR 推送容器映像。

    • 使用 awslogs 日志驱动程序。

  • 您的任务使用 Fargate 或 EC2 启动类型并且...

注意

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

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 策略,以便 Amazon ECS 能够在引入将来功能和增强功能时添加这些功能的权限。您可以使用以下过程检查并确定您的账户是否已拥有 Amazon ECS 任务执行角色并且已附加托管 IAM 策略(如果需要)。

在 IAM 控制台中检查 ecsTaskExecutionRole

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

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

  3. 在角色列表中搜索 ecsTaskExecutionRole。如果该角色不存在,请使用以下过程创建该角色。如果角色存在,请选择角色以查看附加的策略。

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

    1. 选择 Attach policy

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

创建 ecsTaskExecutionRole IAM 角色

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

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

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

  4. 对于 Select your use case (选择使用案例),选择 Elastic Container Service Task (弹性容器服务任务),然后选择 Next: Permissions (下一步: 权限)。

  5. 附加权限策略部分中,搜索 AmazonECSTaskExecutionRolePolicy,选择该策略,然后选择下一步: 审核

  6. 对于 Role Name (角色名称),键入 ecsTaskExecutionRole,然后选择 Create role (创建角色)

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

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

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

  • secretsmanager:GetSecretValue

  • kms:Decrypt — 仅当密钥使用自定义 KMS 密钥而不是默认密钥时才需要。您的自定义密钥的 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 任务执行角色并在任务定义中引用它。这允许容器代理拉取必要的 AWS Systems Manager 或 Secrets Manager 资源。有关更多信息,请参阅指定敏感数据

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

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

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

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