kubewarden/opa-policy-template
GitHub: kubewarden/opa-policy-template
将现有 Open Policy Agent 的 Rego 策略无缝迁移为 Kubewarden WebAssembly 策略的模板仓库,无需重写原有策略代码。
Stars: 3 | Forks: 2
[](https://github.com/kubewarden/community/blob/main/REPOSITORIES.md#stable)
# opa-policy-template
这是一个模板仓库,可用于轻松将针对 Open Policy Agent 框架的现有 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. 策略评估必须返回一个 `AdmissionReview` 响应对象。这
已经是所有旨在与 Kubernetes 配合使用的 Open Policy Agent 策略的一项要求。
2. 策略必须使用 `opa` cli 工具编译为 WebAssembly 模块。
3. 策略必须通过 `kwctl annotate` 进行注解。
此模板仓库包含一个可用作您策略基础的示例策略,以及实现第 2 点和第 3 点所需的所有自动化。
## 实现细节
实际的策略定义在 `policy.rego` 文件中。此文件定义了
一个 `deny` 对象,该对象随后被嵌入到 `AdmissionReview` 响应中。
`AdmissionReview` 对象定义在 `utility/policy.rego` 文件中。
您可能不需要更改此文件。
## 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` 标志。
这对您意味着:
- 如果您的 Rego 策略遵循 `v0` 语法。您必须使用 `OPA_V0_COMPATIBLE=true make` 命令构建策略。
- 如果您的 Rego 策略遵循 `v1` 语法,您必须在未设置任何环境变量的情况下构建策略。
## 测试
该策略有一些使用 Rego 编写的单元测试,可以在 `policy_test.rego` 文件中找到。可以通过以下
命令执行单元测试:
```
make test
```
该仓库还提供了一种针对编译生成的 WebAssembly 模块运行端到端测试的方法。这些测试使用
Kubewarden 的 WebAssembly 运行时执行策略。
端到端测试使用 [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` 分支的事件会触发:
- 使用 `:latest` 标签将注解后的 WebAssembly 模块推送到 GitHub Container Registry。
- git 标签的创建会触发:
- 创建 GitHub Release,其中包含注解后的 WebAssembly 模块
- 使用 `:` 标签将注解后的 WebAssembly 模块推送到 GitHub Container Registry。
标签:AI工具, DevSecOps, Groq API, K8s安全, Kubewarden, kwctl, LNA, OPA, Rego, WASM, WebAssembly, 上游代理, 代码移植, 模板库, 策略即代码, 策略引擎, 结构化提示词, 网络安全挑战, 聊天机器人安全, 靶场