

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

# 创建和管理 CloudFormation Hook
<a name="creating-and-managing-hooks"></a>

CloudFormation Hook 提供了一种在允许创建、修改或删除堆栈之前评估 CloudFormation 资源的机制。此功能可帮助您确保您的 CloudFormation 资源符合组织的安全、运营和成本优化最佳实践。

要创建 Hook，有四个选项。
+ **作为挂钩的主动控制** — 使用控制目录中的主动控制来评估资源。 AWS Control Tower 
+ **Guard Hook** — 使用 AWS CloudFormation Guard 规则评估资源。
+ **Lambda 挂钩 — 将**资源评估请求转发给函数。 AWS Lambda 
+ **Custom Hoo** k — 使用您手动开发的自定义 Hook 处理程序。

------
#### [ Proactive controls as Hooks ]

要通过主动控件创建 Hook，请执行以下步骤：

1. 导航到 CloudFormation 控制台并开始创建 Hook。

1. 从控制目录中选择您希望 Hook 评估资源的特定控件。

   每当创建或更新指定资源时，这些控件都将自动适用。您的选择决定了 Hook 将评估哪些资源类型。

1. 将 Hook 模式设置为警告用户注意不合规或防止不合规操作。

1. 配置可选过滤器以按堆栈名称或堆栈角色包含或排除堆栈。

1. 完成配置后，激活 Hook 开始强制执行。

------
#### [ Guard Hook ]

要创建 Guard Hook，请执行以下步骤：

1. 使用 Guard 域特定语言 (DSL) 将资源评估逻辑写成警卫策略规则。

1. 将防护策略规则存储在 Amazon S3 存储桶中。

1. 导航到 CloudFormation 控制台并开始创建 Guard Hook。

1. 提供指向您的防护规则的 Amazon S3 路径。

1. 选择 Hook 将评估的特定目标类型。
   + CloudFormation 资源 (`RESOURCE`)
   + 整个堆栈模板 (`STACK`)
   + 零钱套装 (`CHANGE_SET`)
   + 云控制 API 资源 (`CLOUD_CONTROL`)

1. 选择将调用您的 Hook 的部署操作（创建、更新、删除）。

1. 选择 Hook 在评估失败时的响应方式。

1. 配置可选过滤器以指定 Hook 应评估哪些资源类型

1. 配置可选过滤器以按堆栈名称或堆栈角色包含或排除堆栈。

1. 完成配置后，激活 Hook 开始强制执行。

------
#### [ Lambda Hook ]

要创建 Lambda 挂钩，请执行以下步骤：

1. 将您的资源评估逻辑写成 Lambda 函数。

1. 导航到 CloudFormation 控制台并开始创建 Lambda 挂钩。

1. 为您的 Lambda 函数提供亚马逊资源名称 (ARN)。

1. 选择 Hook 将评估的特定目标类型。
   + CloudFormation 资源 (`RESOURCE`)
   + 整个堆栈模板 (`STACK`)
   + 零钱套装 (`CHANGE_SET`)
   + 云控制 API 资源 (`CLOUD_CONTROL`)

1. 选择将调用您的 Hook 的部署操作（创建、更新、删除）。

1. 选择 Hook 在评估失败时的响应方式。

1. 配置可选过滤器以指定 Hook 应评估哪些资源类型

1. 配置可选过滤器以按堆栈名称或堆栈角色包含或排除堆栈。

1. 完成配置后，激活 Hook 开始强制执行。

------
#### [ Custom Hook ]

自定义挂钩是您使用 CloudFormation 命令行界面 (CFN-CLI) 在 CloudFormation注册表中注册的扩展。

要创建自定义 Hook，请执行以下主要步骤：

1. **启动项目** — 生成开发自定义 Hook 所需的文件。

1. **为挂钩建模** — 编写一个架构来定义 Hook 和指定可以调用 Hook 的操作的处理程序。

1. **注册并激活挂钩** — 创建挂钩后，需要在要使用挂钩的账户和区域中注册挂钩，这样即可激活挂钩。

------

以下主题提供了有关创建和管理 Hook 的更多信息。

**Topics**
+ [概念](hooks-concepts.md)
+ [主动控件即钩子](proactive-controls-hooks.md)
+ [Guard 挂钩](guard-hooks.md)
+ [Lambda 挂钩](lambda-hooks.md)
+ [自定义挂钩](hooks-develop.md)