Amazon A EC2 uto Scaling 基于身份的策略示例 - Amazon A EC2 uto Scaling

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

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

默认情况下,您中的全新用户 AWS 账户 无权执行任何操作。IAM管理员必须创建和分配IAM策略,授予IAM身份(例如用户或角色)执行 Amazon A EC2 uto Scaling API 操作的权限。

要了解如何使用这些示例IAMJSON策略文档创建策略,请参阅《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 权限。有关更多信息,请参阅 在 Auto Scaling 群组中控制亚马逊EC2启动模板的使用情况

注意

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

某些 Amazon A EC2 uto Scaling API 操作允许您在策略中加入特定的 Auto Scaling 组,这些组可以通过该操作创建或修改。您可以通过指定单个 Auto Scaling 组来限制这些操作的目标资源ARNs。但是,作为最佳做法,我们建议您使用基于标签的策略,以允许(或拒绝)对具有特定标签的 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 } } }] }

或者,如果您不使用标签来控制对 Auto Scaling 组的访问权限,则可以使用ARNs来标识该IAM策略所适用的 Auto Scaling 组。

Auto Scaling 组具有以下内容ARN。

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

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

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

您还可以在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 条件键,其中标签键指定为条件中的值。

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

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

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

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

以下策略授予用户使用该DeleteAutoScalingGroupAPI操作的权限,但仅适用于名称以开头的 Auto Scaling 群组devteam-

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

您也可以ARNs通过将它们包含在列表中来指定多个。包括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 调用中指定所需的配置,用户可能需要一些相关权限,例如:

创建服务相关角色

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

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

"Action": "iam:CreateServiceLinkedRole"

下面显示了一个权限策略示例,该策略允许用户为 Amazon Auto Scaling 创建 Amazon A EC2 uto Scaling 服务相关角色。EC2

{ "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权限,则可以使用该权限来保护 AWS KMS 客户托管密钥的安全。根据您组织的需求,您可能有三个密钥分别供开发团队、QA 团队和财务团队使用。首先,创建一个有权访问所需密钥的服务相关角色,例如,一个名为 AWSServiceRoleForAutoScaling _devteamkeyaccess 的服务相关角色。然后,将策略附加到IAM身份,例如用户或角色。

以下策略授予权限,将 AWSServiceRoleForAutoScaling_devteamkeyaccess 角色传递给名称以 devteam- 开头的任意自动扩缩组。如果创建 Auto Scaling 组的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 A EC2 uto Scaling 的服务相关角色