在 Auto Scaling 群组中控制亚马逊EC2启动模板的使用情况 - Amazon A EC2 uto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Auto Scaling 群组中控制亚马逊EC2启动模板的使用情况

Amazon A EC2 uto Scaling 支持在您的 Auto Scaling 群组中使用亚马逊EC2启动模板。我们建议您允许用户通过启动模板创建 Auto Scaling 群组,因为这样做可以让他们使用 Amazon A EC2 uto Scaling 和亚马逊的最新功能EC2。例如,用户必须指定启动模板才能使用混合实例策略

您可以使用该AmazonEC2FullAccess政策向用户授予使用其账户中的 Amazon A EC2 uto Scaling 资源、启动模板和其他EC2资源的完全访问权限。或者,您可以创建自己的自定义IAM策略,为用户提供使用启动模板的精细权限,如本主题所述。

您可以为自己使用量身定制的示例策略

下面显示您可以为自身使用量身定制的基础权限策略示例。此策略授予创建、更新和删除所有自动扩缩组的权限,但仅限于组使用标签 purpose=testing 时。然后,它授予所有 Describe 操作的权限。由于 Describe 操作不支持资源级权限,因此,您必须在不带条件的单独语句中必须指定它们。

IAM拥有此策略的身份(用户或角色)有权使用启动模板创建或更新 Auto Scaling 群组,因为他们也被授予使用该ec2:RunInstances操作的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup", "autoscaling:DeleteAutoScalingGroup" ], "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/purpose": "testing" } } }, { "Effect": "Allow", "Action": [ "autoscaling:Describe*", "ec2:RunInstances" ], "Resource": "*" } ] }

创建或更新自动扩缩组的用户可能需要一些相关权限,例如:

当用户与自动扩缩组交互时,会检查启动实例时要完成的操作的这些权限。有关更多信息,请参阅 ec2:RunInstances 和 iam:PassRole 的权限验证

以下示例显示了策略声明,您可以使用这些声明来控制IAM用户对启动模板的访问权限。

需要具有特定标签的启动模板

在授予ec2:RunInstances权限时,您可以指定用户在启动带有启动模板的实例时只能使用带有特定标签的启动模板或特定于IDs限制权限的启动模板。您还可以通过为AMI调用指定其他资源级权限来控制任何使用启动模板的人在启动实例时可以引用和使用的资源和其他资源。RunInstances

以下示例限制了针对 ec2:RunInstances 操作的权限,该操作可用于启动位于指定区域中且具有标签 purpose=testing 的模板。它还允许用户访问启动模板中指定的资源:实例类型AMIs、卷、密钥对、网络接口和安全组。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:region:account-id:launch-template/*", "Condition": { "StringEquals": { "aws:ResourceTag/purpose": "testing" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account-id:instance/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:key-pair/*", "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:security-group/*" ] } ] }

有关在启动模板中使用基于标签的策略的更多信息,请参阅 Amazon EC2 用户指南中的使用IAM权限控制启动模板的访问权限。

需要启动模板和版本号

您还可以使用IAM权限强制要求在创建或更新 Auto Scaling 组时必须指定启动模板和启动模板的版本号。

以下示例仅在指定启动模板和启动模板版本号时才允许用户创建和更新自动扩缩组。如果具有此策略的用户忽略版本号以指定 $Latest$Default 启动模板版本,或者改为尝试使用启动配置,操作将失败。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "Bool": { "autoscaling:LaunchTemplateVersionSpecified": "true" } } }, { "Effect": "Deny", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "Null": { "autoscaling:LaunchConfigurationName": "false" } } } ] }

需要使用实例元数据服务版本 2 (IMDSv2)

为了提高安全性,您可以将用户的权限设置为要求使用所需的启动模板IMDSv2。有关更多信息,请参阅 Amazon EC2 用户指南中的配置实例元数据服务

以下示例指定,除非该实例也被选中要求使用IMDSv2(由指示"ec2:MetadataHttpTokens":"required"),否则用户无法调用ec2:RunInstances操作。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireImdsV2", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringNotEquals": { "ec2:MetadataHttpTokens": "required" } } } ] }
提示

要强制替换 Auto Scaling 使用新启动模板或配置了实例元数据选项的启动模板的新版本启动模板启动,您可以启动实例刷新。有关更多信息,请参阅 更新自动扩缩实例

限制对 Amazon EC2 资源的访问

以下示例通过限制对 Amazon EC2 资源的访问来控制用户可以启动的实例的配置。要为启动模板中指定的资源指定资源级权限,必须在 RunInstances 操作语句中包含这些资源。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account-id:launch-template/*", "arn:aws:ec2:region::image/ami-04d5cc9b88example", "arn:aws:ec2:region:account-id:subnet/subnet-1a2b3c4d", "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:key-pair/*", "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:security-group/sg-903004f88example" ] }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:region:account-id:instance/*", "Condition": { "StringEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } } ] }

在此示例中,有两个语句:

  • 第一条语句要求用户使用特定的安全组 (subnet-1a2b3c4d) 和特定的 (sg-903004f88example) 将实例启动到特定的子网 AMI (ami-04d5cc9b88example)。它还允许用户访问启动模板中指定的资源:网络接口、密钥对和卷。

  • 第二个语句仅允许用户使用 t2.microt2.small 实例类型启动实例,您可以通过此操作控制成本。

    但请注意,目前尚无有效的方法可以完全阻止有权使用启动模板启动实例的用户启动其他实例类型。这是因为可以覆盖启动模板中指定的实例类型,以使用通过基于属性的实例类型选择进行定义的实例类型。

有关可用于控制用户可以启动的实例配置的资源级权限的完整列表,请参阅《服务授权参考》EC2中的 Amazon 操作、资源和条件密钥

标记实例和卷所需的权限

以下示例允许用户在创建时标记实例和卷。如果在启动模板中指定了标签,则需要此策略。有关更多信息,请参阅 Amazon EC2 用户指南中的授予在创建期间为资源添加标签的权限

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:region:account-id:*/*", "Condition": { "StringEquals": { "ec2:CreateAction": "RunInstances" } } } ] }

