Terraform
生成策略模拟数据
HCP Terraform 在 CLI 或 VCS 支持的 HCP Terraform 工作区中的 terraform plan 操作期间生成模拟数据。您可以将此模拟数据导入 Sentinel 以测试策略。Sentinel 可以从 HCP Terraform API 导入多种类型的数据:配置、计划、状态和运行。
在本教程中,您将使用 HCP Terraform 生成模拟数据。
前提条件
对于本教程,您需要
您还应熟悉如何从 VCS 更改 触发 HCP Terraform 运行和 销毁 HCP Terraform 工作区。
Fork 示例仓库
Fork 示例仓库,其中包含用于配置 EC2 实例的 Terraform 配置。

创建 HCP Terraform 工作区
导航到您的 HCP Terraform 组织并创建一个新的 VCS 后端工作区,该工作区连接到您 fork 的 learn-terraform-sentinel 仓库。
配置工作区变量
导航到您的 learn-terraform-sentinel 工作区的“变量”页面。
定义 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 的环境变量。请务必将两者都设置为 敏感。
生成模拟导入数据
导航到你的 HCP Terraform 中的 learn-terraform-sentinel 工作区。从 操作 菜单中选择 启动新运行,并选择 仅计划 选项。
当你运行远程 terraform plan 操作时,HCP Terraform 会生成一个名为 mocks 的文件集合。这些 mocks 包含 Terraform 计划数据,你可以用它来测试你的 Sentinel 策略。
计划完成后,点击 下载 Sentinel mocks。

创建一个本地 Sentinel 开发目录
在你的本地机器上,创建一个名为 learn-sentinel-policies 的新目录,用于你的 Sentinel 开发环境。
$ mkdir learn-sentinel-policies
进入该目录。
$ cd learn-sentinel-policies
将你从 HCP Terraform 下载的 mock 数据文件解压缩到你的 Sentinel 开发环境中。将你的 run-xxxx 文件名更改为你下载的文件名。
$ tar xzf <DOWNLOADS_PATH>/run-xxxx-sentinel-mocks
这个目录包含以下 mock 文件,你可以用它们来测试和开发 Sentinel 策略。
$ tree
.
├── mock-tfconfig-v2.sentinel
├── mock-tfconfig.sentinel
├── mock-tfplan-v2.sentinel
├── mock-tfplan.sentinel
├── mock-tfrun.sentinel
├── mock-tfstate-v2.sentinel
├── mock-tfstate.sentinel
└── sentinel.hcl
查看 mock 数据文件
打开 sentinel.hcl 并查看其内容。
sentinel.hcl
mock "tfconfig" {
module {
source = "mock-tfconfig.sentinel"
}
}
mock "tfconfig/v1" {
module {
source = "mock-tfconfig.sentinel"
}
}
mock "tfconfig/v2" {
module {
source = "mock-tfconfig-v2.sentinel"
}
}
mock "tfplan" {
module {
source = "mock-tfplan.sentinel"
}
}
mock "tfplan/v1" {
module {
source = "mock-tfplan.sentinel"
}
}
mock "tfplan/v2" {
module {
source = "mock-tfplan-v2.sentinel"
}
}
mock "tfstate" {
module {
source = "mock-tfstate.sentinel"
}
}
mock "tfstate/v1" {
module {
source = "mock-tfstate.sentinel"
}
}
mock "tfstate/v2" {
module {
source = "mock-tfstate-v2.sentinel"
}
}
mock "tfrun" {
module {
source = "mock-tfrun.sentinel"
}
}
每个 mock 数据文件都包含 Terraform 在计划操作期间捕获的信息。Sentinel 在你将它们导入策略时会解析这些文件。
Sentinel 使用四个 HCP Terraform 导入来定义策略规则:plan、configuration、state、run。
tfplan导入包含 Terraform 计划的数据。计划数据表示 Terraform 需要对基础设施进行哪些更改才能达到由配置表示的期望状态。tfconfig导入包含描述 Terraform 配置的数据,即你编写的描述期望基础设施状态的“.tf”文件集。tfstate导入包含描述 Terraform 状态的数据,即 Terraform 用于将真实世界的资源映射到你的配置的文件。tfrun导入包含与 HCP Terraform 中的运行相关的数据,例如运行的工作区。
Sentinel 还包含一个标准导入库,你可以将其用作策略的一部分,例如执行时间函数和字符串操作的导入。
在测试你的策略时,导入具有与你的策略相关数据的 mock 数据文件。例如,如果你希望你的策略验证对基础设施的提议更改,请使用 tfplan 导入来确定计划的资源是否符合你的标准。
删除工作区
如果您要继续下一个教程,请跳过此步骤。
HCP Terraform 不按工作区收费,因此您可以保留工作区,如果您稍后会完成剩余的教程。要删除它,请导航到您的工作区的设置,然后选择销毁和删除,并按照提示删除工作区。
下一步
您使用 HCP Terraform 生成了 Sentinel 模拟数据,并查看了不同类型的 Sentinel 导入。要了解有关 Sentinel 以及如何执行策略的更多信息,请查阅以下资源
- 了解如何编写 Sentinel 策略。
- 了解如何测试 Sentinel 策略。
- 了解如何将 Sentinel 策略集上传到 HCP Terraform。
- 查阅模拟 Terraform Sentinel 数据文档,以了解更多关于如何使用模拟数据来开发您的策略的信息。
- 了解更多关于
import在Sentinel 语言规范文档中的用法。