HashiCorp 策略即代码框架 Sentinel 新增多项开发者体验改进

HashiCorp Sentinel 更新总结

HashiCorp 最近对其政策即代码框架 Sentinel 进行了一系列改进,包括引入新的语法、功能和增强现有功能。以下是主要更新内容:

0.19 版本更新

  1. 改进的导入配置系统

    • 引入了标准化的命名约定和更一致的导入配置,使用 HCL 语法。
    • import 块现在允许覆盖默认配置,适用于策略中使用的导入和插件。
    • 示例代码:

      import "plugin" "time" {
          config = {
              timezone = "Australia/Brisbane"
          }
      }
      
      import "module" "reporter" {
          source = "./reporter.sentinel"
      }
  2. 静态导入功能

    • 允许将静态的 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 版本更新

  1. 辅助函数

    • 新增了两个辅助函数,用于判断值是否已定义。
    • 在早期版本中,策略作者需要使用 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
  2. 策略特定参数值

    • 允许为每个策略提供特定的参数值,这些值优先于全局提供的参数。
    • 早期版本中,参数值在配置中共享,适用于所有策略。
    • 示例代码:

      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 的高级声明性语言。

下载与更多信息

阅读 38
0 条评论