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

Amazon EC2 Auto Scaling 基于身份的策略示例

默认情况下,全新的 IAM 用户没有执行任何操作的权限。IAM 管理员必须创建并分配 IAM policy,以便为最终用户授予执行 Amazon EC2 Auto Scaling API 操作的权限。

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

下面介绍权限策略示例。

{ "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 用户指南》中的 IAM JSON 策略元素:条件

注意

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

客户托管式策略示例

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

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

创建和更新 Auto Scaling 组时,某些操作要求执行某些其他操作。您还可以在 IAM 策略语句的 Action 元素中指定这些其他操作。例如,根据您要向用户提供的访问权限,可能还需要针对 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": "?*" } } }] }

以下策略指定用户只能使用标签 purpose=webservercost-center=cc123 标记 Auto Scaling 组,并且只允许 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 组的标签控制访问。

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

以下策略授权用户使用其名称中包含 Scaling 字符串的所有 Amazon EC2 Auto 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 组的大小。以下策略授予用户创建和更新具有标签 allowed=true 的所有 Auto Scaling 组的权限,只要用户指定的最小大小小于 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)

如果您希望用户能够创建指定实例配置文件(IAM 角色的容器)的 Amazon EC2 Auto Scaling 资源,则必须使用包含允许用户传递此角色的语句的策略,如以下示例所示。通过指定 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 组的访问,则可以调整前面的语句,以授予用户仅更改名称以 devteam- 开头的 Auto Scaling 组的容量的权限。有关指定 ARN 值的详细信息,请参阅 Amazon EC2 Auto Scaling 内基于资源的策略

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

您还可以通过将多个 ARN 包含在列表中来指定它们。包括 UUID 可确保将访问权授予特定的 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 值的详细信息,请参阅 Amazon EC2 Auto Scaling 内基于资源的策略。这些策略可以仅为名称以 qateam- 开头的 Auto Scaling 组指定启动配置。

此语句的最后一部分授予用户描述启动配置和访问其账户中的某些 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 Web Services 账户 中的任何用户首次调用 Amazon EC2 Auto Scaling API 操作时,Amazon EC2 Auto Scaling 需要具有创建服务相关角色的权限。如果服务相关角色尚不存在,Amazon EC2 Auto Scaling 会在您的账户中创建此角色。此服务相关角色向 Amazon EC2 Auto Scaling 授予权限,以便它能代表您调用其他服务。

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

"Action": "iam:CreateServiceLinkedRole"

下面显示了允许用户为 Amazon EC2 Auto Scaling 创建 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 的服务相关角色

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

以下示例中的策略向用户授予权限,以传递 AWSServiceRoleForAutoScaling_devteamkeyaccess 角色来创建名称以 devteam- 开头的任意 Auto Scaling 组。如果用户尝试指定不同的服务相关角色,则会收到错误。如果用户选择不指定服务相关角色,则改为使用默认 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-*" ] } } } ] }

Amazon EC2 Auto Scaling 所需的 API 权限

从 Amazon EC2 Auto Scaling API 调用以下操作时,用户必须具有来自 Amazon EC2 和 IAM 的权限才能执行特定操作。您可以在 IAM 策略语句的 Action 元素中指定以下操作。

创建 Auto Scaling 组

  • autoscaling:CreateAutoScalingGroup

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

  • iam:PassRole(如果您正在使用非默认服务相关角色,您正在为生命周期钩子的 RoleARN 参数指定 IAM 角色,或者您正在使用启动模板,而该启动模板指定可供 Auto Scaling 组中的实例使用的 IAM 角色,则需要此选项)

  • ec2:RunInstance(如果您正在使用启动模板,则需要此选项)

  • ec2:CreateTags(如果您正在使用启动模板,而该启动模板指定要应用于您的实例和 EBS 卷的标签,则需要此选项)

创建启动配置

  • autoscaling:CreateLaunchConfiguration

  • ec2:DescribeImages

  • ec2:DescribeInstances

  • ec2:DescribeInstanceAttribute

  • ec2:DescribeKeyPairs

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSpotInstanceRequests

  • ec2:DescribeVpcClassicLink

  • iam:PassRole(当您要为 IamInstanceProfile 参数指定 IAM 角色时需要)

创建生命周期钩子

  • autoscaling:PutLifecycleHook

  • iam:PassRole(仅当您要为 RoleARN 参数指定 IAM 角色时需要)