其他启动模板权限

您必须向控制台用户授予对 ec2:DescribeLaunchTemplatesec2:DescribeLaunchTemplateVersions 操作的权限。如果没有这些权限,则无法在 Auto Scaling 组向导中加载启动模板数据,并且用户无法逐步通过向导使用启动模板启动实例。您可以在IAM策略声明的Action元素中指定这些其他操作。

ec2:RunInstancesiam:PassRole 的权限验证

用户可以指定其自动扩缩组使用的启动模板版本。根据其权限,这可以是特定的编号版本,也可以是启动模板的 $Latest$Default 版本。如果是后者,请特别小心。这可能会覆盖您打算限制的 ec2:RunInstancesiam:PassRole 的权限。

本节介绍在自动扩缩组中使用最新或默认版本的启动模板的场景。

当用户调用CreateAutoScalingGroupUpdateAutoScalingGroupStartInstanceRefreshAPIs、或时,Amazon A EC2 uto Scaling 会根据当时最新或默认版本的启动模板版本检查其权限,然后再继续处理请求。这将验证启动实例时要完成的操作的权限,例如 ec2:RunInstancesiam:PassRole 操作。为此,我们发出 Amaz EC2 RunInstanceson 试运行调用,以验证用户是否具有执行该操作所需的权限,而无需实际提出请求。当返回响应时,Amazon A EC2 uto Scaling 会读取该响应。如果用户的权限不允许执行给定操作,Amazon A EC2 uto Scaling 会将请求失败,并向用户返回一个包含有关缺失权限信息的错误。

初始验证和请求完成后,每当实例启动时,Amazon A EC2 uto Scaling 都会使用其服务相关角色的权限以最新或默认版本启动这些实例,即使该版本已更改。这意味着,使用启动模板的用户即使没有iam:PassRole权限,也有可能对其进行更新以将IAM角色传递给实例。

如果您想限制谁有权访问配置群组以使用 $Latest$Default 版本,请使用 autoscaling:LaunchTemplateVersionSpecified 条件键。这样可以确保 Auto Scaling 组仅在用户调用CreateAutoScalingGroup和时接受特定的编号版本UpdateAutoScalingGroupAPIs。有关说明如何将此条件密钥添加到IAM策略的示例,请参阅需要启动模板和版本号

对于配置为使用$Latest$Default启动模板版本的自动扩缩组,请考虑限制谁可以创建和管理启动模板的版本,包括允许用户指定默认启动模板版本的ec2:ModifyLaunchTemplate操作。有关更多信息,请参阅 Amazon EC2 用户指南中的控制版本控制权限

要详细了解查看、创建和删除启动模板以及启动模板版本的权限,请参阅 Amazon EC2 用户指南中的使用IAM权限控制启动模板的访问权限。

有关可用于控制RunInstances呼叫访问权限的资源级权限的更多信息,请参阅《服务授权参考》EC2中的 Amazon 操作、资源和条件密钥