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

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

Amazon ECS 容器实例 IAM 角色

Amazon ECS 容器实例(包括 Amazon EC2 和外部实例)运行 Amazon ECS 容器代理,并需要服务的 IAM 角色,以便了解属于您的代理。在启动容器实例并将其注册到集群之前,必须为容器实例创建 IAM 角色以供使用。该角色是在您用来登录控制台或运行 Amazon CLI 命令的账户中创建的。

重要

如果要将外部实例注册到集群,则您使用的 IAM 角色也需要 Systems Manager 权限。有关更多信息,请参阅ECS Anywhere IAM 角色

Amazon ECS 提供 AmazonEC2ContainerServiceforEC2Role 托管 IAM policy,该策略包含使用完整 Amazon ECS 功能集所需的权限。此托管策略可以附加到 IAM 角色并与您的容器实例相关联。或者,您可以在创建要使用的自定义策略时使用托管策略作为指导。容器实例角色为 Amazon ECS 容器代理和 Docker 守护程序提供代表您调用 Amazon API 所需的权限。有关托管策略的更多信息,请参阅 Amazonec2 ec2Rol ContainerServicefor e

Amazon ECS 支持使用受支持的 Amazon EC2 实例类型启动已增加 ENI 密度的容器实例。使用此功能时,我们建议您创建 2 个容器实例角色。为一个角色启用awsvpcTrunking帐户设置,然后将该角色用于需要 ENI 中继的任务。有关awsvpcTrunking账户设置的信息,请参阅通过账户设置访问 Amazon ECS 的功能

创建容器实例 (ecsInstanceRole) 角色

重要

如果要将外部实例注册到集群,请参阅 ECS Anywhere IAM 角色

您可以手动为容器实例创建角色和附加托管 IAM policy,以便 Amazon ECS 能够在引入未来功能和增强功能时添加这些功能的权限。如有必要,可使用以下过程附加托管 IAM 策略。

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. 对于服务或用例,选择弹性容器服务,然后选择弹性容器服务的 EC2 角色使用案例。

  5. 选择下一步

  6. 在 “权限策略” 部分,确认已选择 Amazon ContainerServicefor EC2 ec2Role 策略。

    重要

    将 Amazon ContainerServicefor EC2 ec2R ole 托管策略附加到容器实例 IAM 角色,否则在使用创建集群时会出现错误。 Amazon Web Services Management Console

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

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

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

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

  8. 选择下一步

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

    重要

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

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

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

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

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

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

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

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

Amazon CLI

用您自己的值替换所有用户输入

  1. 创建以下内容的名为 instance-role-trust-policy.json 的文件。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
  2. 使用以下命令使用信任策略文档创建实例 IAM 角色。

    aws iam create-role \ --role-name ecsInstanceRole \ --assume-role-policy-document file://instance-role-trust-policy.json
  3. ecsInstanceRole-profile使用create-instance-profile命令创建名为的实例配置文件。

    aws iam create-instance-profile --instance-profile-name ecsInstanceRole-profile

    响应示例

    { "InstanceProfile": { "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE", "Roles": [], "CreateDate": "2022-04-12T23:53:34.093Z", "InstanceProfileName": "ecsInstanceRole-profile", "Path": "/", "Arn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceRole-profile" } }
  4. ecsInstanceRole 角色添加到 ecsInstanceRole-profile 实例配置文件。

    aws iam add-role-to-instance-profile \ --instance-profile-name ecsInstanceRole-profile \ --role-name ecsInstanceRole
  5. 使用以下命令将AmazonEC2ContainerServiceRoleForEC2Role托管策略附加到角色。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role \ --role-name ecsInstanceRole

向容器实例 (ecsInstanceRole) 角色添加 Amazon S3 只读访问权限

将配置信息存储在 Amazon S3 中的私有存储桶中并向您的容器实例 IAM 角色授予只读访问权限,这是一个允许在启动时配置容器实例的安全方便的方法。您可以将ecs.config文件副本存储在私有存储桶中,使用 Amazon EC2 用户数据进行安装, Amazon CLI 然后将您的配置信息复制到实例启动/etc/ecs/ecs.config时。

有关创建 ecs.config 文件,将该文件存储在 Amazon S3, 中并使用此配置启动实例的更多信息,请参阅 将容器实例配置存储在 Amazon S3 中

您可以使用以下 Amazon CLI 命令为您的容器实例角色允许 Amazon S3 的只读访问权限。ecsInstanceRole替换为您创建的角色的名称。

aws iam attach-role-policy \ --role-name ecsInstanceRole \ --policy-arn arn:aws::iam::aws:policy/AmazonS3ReadOnlyAccess

您也可以使用 IAM 控制台为您的角色添加 Amazon S3 只读访问权限 (AmazonS3ReadOnlyAccess)。有关更多信息,请参阅《Amazon Identity and Access Management 用户指南》中的修改角色权限策略(控制台)

监控容器实例所需的权限

在您的容器实例可以向日志发送 CloudWatch 日志数据之前,您必须创建一个 IAM 策略以允许您的容器实例使用 CloudWatch 日志 API,然后必须将该策略附加到ecsInstanceRole

Amazon Web Services Management Console
使用 JSON 策略编辑器创建策略
  1. 登录 Amazon Web Services Management Console 并打开 IAM 控制台,网址为 https://console.aws.amazon.com/iam/

  2. 在左侧的导航窗格中,选择策略

    如果这是您首次选择策略,则会显示 Welcome to Managed Policies 页面。选择开始使用

  3. 在页面的顶部,选择创建策略

  4. 策略编辑器部分,选择 JSON 选项。

  5. 输入以下 JSON 策略文档:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": ["arn:aws:logs:*:*:*"] } ] }
  6. 选择下一步

    注意

    您可以随时在可视化JSON 编辑器选项卡之间切换。不过,如果您进行更改或在可视化编辑器中选择下一步,IAM 可能会调整策略结构以针对可视化编辑器进行优化。有关更多信息,请参阅《IAM 用户指南》中的调整策略结构

  7. 查看并创建页面上,为您要创建的策略输入策略名称描述(可选)。查看此策略中定义的权限以查看策略授予的权限。

  8. 选择创建策略可保存新策略。

创建策略后,将该策略附加到容器实例角色。有关如何将策略附加到角色的信息,请参阅《Amazon Identity and Access Management 用户指南》中的修改角色权限策略(控制台)

Amazon CLI
  1. 使用以下内容创建名为 instance-cw-logs.json 的文件。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": ["arn:aws:logs:*:*:*"] } ] }
  2. 使用以下命令使用 JSON 策略文档文件创建 IAM 策略。

    aws iam create-policy \ --policy-name cwlogspolicy \ --policy-document file://instance-cw-logs.json
  3. 使用以下命令检索您创建的 IAM 策略的 ARN。将 cwlogspolicy 替换为您创建的策略的名称。

    aws iam list-policies --scope Local --query 'Policies[?PolicyName==`cwlogsppolicy`].Arn'
  4. 使用以下命令使用策略 ARN 将策略附加到容器实例 IAM 角色。

    aws iam attach-role-policy \ --role-name ecsInstanceRole \ --policy-arn arn:aws:iam:111122223333:aws:policy/cwlogspolicy