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

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

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

默认情况下,您中的全新用户 Amazon Web Services 账户 无权执行任何操作。IAM 管理员必须创建并分配 IAM policy,以便为 IAM 身份(例如用户或角色)授予执行 Amazon EC2 Auto Scaling API 操作的权限。

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

下面介绍权限策略示例。

{ "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*", "Resource": "*" }] }

此示例策略授予创建、更新和删除自动扩缩组的权限,但仅限于组使用标签 purpose=testing 时。由于 Describe 操作不支持资源级权限,因此,您必须在不带条件的单独语句中必须指定它们。要使用启动模板启动实例,用户还必须拥有 ec2:RunInstances 权限。有关更多信息,请参阅 启动模板支持

注意

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

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

控制可以创建的自动扩缩组的大小

以下策略授予创建和更新具有标签 environment=development 的所有自动扩缩组的权限,只要请求者指定的最小大小不小于 1 或最大大小不大于 10。尽可能使用标签来帮助您控制对账户中自动扩缩组的访问权限。

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

或者,如果您不使用标签控制对自动扩缩组的访问,则可以使用 ARN 来标识 IAM policy 应用到的自动扩缩组。

Auto Scaling 组具有以下 ARN。

"Resource": "arn:aws:autoscaling:region:account-id:autoScalingGroup:*:autoScalingGroupName/my-asg"

您还可以通过将多个 ARN 包含在列表中来指定它们。有关在 Resource 元素中指定 Amazon EC2 Auto Scaling 资源的 ARN 的更多信息,请参阅 Amazon EC2 Auto Scaling 策略资源

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

您还可以在 IAM 策略中使用条件来控制可应用到自动扩缩组的标签键和标签值。要授予创建自动扩缩组或为该组添加标签(仅当请求者指定特定标签时)的权限,请使用 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 标记自动扩缩组,并且只允许 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 条件键,其中标签键指定为条件中的值。

控制可以删除哪些自动扩缩组

以下策略仅允许在自动扩缩组具有标签时删除该组environment=development

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

或者,如果您不使用条件键来控制对自动扩缩组的访问,则可以在Resource元素中指定资源的 ARN 来控制访问权限。

以下策略向用户授予使用 DeleteAutoScalingGroup API 操作的权限,但仅适用于名称以 devteam- 开头的自动扩缩组。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "autoscaling:DeleteAutoScalingGroup", "Resource": "arn:aws:autoscaling:region:account-id:autoScalingGroup:*:autoScalingGroupName/devteam-*" }] }

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

"Resource": [ "arn:aws:autoscaling:region:account-id:autoScalingGroup:uuid:autoScalingGroupName/devteam-1", "arn:aws:autoscaling:region:account-id:autoScalingGroup:uuid:autoScalingGroupName/devteam-2", "arn:aws:autoscaling:region:account-id:autoScalingGroup:uuid:autoScalingGroupName/devteam-3" ]

控制可以删除哪些扩展策略

以下策略授权使用 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" } } }] }

控制对实例刷新操作的访问权限

仅当对其执行操作的自动扩缩组具有标签 environment=testing 时,以下策略授予启动、回滚和取消实例刷新的权限。由于 Describe 操作不支持资源级权限,因此,您必须在不带条件的单独语句中必须指定它们。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "autoscaling:StartInstanceRefresh", "autoscaling:CancelInstanceRefresh", "autoscaling:RollbackInstanceRefresh" ], "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/environment": "testing" } } }, { "Effect": "Allow", "Action": "autoscaling:DescribeInstanceRefreshes", "Resource": "*" }] }

要在 StartInstanceRefresh 调用中指定所需的配置,用户可能需要一些相关权限,例如:

  • ec2: RunInstances — 要使用启动模板启动 EC2 实例,用户必须拥有 IAM 策略中的ec2:RunInstances权限。有关更多信息,请参阅 启动模板支持

  • ec2: CreateTags — 要从启动模板启动 EC2 实例,该模板在创建时为实例和卷添加标签,用户必须拥有 IAM 策略中的ec2:CreateTags权限。有关更多信息,请参阅 标记实例和卷所需的权限

  • ia PassRole m: — 要从包含实例配置文件(IAM 角色的容器)的启动模板启动 EC2 实例,用户还必须拥有 IAM 策略中的iam:PassRole权限。有关更多信息和示例 IAM policy,请参阅 在 Amazon EC2 实例上运行的应用程序的 IAM 角色

  • ssm: GetParameters — 要从使用 Amazon Systems Manager 参数的启动模板启动 EC2 实例,用户还必须拥有 IAM 策略中的ssm:GetParameters权限。有关更多信息,请参阅 在启动模板中使用 Amazon Systems Manager 参数而不是 AMI ID

创建服务相关角色

当你中的任何用户首次 Amazon Web Services 账户 调用 Amazon EC2 Auto Scaling API 操作时,Amazon EC2 Auto Scaling 需要权限才能创建服务相关角色。如果服务相关角色尚不存在,Amazon EC2 Auto Scaling 会在您的账户中创建此角色。服务相关角色向 Amazon EC2 Auto Scaling 授予权限,以便它可以 Amazon Web Services 代表您呼叫其他人。

为使自动角色创建操作成功,用户必须具有 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)

创建或更新自动扩缩组并在请求中指定自定义后缀服务相关角色的用户需要 iam:PassRole 权限。

如果您授予不同的服务相关角色访问不同密钥的iam:PassRole权限,则可以使用该权限来保护 Amazon KMS 客户托管密钥的安全。根据您组织的需求,您可能有三个密钥分别供开发团队、QA 团队和财务团队使用。首先,创建一个有权访问所需密钥的服务相关角色,例如,一个名为的服务相关角色。AWSServiceRoleForAutoScaling_devteamkeyaccess然后,将策略附加到 IAM 身份,例如用户或角色。

以下策略授予权限,将 AWSServiceRoleForAutoScaling_devteamkeyaccess 角色传递给名称以 devteam- 开头的任意自动扩缩组。如果创建自动扩缩组的 IAM 身份尝试指定另一个与服务相关的角色,则会收到错误。如果他们选择不指定服务相关角色,则改用默认AWSServiceRoleForAutoScaling角色。

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

有关自定义后缀服务相关角色的更多信息,请参阅 Amazon EC2 Auto Scaling 的服务相关角色