open-policy-agent/gatekeeper-library
GitHub: open-policy-agent/gatekeeper-library
OPA Gatekeeper 社区维护的预构建策略模板库,为 Kubernetes 集群提供开箱即用的安全合规与资源治理验证及变更策略。
Stars: 697 | Forks: 339
# OPA Gatekeeper 库
[](https://artifacthub.io/packages/search?repo=gatekeeper-policies)
一个社区驱动的 [OPA Gatekeeper 项目](https://open-policy-agent.github.io/gatekeeper/website/docs/) 策略库。
## 验证与变更
该库包含两个主要组件:`Validation`(验证)和 `Mutation`(变更)。
- 验证:Gatekeeper 可以根据 Gatekeeper 验证策略(例如本库中定义的策略)验证集群中的资源。这些策略被定义为 `ConstraintTemplates` 和 `Constraints`。`ConstraintTemplates` 可以直接应用于集群,然后可以应用 `Constraints` 来自定义策略以满足您的特定需求。
- 变更:Gatekeeper 可以根据 Gatekeeper 变更策略(例如本库中定义的策略)变更集群中的资源。变更策略仅作为示例提供,在应用之前应根据您的需求进行自定义。
## 用法
### kustomize
您可以使用 [kustomize](https://kubectl.docs.kubernetes.io/installation/kustomize/) 来安装部分或全部模板以及您自己的约束。
首先,创建一个 `kustomization.yaml` 文件:
```
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- github.com/open-policy-agent/gatekeeper-library/library
# 您可以选择通过指定一个子文件夹来安装子集,或者指定一个 commit SHA
# - github.com/open-policy-agent/gatekeeper-library/library/pod-security-policy?ref=0c82f402fb3594097a90d15215ae223267f5b955
- constraints.yaml
```
然后在同一目录下名为 `constraints.yaml` 的文件中定义您的约束。示例约束可以在“samples”文件夹中找到。
您可以使用 `kustomize build . | kubectl apply -f -` 安装所有内容。
更多信息请参阅 [kustomization 文档](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/)。
### kubectl
如果不使用 kustomize,您可以直接应用 `library/` 下每个目录中提供的 `template.yaml` 和 `constraint.yaml`。
例如
```
cd library/general/httpsonly/
kubectl apply -f template.yaml
kubectl apply -f samples/ingress-https-only/constraint.yaml
kubectl apply -f library/general/httpsonly/sync.yaml # optional: when GK is running with OPA cache
```
## 测试
`suite.yaml` 文件为库中的每个 ConstraintTemplate 定义了测试用例。
对 gatekeeper-library ConstraintTemplates 的更改可以使用 gator CLI 进行测试:
```
gatekeeper-library$ gator verify ./...
```
gator CLI 可以从 Gatekeeper 的
[发布页面](https://github.com/open-policy-agent/gatekeeper/releases) 下载。
## 如何为库做贡献
### 新策略
如果您有想要贡献的策略,请提交 pull request。
每个新策略应包含:
* 一个名为 `src//constraint.tmpl` 的约束模板,带有 `description` 注解,并在 `spec.crd.spec.validation.openAPIV3Schema` 中定义参数结构(如果有)。该模板使用 [gomplate](https://docs.gomplate.ca/) 渲染。
* 一个或多个示例约束,每个约束都包含一个允许的(`example_allowed.yaml`)和禁止的(`example_disallowed.yaml`)资源示例,位于 `library//samples/` 下
* `kustomization.yaml` 和 `suite.yaml` 位于 `library/` 下
* Rego 源码为 `src.rego`,单元测试为 `src_test.rego`,位于 `src/` 下对应的子目录中
* Gatekeeper 库策略已引入[版本控制](https://docs.google.com/document/d/1IYiypA-mRcdfSVfmoeyuaeG8XtA1u4GkcqH3kEkv2uw/edit)。请确保按照 `src//constraint.tmpl` 注解中的指南添加或提升策略版本。
* 需要提升主版本号:当策略中出现破坏性更新时,例如更新模板 Kind、更新现有参数 schema、添加 `requires-sync-data` 注解以同步新数据,或任何其他破坏性更新
* 需要提升次版本号:当策略中出现向后兼容的更改时,例如添加参数、更新 Rego 逻辑
* 需要提升修订版本号:当策略中出现简单的向后兼容更改时,例如简单的 Rego 修复、更新策略元数据
* 注意:示例约束、变更和扩展模板仅作为示例提供,可分离的更改不需要提升版本号。
### 开发
* 策略代码和测试维护在 `src//src.rego` 和 `src//src_test.rego` 中
* `make generate` 将使用 [gomplate](https://docs.gomplate.ca/) 从 `src//src.rego` 生成 `library//template.yaml`。
* `make generate-website-docs` 将生成网站所需的 Markdown 文件。
* `make generate-artifacthub-artifacts` 将生成或更新 artifact hub 包以及 `/artifacthub` 目录下关联的 `artifacthub-pkg.yml` 文件。
* `make generate-all` 将生成上述所有产物。
* `make validate` 将对库仓库运行验证检查。目前它会验证 `website/docs` 目录的目录结构。
* `make unit-test` 将运行 scripts 目录中的所有单元测试。
* 使用 `./test.sh` 运行所有测试
* 使用 `opa test src//src.rego src//src_test.rego --verbose` 运行单个测试
* 使用 `trace(sprintf("%v", [thing]))` 打印结果
标签:Constraints, ConstraintTemplates, DevSecOps, GitOps, K8s安全, kustomize, OPA, pySHACL, RDFlib, Web截图, 上游代理, 子域名突变, 安全基线, 安全策略, 容器安全, 提示词设计, 教学环境, 数据科学, 策略即代码, 策略库, 约束模板, 结构化提示词, 聊天机器人安全, 资源变异, 资源验证, 靶场