kubewarden/gatekeeper-policy-template
GitHub: kubewarden/gatekeeper-policy-template
用于将现有 Gatekeeper Rego 策略无缝转换为 Kubewarden WebAssembly 模块的自动化模板仓库。
Stars: 0 | Forks: 1
[](https://github.com/kubewarden/community/blob/main/REPOSITORIES.md#stable)
# gatekeeper-policy-template
这是一个模板仓库,可用于轻松将针对 Gatekeeper 框架的现有 Rego 策略转换为 Kubewarden 策略。
别忘了查看 Kubewarden 的[官方文档](https://docs.kubewarden.io)以获取有关编写策略的更多信息。
## 要求
要充分利用此模板,您需要以下工具:
- [opa](https://github.com/open-policy-agent/opa/releases):用于将代码构建为 wasm 的工具。预期版本为 `v1.0.0` 或更高版本
- [kwctl](https://github.com/kubewarden/kwctl/releases):用于准备和运行 Kubewarden WebAssembly 模块的工具
- [bats](https://github.com/bats-core/bats-core):用于运行端到端测试的工具。如果您决定编写此类测试
## 介绍
**注意:** 现有的 Rego 代码无需重写。
您只需满足以下要求:
1. 策略评估必须返回一个 `violation` 响应对象。这已经是所有 Gatekeeper 策略的要求。
2. 策略必须使用 `opa` cli 工具编译成 WebAssembly 模块。
3. 策略必须通过 `kwctl annotate` 进行注解。
此模板仓库包含一个示例策略,可用作您策略的基础,以及实现第 2 点和第 3 点所需的所有自动化。
## 实现细节
实际的策略定义在 `policy.rego` 文件中。该文件定义了一个 `violation` 对象。
## Rego 策略代码与 OPA v1.0.0 兼容性
随着 OPA (Open Policy Agent) [v1.0.0](https://github.com/open-policy-agent/opa/releases/tag/v1.0.0) 于 2024 年 12 月的发布,关于 Rego 策略语法引入了一项重大变更。
此前,所有规则定义的 `if` 和多值规则的 `contains` 是可选的;现在,它们是强制性的。此变更影响大多数较旧的策略。
以下是您需要了解的摘要:
- OPA v1.0.0 语法:OPA v1.0.0 强制要求所有规则定义使用 `if`,多值规则使用 `contains`。不遵守此语法的策略将出错。
- 向后兼容性:如果您需要构建不使用新版 v1.0.0 语法的旧策略,则必须在 `opa build` 命令中提供 `--v0-compatible` 标志。
- Gatekeeper 集成:Gatekeeper 在其 [v3.19.0 版本](https://github.com/open-policy-agent/gatekeeper/releases/tag/v3.19.0) 中将其 OPA 依赖项更新为 v1.0.0。
- Gatekeeper 模板中的 Rego 版本:除非模板在 `code.engine: Rego` 下的 `source` 字段中明确指定 `version: "v1"`,否则 Gatekeeper 假定使用 `v0` 语法。
请查看 Gatekeeper 文档的[此部分](https://open-policy-agent.github.io/gatekeeper/website/docs/constrainttemplates/#enable-opa-rego-v1-syntax-in-constrainttemplates),以获取有关如何处理 Rego 的 `v0` 和 `v1` 版本的更多详细信息。
这对您意味着什么:
- 如果 Gatekeeper CR 未指定 Rego 版本,则意味着将使用 `v0`。您必须使用 `OPA_V0_COMPATIBLE=true make` 命令构建策略。
- 如果 Gatekeeper CR 明确指定 `version: "v1"`,则必须在未设置任何环境变量的情况下构建策略。
## 测试
该策略包含一些使用 Rego 编写的单元测试,可以在 `policy_test.rego` 文件中找到。可以通过以下命令执行单元测试:
```
make test
```
该仓库还提供了一种针对编译生成的 WebAssembly 模块运行端到端测试的方法。这些测试使用 Kubewarden 的 WebAssembly 运行时执行策略。
e2e 测试使用 [bats](https://github.com/bats-core/bats-core) 实现:Bash 自动化测试系统。WebAssembly 运行时由 [kwctl](https://github.com/kubewarden/kwctl) cli 工具提供。
端到端测试定义在 `e2e.bats` 文件中,可以通过以下命令运行:
```
make e2e-tests
```
## 自动化
该项目包含 [GitHub Actions](https://docs.github.com/en/actions) 工作流。
它们负责以下自动化任务:
- 执行 Rego 测试套件
- 将 Rego 文件构建为单个 WebAssembly 模块
- 使用 Kubewarden 的元数据注解 WebAssembly 模块
- 执行端到端测试
- 推送到 `main` 分支的事件会导致:
- 将注解后的 WebAssembly 模块推送到 GitHub Container Registry,使用 `:latest` 标签。
- git 标签的创建会导致:
- 创建 GitHub Release,包含注解后的 WebAssembly 模块
- 将注解后的 WebAssembly 模块推送到 GitHub Container Registry,使用 `:` 标签。
标签:AI工具, DevSecOps, EC2, Groq API, IaC, Kubewarden, kwctl, OPA, Rego, WASM, WebAssembly, Web截图, 上游代理, 人工智能安全, 合规性, 容器安全, 模板仓库, 策略即代码, 策略引擎, 策略迁移, 结构化提示词, 网络安全挑战, 网络调试, 聊天机器人安全, 自动化, 靶场