在 Auto Scaling 群组中控制 Amazon EC2 启动模板的使用情况 - Amazon A EC2 uto Scaling

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

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

Amazon EC2 Auto Scaling 支持将 Amazon EC2 启动模板与您的 Auto Scaling 组一起使用。我们建议您允许用户从启动模板创建 Auto Scaling 组,因为这样做允许用户使用 Amazon EC2 Auto Scaling 和 Amazon EC2 的最新功能。例如,用户必须指定启动模板才能使用混合实例策略

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

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

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

具有此策略的 IAM 身份(用户或角色)有权使用启动模板创建或更新自动扩缩组,因为他们还有权使用 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 权限时,您可以指定用户在使用启动模板启动实例时,只能使用具有特定标签或特定 ID 的启动模板来限制权限。您还可以通过指定 RunInstances 调用的其他资源级权限,控制 AMI 和使用启动模板的任何人都可以在启动实例时引用和使用的其他资源。

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

{ "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/*" ] } ] }

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

需要启动模板和版本号

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

以下示例仅在指定启动模板和启动模板版本号时才允许用户创建和更新自动扩缩组。如果具有此策略的用户忽略版本号以指定 $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 用户指南中的配置实例元数据服务

以下示例指定用户不能调用 ec2:RunInstances 操作,除非该实例也选择需要使用 IMDSv2(由 "ec2:MetadataHttpTokens":"required" 指示)。

{ "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) 并使用特定 AMI (sg-903004f88example) 将实例启动到特定子网 (ami-04d5cc9b88example) 中。它还允许用户访问启动模板中指定的资源:网络接口、密钥对和卷。

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

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

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

标记实例和卷所需的权限

以下示例允许用户在创建时标记实例和卷。如果在启动模板中指定了标签,则需要此策略。有关更多信息,请参阅 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 policy 语句的 Action 元素中指定这些其他操作。

ec2:RunInstancesiam:PassRole 的权限验证

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

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

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

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

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

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

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

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