HashiCorp Sentinel 更新总结
HashiCorp 最近对其政策即代码框架 Sentinel 进行了一系列改进,包括引入新的语法、功能和增强现有功能。以下是主要更新内容:
0.19 版本更新
改进的导入配置系统:
- 引入了标准化的命名约定和更一致的导入配置,使用 HCL 语法。
import块现在允许覆盖默认配置,适用于策略中使用的导入和插件。示例代码:
import "plugin" "time" { config = { timezone = "Australia/Brisbane" } } import "module" "reporter" { source = "./reporter.sentinel" }
静态导入功能:
- 允许将静态的 JSON 数据导入到策略中。
- 配置属性包括
source(数据路径)和format(目前仅支持 JSON)。 示例代码:
import "static" "people" { source = "./data/people.json" format = "json" }- 导入后,数据可以在策略中使用,例如通过
length(people.names)获取 JSON 数据中的names对象长度。
0.20 版本更新
命名函数:
- 引入了命名函数,这些函数不能被重新赋值或重用。
- 匿名函数仍然可以重新赋值,可能导致策略失败。
示例代码:
func sum(a, b) { a + b }
0.21 版本更新
辅助函数:
- 新增了两个辅助函数,用于判断值是否已定义。
- 在早期版本中,策略作者需要使用
else表达式来处理未定义的值。 示例代码:
foo = undefined // 0.21 之前版本 foo else false is false // false foo else true is true // true // 0.21 及之后版本 foo is defined // false foo is not defined // true
策略特定参数值:
- 允许为每个策略提供特定的参数值,这些值优先于全局提供的参数。
- 早期版本中,参数值在配置中共享,适用于所有策略。
示例代码:
policy "restrict-s3" { source = "./deny-resource.sentinel" params = { resource_kind = "aws_s3_bucket" } }
Terraform Cloud 更新
Open Policy Agent (OPA) 支持:
- Terraform Cloud 最近增加了对 OPA 的支持,作为 Sentinel 的替代政策即代码框架。
- OPA 是一个开源的政策引擎,使用名为 Rego 的高级声明性语言。
下载与更多信息
- Sentinel 可从 HashiCorp 官网下载。
- 更多详细信息可在 HashiCorp 博客 或 更新日志 中查看。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。