本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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=webserver
标记自动扩缩组,并且只允许 cost-center=cc123
和 purpose
标签(不能指定其他标签)。cost-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-center
键。owner
{ "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
元素中的资源来控制访问权限。
以下策略授予用户使用该DeleteAutoScalingGroup
API操作的权限,但仅适用于名称以开头的 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
调用中指定所需的配置,用户可能需要一些相关权限,例如:
-
ec2: RunInstances — 要使用启动模板启动EC2实例,用户必须拥有IAM策略中的
ec2:RunInstances
权限。有关更多信息,请参阅 在 Auto Scaling 群组中控制亚马逊EC2启动模板的使用情况。 -
ec2: CreateTags — 要使用在创建时向实例和卷添加标签的启动模板启动实例,用户必须拥有IAM策略中的
ec2:CreateTags
权限。EC2有关更多信息,请参阅 标记实例和卷所需的权限。 -
ia PassRole m: — 要从包含实例配置文件(IAM角色的容器)的启动模板启动实例,用户还必须拥有IAM策略中的
iam:PassRole
权限。EC2有关更多信息和IAM策略示例,请参阅IAM在 Amazon EC2 实例上运行的应用程序的角色。 -
ssm: GetParameters — 要从使用 AWS Systems Manager 参数的启动模板启动EC2实例,用户还必须拥有IAM策略中的
ssm:GetParameters
权限。有关更多信息,请参阅 在启动模板中使用 AWS Systems Manager 参数而不是AMIIDs在启动模板中。
创建服务相关角色
当你中的任何用户首次 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
角色传递给名称以
开头的任意自动扩缩组。如果创建 Auto Scaling 组的IAM身份尝试指定其他服务相关角色,则会收到错误。如果他们选择不指定服务相关角色,则改用默认AWSServiceRoleForAutoScaling角色。devteam-
{ "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 的服务相关角色。