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/environment": "test" } } }, { "Effect": "Allow", "Action": [ "autoscaling:*LaunchConfiguration*", "autoscaling:Describe*" ], "Resource": "*" }] }
此示例策略授予创建、修改和删除自动扩缩组的权限,但仅限于组使用标签 environment=test 时。由于启动配置不支持标签并且 Describe 操作不支持资源级权限,因此您必须在不带条件的单独语句中指定它们。要了解有关 IAM policy 语句中的元素的更多信息,请参阅 Amazon EC2 Auto Scaling 基于身份的策略。
目录
策略最佳实践
基于身份的策略确定某个人是否可以创建、访问或删除您账户中的 Amazon EC2 Auto Scaling 资源。这些操作可能会使 Amazon Web Services 账户 产生成本。创建或编辑基于身份的策略时,请遵循以下准则和建议:
-
Amazon 托管策略及转向最低权限许可入门 - 要开始向用户和工作负载授予权限,请使用 Amazon 托管策略来为许多常见使用场景授予权限。您可以在 Amazon Web Services 账户 中找到这些策略。我们建议通过定义特定于您的使用场景的 Amazon 客户管理型策略来进一步减少权限。有关更多信息,请参阅《IAM 用户指南》中的 Amazon 托管策略或工作职能的 Amazon 托管策略。
-
应用最低权限 – 在使用 IAM policy 设置权限时,请仅授予执行任务所需的权限。为此,您可以定义在特定条件下可以对特定资源执行的操作,也称为最低权限许可。有关使用 IAM 应用权限的更多信息,请参阅《IAM 用户指南》中的 IAM 中的策略和权限。
-
使用 IAM policy 中的条件进一步限制访问权限 – 您可以向策略添加条件来限制对操作和资源的访问。例如,您可以编写策略条件来指定必须使用 SSL 发送所有请求。如果通过特定 Amazon Web Service(例如 Amazon CloudFormation)使用服务操作,您还可以使用条件来授予对服务操作的访问权限。有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:条件。
-
使用 IAM Access Analyzer 验证您的 IAM policy,以确保权限的安全性和功能性 – IAM Access Analyzer 会验证新策略和现有策略,以确保策略符合 IAM policy语言 (JSON) 和 IAM 最佳实践。IAM Access Analyzer 提供 100 多项策略检查和可操作的建议,以帮助您制定安全且功能性强的策略。有关更多信息,请参阅《IAM 用户指南》中的 IAM Acess Analyzer 策略验证。
-
需要多重身份验证(MFA):如果您的 Amazon Web Services 账户 需要 IAM 用户或根用户,请启用 MFA 来提高安全性。若要在调用 API 操作时需要 MFA,请将 MFA 条件添加到您的策略中。有关更多信息,请参阅《IAM 用户指南》中的配置受 MFA 保护的 API 访问。
有关 IAM 中的最佳实践的更多信息,请参阅《IAM 用户指南》中的 IAM 中的安全最佳实践。
注意
有些 Amazon EC2 Auto Scaling API 操作允许您在策略中包括该操作可以创建或修改的特定 Auto Scaling 组。您可以通过指定单个 Auto Scaling 组 ARN 来限制这些操作的目标资源。但是,作为最佳做法,我们建议您使用基于标签的策略,以允许(或拒绝)对具有特定标签的 Auto Scaling 组执行操作。
客户托管式策略示例
您可以创建自己的自定义 IAM policy,以允许或拒绝 IAM 身份(用户或角色)执行 Amazon EC2 Auto Scaling 操作的权限。您可以将这些自定义策略附加到需要指定权限的 IAM 身份。以下示例显示了几个常见使用情形的权限。
创建和更新 Auto Scaling 组时,某些操作要求执行某些其他操作。您还可以在 IAM policy 语句的 Action 元素中指定这些其他操作。例如,根据您想要提供的访问权限,可能还需要针对 Elastic Load Balancing、CloudWatch 和 Amazon SNS 的其他 API 操作。
主题
控制可以使用哪些标签键和标签值
您可以在 IAM policy 中使用条件来控制可应用到 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 条件键,其中标签键指定为条件中的值。
基于标签控制对 Auto Scaling 资源的访问
您还可以在 IAM policy 中提供标签信息,以便根据通过使用 autoscaling:ResourceTag 条件键附加到自动扩缩组的标签控制访问。
控制对创建和管理 Auto Scaling 组和扩展策略的访问
以下策略授权使用其名称中包含 Scaling 字符串的所有 Amazon EC2 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 的所有自动扩缩组的权限,只要请求者指定的最小大小不小于 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 } } }] }
允许用户更改 Auto Scaling 组的容量
以下策略授予用户使用 SetDesiredCapacity 和 TerminateInstanceInAutoScalingGroup 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 授予权限,以便其代表您调用其他 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::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 的服务相关角色。
Amazon EC2 Auto Scaling 的其他权限
除 Amazon EC2 Auto Scaling 权限外,用户必须具有来自 Amazon EC2 和 IAM 的以下权限才能成功执行指定操作。
创建自动扩缩组(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 角色时需要)