Amazon EC2 Auto Scaling 策略示例 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon EC2 Auto Scaling 策略示例

默认情况下,IAM 用户和角色无权创建或修改 Amazon EC2 Auto Scaling 资源。它们还无法使用 Amazon Web Services Management Console、Amazon CLI 或 Amazon API 执行任务。IAM 管理员必须创建 IAM 策略,以便为用户和角色授予权限以对所需的指定资源执行特定的 API 操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

要了解如何使用这些示例 JSON 策略文档创建基于 IAM 身份的策略,请参阅在“JSON”选项卡上创建策略中的IAM 用户指南.

下面介绍权限策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup", "autoscaling:DeleteAutoScalingGroup" ], "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/environment": "test" } } }, { "Effect": "Allow", "Action": [ "autoscaling:*LaunchConfiguration*", "autoscaling:Describe*" ], "Resource": "*" }] }

此示例策略授予用户创建、修改和删除 Auto Scaling 组的权限,但仅限于组使用标签时。environment=test. 由于启动配置不支持标签并且 Describe 操作不支持资源级权限,因此您必须在不带条件的单独语句中指定它们。要了解有关 IAM 策略语句中的元素的更多信息,请参阅Amazon EC2 Auto Scaling 策略.

策略最佳实践

基于身份的策略非常强大。它们确定某个人是否可以创建、访问或删除您账户中的 Amazon EC2 Auto Scaling 资源。这些操作可能会使 Amazon Web Services 账户 产生成本。创建或编辑基于身份的策略时,请遵循以下准则和建议:

  • 入门Amazon托管策略— 要快速开始使用 Amazon EC2 Auto Scaling,请使用Amazon托管策略,为您的员工授予所需的权限。这些策略已在您的账户中提供,并由 Amazon 维护和更新。有关更多信息,请参阅 IAM 用户指南中的开始使用 Amazon 托管策略中的权限

  • 授予最低权限 – 创建自定义策略时,仅授予执行任务所需的许可。最开始只授予最低权限,然后根据需要授予其他权限。这样做比起一开始就授予过于宽松的权限而后再尝试收紧权限来说更为安全。有关更多信息,请参阅 IAM 用户指南 中的授予最低权限

  • 为敏感操作启用 MFA – 为了提高安全性,要求 IAM 用户使用多重验证 (MFA) 访问敏感资源或 API 操作。有关更多信息,请参阅《IAM 用户指南》中的在 Amazon 中使用多重身份验证 (MFA)

  • 使用策略条件来增强安全性 – 在切实可行的范围内,定义基于身份的策略在哪些情况下允许访问资源。例如,您可编写条件来指定请求必须来自允许的 IP 地址范围。您也可以编写条件,以便仅允许指定日期或时间范围内的请求,或者要求使用 SSL 或 MFA。有关更多信息,请参阅 。IAM JSON 策略元素:Condition中的IAM 用户指南.

注意

有些 Amazon EC2 Auto Scaling API 操作允许您在策略中包括该操作可以创建或修改的特定 Auto Scaling 组。您可以通过指定单个 Auto Scaling 组 ARN 来限制这些操作的目标资源。但是,作为一项最佳实践,我们建议您使用基于标签的策略,以允许(或拒绝)对具有特定标签的 Auto Scaling 组执行操作。

客户管理的策略示例

您可以创建自己的自定义 IAM 策略,以允许或拒绝 IAM 用户或组执行 Amazon EC2 自动扩展操作的权限。您可以将这些自定义策略附加到需要指定权限的 IAM 用户或组。以下示例显示了几个常见使用情形的权限。

如果您是首次创建策略,建议您先在账户中创建 IAM 用户并将策略附加到用户。在将每个策略附加到用户时,可使用控制台验证该策略的效果。

创建和更新 Auto Scaling 组时,某些操作要求执行某些其他操作。您可以在ActionIAM 策略声明的元素。例如,根据您要向用户提供的访问权限,可能还需要针对 Elastic Load Balancing、CloudWatch 和 Amazon SNS 的其他 API 操作。

控制可以使用哪些标签键和标签值

您可以使用 IAM 策略中的条件来控制可应用到 Auto Scaling 组的标签键和标签值。

要授予用户创建 Auto Scaling 组或为该组添加标签(仅当用户指定特定标签时)的权限,请使用aws:RequestTag条件键。要仅允许特定的标签键,请使用带 aws:TagKeys 修饰符的 ForAllValues 条件键。

以下策略需要用户在请求中指定包含键 environment 的标签。"?*" 值强制对于标签键有某个值。要使用通配符,您必须使用 StringLike 条件运算符。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:CreateOrUpdateTags" ], "Resource": "*", "Condition": { "StringLike": { "aws:RequestTag/environment": "?*" } } }] }

以下策略指定用户只能使用标签标记 Auto Scaling 组purpose=webservercost-center=cc123,并且仅允许purposecost-center标签(不能指定其他标签)。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:CreateOrUpdateTags" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "webserver", "aws:RequestTag/cost-center": "cc123" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["purpose", "cost-center"] } } }] }

