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": "test" } } }, { "Effect": "Allow", "Action": "autoscaling:Describe*", "Resource": "*" }] }

此示例策略授予创建、更新和删除 Auto Scaling 组的权限,但前提是该组使用标签purpose=test。由于 Describe 操作不支持资源级权限,因此,您必须在不带条件的单独语句中必须指定它们。

注意

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

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

控制可以创建的 Auto Scaling 组的大小

以下策略授予使用该标签创建和更新所有 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 } } }] }

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

您还可以使用 IAM 策略中的条件来控制可应用于 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 标记自动扩缩组,并且只允许 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 组

如果您不使用条件键来控制对 Auto Scaling 组的访问权限,则可以在中指定资源的 ARNResource改为控制访问的元素。

以下策略向用户授予使用权限DeleteAutoScalingGroupAPI 操作,但仅适用于名称以开头的 Auto Scaling 组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" ]

有关指定 Amazon EC2 自动扩展资源的 ARN 的更多信息,请参阅Resource元素,请参阅Amazon EC2 Auto Scaling 策略资源

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

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

创建服务相关角色

当您的 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角色分配给名称以开头的任何 Auto Scaling 组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 的服务相关角色