

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

# 基于身份的策略示例 CloudFormation
<a name="sample-id-policies-for-cloudformation"></a>

本节包含基于身份的策略示例，这些策略演示了如何授予和拒绝权限。 CloudFormation您可以使用这些示例策略开始设计自己的策略，这些策略遵循最低权限原则。

有关 CloudFormation 特定操作和条件的列表，请参阅和条件的[操作、资源 AWS CloudFormation和[AWS CloudFormation 条件](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-template-conditions)键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html)。有关可与条件结合使用的资源类型列表，请参阅 [AWS 资源和属性类型参考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)。

**Topics**
+ [允许查看访问权限](#sample-allow-view-access)
+ [允许基于模板创建堆栈](#sample-allow-stack-creation-based-on-template)
+ [拒绝更新或删除堆栈](#sample-deny-stack-changes)

## 允许查看访问权限
<a name="sample-allow-view-access"></a>

查看访问权限是权限最低的访问类型。 CloudFormation这种策略可能适合那些想要查看所有 CloudFormation堆栈的 IAM 委托人。 AWS 账户以下示例策略授予查看账户中任何 CloudFormation 堆栈详细信息的权限。

```
{ 
  "Version": "2012-10-17",		 	 	 		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:DescribeStacks",
        "cloudformation:DescribeStackEvents",
        "cloudformation:DescribeStackResource",
        "cloudformation:DescribeStackResources"
      ],
      "Resource": "*"
    }
  ]
}
```

## 允许基于模板创建堆栈
<a name="sample-allow-stack-creation-based-on-template"></a>

以下示例策略允许 IAM 委托人仅使用存储在特定亚马逊简单存储服务 (Amazon S3) 存储桶中的 CloudFormation 模板来创建堆栈。此存储桶名称为 `my-CFN-templates`。您可以将批准的模板上传到此存储桶。策略中的 `cloudformation:TemplateUrl` 条件键可防止 IAM 主体使用任何其他模板来创建堆栈。

**重要**  
允许 IAM 主体对此 S3 存储桶具有只读访问权限。这有助于防止 IAM 主体添加、删除或修改已批准的模板。

```
{
  "Version": "2012-10-17",		 	 	 		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:CreateStack"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "cloudformation:TemplateUrl": "https:// my-CFN-templates.s3.amazonaws.com/*"
        }
      }
    }
  ]
}
```

## 拒绝更新或删除堆栈
<a name="sample-deny-stack-changes"></a>

为了帮助保护配置关键业务 AWS 资源的特定 CloudFormation 堆栈，您可以限制该特定堆栈的更新和删除操作。您只能允许少数指定的 IAM 主体执行这些操作，而拒绝环境中的任何其他 IAM 主体执行这些操作。以下策略声明拒绝更新或删除特定 AWS 区域 和中的特定 CloudFormation 堆栈的权限 AWS 账户。

```
{
  "Version": "2012-10-17",		 	 	 		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "cloudformation:DeleteStack",
        "cloudformation:UpdateStack"
      ],
      "Resource": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyProductionStack/<stack_ID>"
    }
  ]
}
```

此策略声明拒绝更新或删除`MyProductionStack` CloudFormation 堆栈的权限，该堆栈位于`us-east-1` AWS 区域 和中`123456789012` AWS 账户。您可以在 CloudFormation 控制台中查看堆栈 ID。以下是如何根据使用案例修改此语句的 `Resource` 元素的一些示例：
+ 您可以在此策略的`Resource`元素 IDs 中添加多个 CloudFormation 堆栈。
+ 您可以使用`arn:aws:cloudformation:us-east-1:123456789012:stack/*`防止 IAM 委托人更新或删除`123456789012`账户中`us-east-1` AWS 区域 和中的任何堆栈。

重要的一步是决定哪个策略应包含此声明。您可以将此声明添加到以下策略：
+ **附加到 IAM 委托人的基于身份的策略** — 将声明置于此策略中会限制特定的 IAM 委托人创建或删除特定堆栈。 CloudFormation 
+ **附加到 IAM 主体的权限边界**：将声明放在此策略中会创建权限护栏。它限制多个 IAM 委托人创建或删除特定 CloudFormation 堆栈，但不限制环境中的所有委托人。
+ **附加到账户、组织单位或组织的 SCP**：将声明放入此策略中会创建权限护栏。它限制目标账户、组织单位或组织中的所有 IAM 委托人创建或删除特定 CloudFormation堆栈。

  但是，如果您不允许至少一个 IAM 委托人（*特权委托人*）更新或删除 CloudFormation 堆栈，则在必要时将无法对通过此堆栈配置的资源进行任何更改。用户或开发管线（推荐）可以代入此特权主体。如果您想将限制部署为 SCP，那么我们建议改用以下策略声明。

  ```
  {
    "Version": "2012-10-17",		 	 	 		 	 	 
    "Statement": [
      {
        "Effect": "Deny",
        "Action": [
          "cloudformation:DeleteStack",
          "cloudformation:UpdateStack"
        ],
        "Resource": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyProductionStack/<stack_ID>",
        "Condition": {
          "ArnNotLike": {
            "aws:PrincipalARN": [
              "<ARN of the allowed privilege IAM principal>"
            ]
          }
        }
      }
    ]
  }
  ```

  在此语句中，`Condition` 元素定义了从 SCP 中排除的 IAM 主体。此语句拒绝任何 IAM 委托人更新或删除 CloudFormation 堆栈的权限，除非 IAM 委托人的 ARN 与元素中的 ARN 相匹配。`Condition``aws:PrincipalARN` 条件键接受一个列表，这意味着您可以根据环境需要，从限制中排除多个 IAM 主体。有关防止修改 CloudFormation 资源的类似 SCP，请参阅 [SCP-CLOUDFORMATION-1](https://aws-samples.github.io/aws-iam-permissions-guardrails/guardrails/scp-guardrails.html#scp-cloudformation-1) (GitHub)。