

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

# Amazon EC2 Auto Scaling 基于身份的策略示例
<a name="security_iam_id-based-policy-examples"></a>

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

要了解如何使用这些示例 JSON 策略文档创建 IAM policy，请参阅*《IAM 用户指南》*中的[在 JSON 选项卡上创建策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)。

下面介绍权限策略示例。

------
#### [ 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` 权限。有关更多信息，请参阅 [控制自动扩缩组中 Amazon EC2 启动模板的使用情况](ec2-auto-scaling-launch-template-permissions.md)。

**注意**  
您可以创建自己的自定义 IAM policy，以允许或拒绝 IAM 身份（用户或角色）执行 Amazon EC2 Auto Scaling 操作的权限。您可以将这些自定义策略附加到需要指定权限的 IAM 身份。以下示例显示了一些常见使用情形的权限。  
有些 Amazon EC2 Auto Scaling API 操作允许您在策略中包括该操作可以创建或修改的特定 Auto Scaling 组。您可以通过指定单个 Auto Scaling 组来限制这些操作的目标资源 ARNs。但是，作为最佳做法，我们建议您使用基于标签的策略，以允许（或拒绝）对具有特定标签的 Auto Scaling 组执行操作。

**Topics**
+ [控制可以创建的自动扩缩组的大小](#policy-example-min-max-size)
+ [控制可以使用哪些标签键和标签值](#policy-example-tags)
+ [控制可以删除哪些自动扩缩组](#policy-example-delete-auto-scaling-group)
+ [控制可以删除哪些扩展策略](#policy-example-delete-policy)
+ [控制对实例刷新操作的访问权限](#policy-example-instance-refresh-policy)
+ [创建服务相关角色](#ec2-auto-scaling-slr-permissions)
+ [控制可以传递哪个服务相关角色（使用 PassRole）](#policy-example-pass-role)

## 控制可以创建的自动扩缩组的大小
<a name="policy-example-min-max-size"></a>

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

------
#### [ JSON ]

****  

```
{
   "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}}"
```

您还可以通过将多个 ARN 包含在列表中来指定它们。有关在 `Resource` 元素中指定 Amazon EC2 Auto Scaling 资源的 ARN 的更多信息，请参阅 [Amazon EC2 Auto Scaling 策略资源](control-access-using-iam.md#security_iam_service-with-iam-id-based-policies-resources)。

## 控制可以使用哪些标签键和标签值
<a name="policy-example-tags"></a>

您还可以在 IAM 策略中使用条件来控制可应用到自动扩缩组的标签键和标签值。要授予创建自动扩缩组或为该组添加标签（仅当请求者指定特定标签时）的权限，请使用 `aws:RequestTag` 条件键。要仅允许特定的标签键，请使用带 `aws:TagKeys` 修饰符的 `ForAllValues` 条件键。

以下策略需要请求者在请求中指定包含键 `environment` 的标签。`"?*"` 值强制对于标签键有某个值。要使用通配符，您必须使用 `StringLike` 条件运算符。

------
#### [ JSON ]

****  

```
{
   "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` 标签（不能指定其他标签）。

------
#### [ JSON ]

****  

```
{
   "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` 键。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
          "autoscaling:CreateAutoScalingGroup",
          "autoscaling:CreateOrUpdateTags"
      ],
      "Resource": "*",
      "Condition": {
          "ForAnyValue:StringEquals": { "aws:TagKeys": ["{{cost-center}}", "{{owner}}"] }
      }
   }]
}
```

------

**注意**  
对于条件，条件键不区分大小写，条件值区分大小写。因此，要强制标签键区分大小写，请使用 `aws:TagKeys` 条件键，其中标签键指定为条件中的值。

## 控制可以删除哪些自动扩缩组
<a name="policy-example-delete-auto-scaling-group"></a>

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

------
#### [ JSON ]

****  

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

------

以下策略使用`autoscaling:ForceDelete`条件密钥来控制对 `DeleteAutoScalingGroup` API 操作的访问权限。这可以防止某些用户使用强制删除操作，该操作会在删除 Auto Scaling 组时终止该组中的所有实例。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Deny",
        "Action": "autoscaling:DeleteAutoScalingGroup",
        "Resource": "*",
        "Condition": {
            "Bool": {
                "autoscaling:ForceDelete": "true"
            }
        }
    }]
}
```

------

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

以下策略向用户授予使用 `DeleteAutoScalingGroup` API 操作的权限，但仅适用于名称以开头的 Auto Scaling 群组`devteam-`。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "autoscaling:DeleteAutoScalingGroup",
            "Resource": "arn:aws:autoscaling:{{us-east-1}}:{{111122223333}}: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}}"
]
```

## 控制可以删除哪些扩展策略
<a name="policy-example-delete-policy"></a>

以下策略授权使用 `DeletePolicy` 操作删除扩展策略。但是，如果对其执行操作的 Auto Scaling 组具有 `environment=production` 标签，此策略也会拒绝操作。尽可能使用标签来帮助您控制对账户中自动扩缩组的访问权限。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": "autoscaling:DeletePolicy",
      "Resource": "*"
   },
   {
      "Effect": "Deny",
      "Action": "autoscaling:DeletePolicy",
      "Resource": "*",
      "Condition": {
          "StringEquals": { "autoscaling:ResourceTag/{{environment}}": "{{production}}" }
      }
   }]
}
```

------

## 控制对实例刷新操作的访问权限
<a name="policy-example-instance-refresh-policy"></a>

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

------
#### [ JSON ]

****  

```
{
   "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`权限。有关更多信息，请参阅 [控制自动扩缩组中 Amazon EC2 启动模板的使用情况](ec2-auto-scaling-launch-template-permissions.md)。
+ **ec2: CreateTags** — 要从启动模板启动 EC2 实例，该模板在创建时为实例和卷添加标签，用户必须拥有 IAM 策略中的`ec2:CreateTags`权限。有关更多信息，请参阅 [标记实例和卷所需的权限](ec2-auto-scaling-launch-template-permissions.md#policy-example-launch-template-createtags)。
+ ia PassRole m**:** — 要从包含实例配置文件（IAM 角色的容器）的启动模板启动 EC2 实例，用户还必须拥有 IAM 策略中的`iam:PassRole`权限。有关更多信息和示例 IAM policy，请参阅 [在 Amazon EC2 实例上运行的应用程序的 IAM 角色](us-iam-role.md)。
+ **ssm: GetParameters** — 要从使用 AWS Systems Manager 参数的启动模板启动 EC2 实例，用户还必须拥有 IAM 策略中的`ssm:GetParameters`权限。有关更多信息，请参阅 [IDs 在启动模板中使用 AWS Systems Manager 参数而不是 AMI](using-systems-manager-parameters.md)。

## 创建服务相关角色
<a name="ec2-auto-scaling-slr-permissions"></a>

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

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

```
"Action": "iam:CreateServiceLinkedRole"
```

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

------
#### [ JSON ]

****  

```
{
   "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）
<a name="policy-example-pass-role"></a>

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

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

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

有关自定义后缀服务相关角色的更多信息，请参阅 [Amazon EC2 Auto Scaling 的服务相关角色](autoscaling-service-linked-role.md)。