启动模板支持 - Amazon EC2 Auto Scaling
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

启动模板支持

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

您可以使用 AmazonEC2FullAccess 策略授予用户使用其 AWS 账户中的 Amazon EC2 Auto Scaling 资源、启动模板和其他 EC2 资源的完全权限。或者,您可以创建自己的自定义 IAM 策略,为用户授予使用特定 API 操作的精细权限。

使用以下示例策略授予用户使用启动模板的权限,除非其他策略已授予用户执行此操作的权限。您无需向仅从启动配置创建 Auto Scaling 组(Amazon EC2 Auto Scaling 的较旧功能)的用户授予这些权限。

有关适用于 Amazon EC2 的 IAM 策略的更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的 IAM 策略

使用启动模板创建或更新 Auto Scaling 组的 IAM 用户或角色必须具有使用 ec2:RunInstances 操作的权限。没有此权限的用户会收到一个错误,说明他们未获得使用启动模板的授权。

请记住,只有在使用启动模板创建或更新 Auto Scaling 组时才会检查 ec2:RunInstances 的用户权限。对于配置为使用 LatestDefault 启动模板的 Auto Scaling 组,在创建启动模板的新版本时不会检查权限。要检查权限,用户必须将 Auto Scaling 组配置为使用特定版本的启动模板。

示例:使用资源级权限控制访问

在授予用户权限时,Amazon EC2 允许您为作为调用 ec2:RunInstances 操作的一部分而创建的资源指定资源级权限,以控制用户可以使用的资源。这是一种推荐做法。

以下示例使用资源级权限来限制对特定启动模板的访问。它还演示了其中一些可能的方法,通过这些方法可以控制在允许 ec2:RunInstances 权限时用户可以启动的实例的配置。

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

  • 第一个语句限制用户对位于指定区域中且具有标签 environment=test 的启动模板的访问权限。

  • 第二个语句允许用户在创建时标记实例和卷。如果在启动模板中指定了标签,则需要此部分。

  • 第三条语句要求用户使用特定安全组 (subnet-1a2b3c4d) 并使用特定 AMI (sg-1a2b3c4d) 将实例启动到特定子网 (ami-1a2b3c4d) 中。它还允许用户访问启动实例所需的额外资源:网络接口和卷。

  • 第四个语句允许用户仅启动特定实例类型 (t2.micro) 的实例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws-cn:ec2:region:123456789012:launch-template/*", "Condition": { "StringEquals": { "ec2:ResourceTag/environment": "test" } } }, { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws-cn:ec2:region:123456789012:*/*", "Condition": { "StringEquals": { "ec2:CreateAction": "RunInstances" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region:123456789012:subnet/subnet-1a2b3c4d", "arn:aws-cn:ec2:region:123456789012:security-group/sg-1a2b3c4d", "arn:aws-cn:ec2:region:123456789012:network-interface/*", "arn:aws-cn:ec2:region:123456789012:volume/*", "arn:aws-cn:ec2:region::image/ami-1a2b3c4d" ] }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws-cn:ec2:region:123456789012:instance/*", "Condition": { "StringEquals": { "ec2:InstanceType": "t2.micro" } } } ] }

此外,您可以创建限制用户访问权限的 IAM 策略,以便用户在创建和更新 Auto Scaling 组时无法使用启动配置。或者,您还可以要求他们设置要使用的特定版本,以确保在将 Auto Scaling 组更新为使用新版本时,检查启动实例时要完成的操作的 IAM 权限。

如果用户指定启动模板,以下语句将授予用户创建或更新 Auto Scaling 组的权限。如果它们忽略版本号以指定 LatestDefault 启动模板版本,或者改为指定启动配置,操作将失败。

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

或者,您可以要求用户指定启动模板的 LatestDefault 版本,而不是模板的特定版本。要执行此操作,请将 autoscaling:LaunchTemplateVersionSpecified 的值更改为 false,如以下示例所示。

"Condition": { "Bool": { "autoscaling:LaunchTemplateVersionSpecified": "false" } }

示例:允许用户创建和管理启动模板和启动模板版本

您可以创建一个策略,以便为用户授予创建、修改、描述和删除启动模板和启动模板版本的权限。在向用户添加这些权限之前,请查看 Amazon EC2 用户指南(适用于 Linux 实例)控制启动模板的使用部分。有关其他示例策略,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的示例:使用启动模板

重要

对于配置为使用 LatestDefault 启动模板版本的组,在创建启动模板的新版本时,Amazon EC2 Auto Scaling 不会检查在启动实例时要完成的操作的权限。在为可以创建和管理启动模板版本的用户设置权限时,这是一个重要的考虑因素。

以下策略授予用户创建启动模板的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CreateLaunchTemplate", "Resource": "*" } ] }

示例:要求使用实例元数据服务版本 2 (IMDSV2)

重要

如果您需要要求对所有新实例使用 IMDSv2,您的 Auto Scaling 组必须使用启动模板。

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

以下策略指定用户不能调用 ec2:RunInstances 操作,除非该实例也选择需要使用 IMDSv2(由 "ec2:MetadataHttpTokens":"required" 指示)。如果他们没有指定实例需要 IMDSV2,则在调用 ec2:RunInstances 操作时会出现 UnauthorizedOperation 错误。

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

要更新现有的 Auto Scaling 组,请确保它使用配置了实例元数据选项的新启动模板,或使用配置了实例元数据选项的新版本的当前启动模板。

提示

要强制启动使用新启动模板的替换实例,您可以终止组中的现有实例。Amazon EC2 Auto Scaling 立即开始启动新实例以替换您终止的实例。

或者,如果您使用扩展策略,则可以增加组的所需容量以启动新实例。如果满足扩展的策略条件,则 Auto Scaling 组会逐渐终止较旧的实例(取决于组的终止策略)。

其他必需的权限

根据要支持的方案,您可以在 IAM 策略语句的 Action 元素中指定这些附加操作。

要从控制台创建和更新 Auto Scaling 组,用户还必须具有来自 Amazon EC2 的以下权限:

  • ec2:DescribeLaunchTemplates

  • ec2:DescribeLaunchTemplateVersions

  • ec2:DescribeVpcs

  • ec2:DescribeSubnets

  • ec2:DescribeAvailabilityZones

如果没有这些额外的最低权限,则无法在 Auto Scaling 组向导中加载启动模板和网络选项,并且用户无法逐步通过向导使用启动模板启动实例。

您可以向策略添加更多操作,以便在向导中为用户提供更多选项。例如,您可以添加 Elastic Load Balancing API 操作的权限,以允许用户从向导的步骤 3 中的现有负载均衡器列表中进行选择。

如果启动模板指定具有 IAM 角色的实例配置文件,则使用 iam:PassRole 可允许(或拒绝)用户将角色传递给 Amazon EC2。没有此权限的用户会收到一个错误,说明他们未获得使用启动模板的授权。有关策略示例,请参阅控制可以传递的 IAM 角色(使用 PassRole)

要从 Amazon EC2 控制台验证配置,用户可能需要额外的权限(例如, ec2:DescribeInstances 查看实例、ec2:DescribeInstanceStatus 显示实例状态或 ec2:DescribeTags 显示标签)。