Amazon EC2 Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Amazon ECS 容器实例 IAM 角色

Amazon ECS 容器代理将代表您调用 Amazon ECS API 操作,因此,运行代理的容器实例需要服务的 IAM 策略和角色,以便了解属于您的代理。您必须先为容器实例创建它们启动时要使用的 IAM 角色,然后才能启动这些容器实例并将它们注册到集群。此要求适用于通过由 Amazon 提供的经 Amazon ECS 优化的 AMI 启动的容器实例,也适用于您打算在其上运行代理的任何其他实例。

重要

在您的容器实例上运行的容器有权获得通过实例元数据提供给容器实例角色的所有权限。建议您将容器实例角色中的权限限制在下面显示的托管 AmazonEC2ContainerServiceforEC2Role 策略中提供的最低权限列表的范围内。如果您的任务中的容器需要此处未列出的其他权限,建议您为这些任务提供其自己的 IAM 角色。有关更多信息,请参阅 任务的 IAM 角色

您可以通过在容器实例上运行以下 iptables 命令来阻止 docker0 桥上的容器获得提供给容器实例角色的权限(同时仍允许任务的 IAM 角色提供的权限);不过,在此规则生效的情况下,容器将无法查询实例元数据。请注意,此命令采用默认 Docker 桥配置,它不适用于使用 host 网络模式的容器。有关更多信息,请参阅网络模式

Copy
$ iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP

AmazonEC2ContainerServiceforEC2Role 策略如下所示。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:CreateCluster", "ecs:DeregisterContainerInstance", "ecs:DiscoverPollEndpoint", "ecs:Poll", "ecs:RegisterContainerInstance", "ecs:StartTelemetrySession", "ecs:Submit*", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }

注意

上述策略中的 ecs:CreateCluster 行是可选的,前提是要将容器实例注册到的群集已存在。如果群集不存在,则在启动容器实例之前,代理必须有权创建群集或者您能够使用 create-cluster 命令创建群集。

如果您省略 ecs:CreateCluster 行,Amazon ECS 容器代理将无法创建群集,包括默认群集。

上述策略中的 ecs:Poll 行用于向代理授予连接 Amazon ECS 服务以报告状态和获取命令的权限。

在控制台首次运行体验中,将自动为您创建 Amazon ECS 实例角色;但是,您应手动为容器实例附加托管 IAM 策略,以便 Amazon ECS 能够在引入将来功能和增强功能时添加这些功能的权限。您可以使用以下过程检查并确定您的账户是否已拥有 Amazon ECS 实例角色并且已附加托管 IAM 策略(如果需要)。

在 IAM 控制台中检查 ecsInstanceRole

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

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

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

  4. 选择 Permissions 选项卡。

  5. Managed Policies 部分,确保将 AmazonEC2ContainerServiceforEC2Role 托管策略附加到角色。如果附加该策略,则将正确配置 Amazon ECS 实例角色。否则,请执行以下子步骤来附加策略。

    1. 选择 Attach Policy

    2. Filter 框中,键入 AmazonEC2ContainerServiceforEC2Role 以缩小要附加的可用策略的范围。

    3. 选中 AmazonEC2ContainerServiceforEC2Role 策略左侧的框并选择 Attach Policy

  6. 选择 Trust Relationships 选项卡,然后选择 Edit Trust Relationship

  7. 验证信任关系是否包含以下策略。如果信任关系符合以下策略,请选择 Cancel。如果信任关系不符合,请将策略复制到 Policy Document 窗口中并选择 Update Trust Policy

    Copy
    { "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

为容器实例创建 ecsInstanceRole IAM 角色

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

  2. 在导航窗格中,选择 Roles,然后选择 Create New Role

  3. Role Name 字段中,键入 ecsInstanceRole 以命名角色,然后选择 Next Step

  4. Select Role Type 部分中,选择 Amazon EC2 Role for EC2 Container Service 角色旁的 Select

  5. Attach Policy 部分中,选择 AmazonEC2ContainerServiceforEC2Role 策略,然后选择 Next Step

  6. 检查您的角色信息,然后选择 Create Role 以完成操作。

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

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

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

为容器实例角色授予 Amazon S3 只读访问权限

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

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

  3. 选择用于容器实例的 IAM 角色(此角色可能名为 ecsInstanceRole)。有关更多信息,请参阅 Amazon ECS 容器实例 IAM 角色

  4. 选择 Permissions 选项卡。

  5. Managed Policies 下,选择 Attach Policy

  6. Attach Policy 页面上,将 S3 键入到 Filter 字段中以缩小策略结果的范围。

  7. 选中 AmazonS3ReadOnlyAccess 策略左侧的框并单击 Attach Policy

    注意

    此策略允许对所有 Amazon S3 资源进行只读访问。有关更严格的存储桶策略示例,请参阅 Amazon Simple Storage Service 开发人员指南中的存储桶策略示例