以下策略需要用户在请求中指定至少一个标签,并且仅允许 cost-centerowner 键。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:CreateOrUpdateTags" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": ["cost-center", "owner"] } } }] }
注意

对于条件,条件键不区分大小写,条件值区分大小写。因此,要强制标签键区分大小写,请使用 aws:TagKeys 条件键,其中标签键指定为条件中的值。

基于标签控制 Auto Scaling 资源的访问

您还可以在 IAM 策略中提供标签信息,以便根据通过使用autoscaling:ResourceTag条件键。

控制创建和管理 Auto Scaling 组和扩展策略的访问

以下策略授予用户使用包含字符串的所有 Amazon EC2 Auto Scaling 操作的权限。Scaling,只要 Auto Scaling 组具有标记purpose=webserver. 由于 Describe 操作不支持资源级权限,因此,您必须在不带条件的单独语句中必须指定它们。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["autoscaling:*Scaling*"], "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/purpose": "webserver" } } }, { "Effect": "Allow", "Action": "autoscaling:Describe*Scaling*", "Resource": "*" }] }

控制可删除哪些扩展策略

以下策略允许用户使用 autoscaling:DeletePolicy 操作删除扩展策略。但是,如果对其执行操作的 Auto Scaling 组具有标签,此策略也会拒绝操作。environment=production.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "autoscaling:DeletePolicy", "Resource": "*" }, { "Effect": "Deny", "Action": "autoscaling:DeletePolicy", "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/environment": "production" } } }] }

控制 Auto Scaling 组的最小容量和最大容量

Amazon EC2 Auto Scaling 允许您限制可以创建的 Auto Scaling 组的大小。以下策略授予用户创建和更新具有标签的所有 Auto Scaling 组的权限。allowed=true,前提是它们未指定小于 1 的最小大小或大于 10 的最大大小。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/allowed": "true" }, "NumericGreaterThanEqualsIfExists": { "autoscaling:MinSize": 1 }, "NumericLessThanEqualsIfExists": { "autoscaling:MaxSize": 10 } } }] }

控制哪些 IAM 角色可以传递(使用 PassRole)

如果您希望用户能够创建 Amazon EC2 Auto Scaling 资源,以指定实例配置文件,这是 IAM 角色的容器),您必须使用包含以下语句的策略,该语句允许用户传递此角色,如以下示例所示。通过指定 ARN,该策略授予用户仅传递其名称以 qateam- 开头的角色的权限。有关更多信息,请参阅 Amazon EC2 实例上运行的应用程序的 IAM 角色

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/qateam-*", "Condition": { "StringEquals": { "iam:PassedToService": [ "ec2.amazonaws.com", "ec2.amazonaws.com.cn" ] } } } ] }

允许用户更改 Auto Scaling 组的容量

以下策略授予用户使用 SetDesiredCapacityTerminateInstanceInAutoScalingGroup API 操作的权限。这些区域有:Resource元素使用通配符 (*) 来指示用户可以更改任何 Auto Scaling 组的容量。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "autoscaling:SetDesiredCapacity", "autoscaling:TerminateInstanceInAutoScalingGroup" ], "Resource": "*" }] }

如果您未使用标签控制对 Auto Scaling 组的访问,则可以调整前面的语句,以授予用户仅更改名称以开头的 Auto Scaling 组的容量的权限。devteam-. 有关指定 ARN 值的详细信息,请参阅 Resources

"Resource": "arn:aws:autoscaling:region:123456789012:autoScalingGroup:*:autoScalingGroupName/devteam-*"

您还可以通过将多个 ARN 包含在列表中来指定它们。包括 UID 可确保将访问权授予特定的 Auto Scaling 组。新组的 UUID 与删除的同名组的 UUID 不同。

"Resource": [ "arn:aws:autoscaling:region:123456789012:autoScalingGroup:7fe02b8e-7442-4c9e-8c8e-85fa99e9b5d9:autoScalingGroupName/devteam-1", "arn:aws:autoscaling:region:123456789012:autoScalingGroup:9d8e8ea4-22e1-44c7-a14d-520f8518c2b9:autoScalingGroupName/devteam-2", "arn:aws:autoscaling:region:123456789012:autoScalingGroup:60d6b363-ae8b-467c-947f-f1d308935521:autoScalingGroupName/devteam-3" ]

允许用户创建和使用启动配置

以下策略授权用户在实例类型为 t2.micro 且仅当启动配置的名称以 qateam- 开头时才创建启动配置。有关指定 ARN 值的详细信息,请参阅 Resources。这些策略可以仅为名称以开头的 Auto Scaling 组指定启动配置。qateam-.

