

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

# 为 CloudFormation Hook 授予 IAM 权限
<a name="grant-iam-permissions-for-hooks"></a>

默认情况下，你的全新用户 AWS 账户 无权使用 AWS 管理控制台、 AWS Command Line Interface (AWS CLI) 或 AWS API 管理 Hook。要向用户授予权限，IAM 管理员可以创建 IAM 策略。管理员随后可以向角色添加 IAM 策略，用户可以代入角色。

使用本主题中的策略示例创建您自己的自定义 IAM 策略，以授予用户使用 Hooks 的权限。

要了解如何使用这些示例 JSON 策略文档创建基于 IAM 身份的策略，请参阅 [IAM *用户指南中的使用客户托管策略定义自定义 IAM* 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

本主题涵盖执行以下操作所需的权限：
+ **管理 Hook** — 在您的账户中创建、修改和禁用 Hook。
+ **公开发布 Hook** — 注册、测试和发布您的自定义 Hook，使其在 CloudFormation注册表中公开发布。
+ **查看调用结果**-在您的账户中访问和查询 Hook 调用的结果。
+ **查看调用结果的详细信息**-访问账户中特定 Hook 调用结果的详细信息和补救指南。

创建 IAM 策略时，您可以在《服务*授权参考*》的 “操作、资源和条件密钥” CloudFormation部分中找到与`cloudformation`服务前缀关联的所有[操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html)的文档。

**Topics**
+ [允许用户管理 Hook](#iam-permissions-to-manage-hooks)
+ [允许用户公开发布自定义 Hook](#iam-permissions-for-public-hook-publishing)
+ [允许用户查看 Hook 调用结果](#iam-permissions-to-request-invocation-results)
+ [允许用户查看详细的 Hook 调用结果](#get-detailed-hook-invocation-results)
+ [AWS KMS 用于加密静态的 CloudFormation Hook 结果的密钥策略和权限](hooks-kms-key-policy.md)

## 允许用户管理 Hook
<a name="iam-permissions-to-manage-hooks"></a>

如果您需要允许用户管理扩展（包括 Hook），但又无法在 CloudFormation 注册表中将其公开，则可以使用以下示例 IAM 策略。

**重要**  
`ActivateType`和 `SetTypeConfiguration` API 调用共同在您的账户中创建 Hook。当你授予用户调用 `SetTypeConfiguration` API 的权限时，你会自动授予他们修改和禁用现有 Hook 的能力。您不能使用资源级权限来限制对此 API 调用的访问权限。因此，请确保仅向账户中的授权用户授予此权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ActivateType",
                "cloudformation:DescribeType",
                "cloudformation:ListTypes",
                "cloudformation:SetTypeConfiguration"
            ],
            "Resource": "*"
        }
    ]
}
```

------

管理 Hook 的用户可能需要一些相关的权限，例如：
+ 要在控制 CloudFormation 台的控制目录中查看主动控制，用户必须拥有 IAM 策略中的`controlcatalog:ListControls`权限。
+ 要在注册表中将自定义 Hook CloudFormation 注册为私有扩展，用户必须拥有 IAM 策略中的`cloudformation:RegisterType`权限。

## 允许用户公开发布自定义 Hook
<a name="iam-permissions-for-public-hook-publishing"></a>

以下示例 IAM 策略特别侧重于发布功能。如果您需要允许用户在 CloudFormation 注册表中公开扩展（包括 Hook），请使用此政策。

**重要**  
公开发布 Hook 可以让其他人使用 AWS 账户。确保只有经过授权的用户才拥有这些权限，并且已发布的扩展程序符合贵组织的质量和安全标准。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:DescribePublisher",
                "cloudformation:DescribeTypeRegistration",
                "cloudformation:ListTypes",
                "cloudformation:ListTypeVersions",
                "cloudformation:PublishType",
                "cloudformation:RegisterPublisher",
                "cloudformation:RegisterType",
                "cloudformation:TestType"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 允许用户查看 Hook 调用结果
<a name="iam-permissions-to-request-invocation-results"></a>

查看 Hook 调用结果所需的 IAM 权限会根据所请求的信息类型而变化。

### 列出 Hook 调用结果
<a name="list-hook-invocation-results"></a>

要列出 Hook 调用结果，用户需要不同的权限，具体取决于发出的 API 请求。
+ 要授予请求所有 Hook 结果、特定 Hook 的结果或特定挂钩和调用状态的结果的权限，您必须授予对该`cloudformation:ListAllHookResults`操作的访问权限。
+ 要通过指定 Hook 目标来授予请求结果的权限，必须授予`cloudformation:ListHookResults`操作访问权限。此权限允许 API 调用者在调用时指定`TargetType`和`TargetId`参数`ListHookResults`。

以下是用于列出 Hook 调用结果的基本权限策略的示例。使用此策略的 IAM 身份（用户或角色）有权使用所有可用参数组合请求所有调用结果。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ListAllHookResults",
                "cloudformation:ListHookResults"
            ],
            "Resource": "*"
        }
    ]
}
```

------

#### 控制可以指定哪些更改集
<a name="control-which-change-sets"></a>

以下示例 IAM 策略通过指定挂钩的目标向`cloudformation:ListHookResults`操作授予请求结果的权限。但是，如果目标是名为的更改集，它也会拒绝该操作`example-changeset`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ListHookResults"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "cloudformation:ListHookResults"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudformation:ChangeSetName": "example-changeset"
                }
            }
        }
    ]
}
```

------

#### 控制可以指定哪些挂钩
<a name="control-which-hooks"></a>

以下示例 IAM 策略仅在请求中提供挂钩的 ARN 时才向`cloudformation:ListAllHookResults`操作授予请求调用结果的权限。它拒绝对指定的 Hook ARN 执行操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ListAllHookResults"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "cloudformation:ListAllHookResults"
            ],
            "Resource": "*",
            "Condition": {
                "Null": {
                    "cloudformation:TypeArn": "true"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": [
                "cloudformation:ListAllHookResults"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "cloudformation:TypeArn": "arn:aws:cloudformation:us-east-1:123456789012:type/hook/MyCompany-MyHook"
                }
            }
        }
    ]
}
```

------

## 允许用户查看详细的 Hook 调用结果
<a name="get-detailed-hook-invocation-results"></a>

要授予查看特定 Hook 调用详细结果的权限，必须授予该`cloudformation:GetHookResult`操作的访问权限。此权限允许用户检索特定 Hook 调用结果的详细信息和补救指南。有关更多信息，请参阅《AWS CloudFormation API Reference》**中的 [GetHookResult](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetHookResult.html)。

以下示例 IAM 策略授予`cloudformation:GetHookResult`操作权限。

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

****  

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

------

**注意**  
您可以将 Hook 配置为使用自己的密 AWS KMS 钥加密存储在云中的详细调用结果。有关如何设置使用客户托管密钥进行加密时所需的密钥策略和 IAM 权限的信息，请参阅[AWS KMS 用于加密静态的 CloudFormation Hook 结果的密钥策略和权限](hooks-kms-key-policy.md)。