此语句的最后一部分授予用户描述启动配置和访问其账户中的某些 Amazon EC2 资源的权限。这为用户提供了从 Amazon EC2 Auto Scaling 控制台创建和管理启动配置的最低权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "autoscaling:CreateLaunchConfiguration", "Resource": "arn:aws:autoscaling:region:123456789012:launchConfiguration:*:launchConfigurationName/qateam-*", "Condition": { "StringEquals": { "autoscaling:InstanceType": "t2.micro" } } }, { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "StringLikeIfExists": { "autoscaling:LaunchConfigurationName": "qateam-*" } } }, { "Effect": "Allow", "Action": [ "autoscaling:DescribeLaunchConfigurations", "ec2:DescribeImages", "ec2:DescribeVolumes", "ec2:DescribeInstances", "ec2:DescribeInstanceAttribute", "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups", "ec2:DescribeSpotInstanceRequests", "ec2:DescribeSpotPriceHistory", "ec2:DescribeVpcClassicLink", "ec2:DescribeVpcs", "ec2:DescribeSubnets" ], "Resource": "*" }] }

您可以向此策略添加 API 操作以便为用户提供更多选项,例如:

  • iam:ListInstanceProfiles:列出实例配置文件。

  • ec2:CreateSecurityGroup: 创建新安全组。

  • ec2:AuthorizeSecurityGroupIngress:添加入站规则。

  • ec2:CreateKeyPair:创建新的密钥对。

允许用户创建和使用启动模板

有关示例策略,请参阅 启动模板支持

创建服务相关角色的必需权限

Amazon EC2 Auto Scaling 要求具有创建服务相关角色的权限,当您的 Amazon Web Services 账户 调用 Amazon EC2 Auto Scaling API 操作。如果服务相关角色尚不存在,Amazon EC2 Auto Scaling 将在您的账户中创建此角色。此服务相关角色向 Amazon EC2 Auto Scaling 授予权限,以便它能代表您调用其他服务。

为使自动角色创建操作成功,用户必须具有 iam:CreateServiceLinkedRole 操作的权限。

"Action": "iam:CreateServiceLinkedRole"

下面显示了允许用户为 Amazon EC2 自动扩展创建 Amazon EC2 Auto Scaling 服务链接角色的权限策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::*:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling", "Condition": { "StringLike": { "iam:AWSServiceName":"autoscaling.amazonaws.com" } } } ] }

控制可以传递哪些服务相关角色(使用 PassRole)

如果您的用户需要能够将自定义后缀服务相关角色传递到 Auto Scaling 组,则必须根据所需访问权限将策略附加到用户或角色。我们建议您将此策略限制为仅针对用户必须访问的服务相关角色。有关自定义后缀服务相关角色的更多信息,请参阅 Amazon EC2 Auto Scaling 的服务相关角色

在您将不同服务相关角色的访问权限提供给不同密钥时,以下示例有助于提升客户托管 CMK 的安全性。根据需求,您可能有三个 CMK 分别供开发团队、QA 团队和财务团队使用。首先,创建对所需 CMK 具有访问权限的服务相关角色,例如,名为 AWSServiceRoleForAutoScaling_devteamkeyaccess 的服务相关角色。然后,要授予权限以将该服务相关角色传递到 Auto Scaling 组,请将该策略附加到您的 IAM 用户,如下所示。

本示例中的策略为用户授予权限,以将AWSServiceRoleForAutoScaling_devteamkeyaccess角色创建名称以开头的任何 Auto Scaling 组devteam-. 如果用户尝试指定不同的服务相关角色,则会收到错误。如果用户选择不指定服务相关角色,则改为使用默认 AWSServiceRoleForAutoScaling 角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling_devteamkeyaccess", "Condition": { "StringEquals": { "iam:PassedToService": [ "autoscaling.amazonaws.com" ] }, "StringLike": { "iam:AssociatedResourceARN": [ "arn:aws:autoscaling:region:123456789012:autoScalingGroup:*:autoScalingGroupName/devteam-*" ] } } } ] }

API 所需的权限

从 Amazon EC2 自动扩展 API 调用以下操作时,用户必须具有来自 Amazon EC2 和 IAM 的权限才能执行特定操作。您可以在ActionIAM 策略声明的元素。

使用启动配置创建 Auto Scaling 组

  • autoscaling:CreateAutoScalingGroup

  • iam:CreateServiceLinkedRole(如果您使用的是默认服务相关角色并且该角色尚不存在,则必需)

使用启动模板创建 Auto Scaling 组

  • autoscaling:CreateAutoScalingGroup

  • ec2:RunInstances

  • iam:CreateServiceLinkedRole(如果您使用的是默认服务相关角色并且该角色尚不存在,则必需)

更新 Auto Scaling 组

  • autoscaling:UpdateAutoScalingGroup

  • ec2:RunInstances

创建启动配置

  • autoscaling:CreateLaunchConfiguration

  • ec2:DescribeImages

  • ec2:DescribeInstances

  • ec2:DescribeInstanceAttribute

  • ec2:DescribeKeyPairs

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSpotInstanceRequests

  • ec2:DescribeVpcClassicLink