sighupio/gatekeeper-policy-manager

GitHub: sighupio/gatekeeper-policy-manager

一个轻量级的只读 Web UI,用于集中查看 Kubernetes 集群中 OPA Gatekeeper 策略的状态、违规情况和约束配置。

Stars: 328 | Forks: 38

Gatekeeper Policy Manager (GPM)

[![构建状态](https://ci.sighup.io/api/badges/sighupio/gatekeeper-policy-manager/status.svg)](https://ci.sighup.io/sighupio/gatekeeper-policy-manager) ![GPM Release](https://img.shields.io/badge/GPM-v1.1.1-blue) ![Helm Chart Release](https://img.shields.io/badge/Helm%20Chart-v0.4.1-blue) ![License](https://img.shields.io/github/license/sighupio/gatekeeper-policy-manager) **Gatekeeper Policy Manager** 是一个简单的*只读* Web UI,用于查看 Kubernetes 集群中 OPA Gatekeeper 策略的状态。 目标 Kubernetes 集群可以是运行 GPM 的同一集群,也可以是[使用 `kubeconfig` 文件的其他远程集群](#multi-cluster-support)。您也可以在[本地客户端机器上](#running-locally)运行 GPM 并连接到远程集群。 GPM 可以显示所有已定义的 **Constraint Templates** 及其 rego 代码、所有的 Gatekeeper Configuration CRD,以及所有的 **Constraints** 及其当前状态、违规情况、执行动作和匹配定义等。 [您可以在下面查看一些截图](#screenshots)。 ## 要求 您需要在集群中运行 OPA Gatekeeper,并且至少定义了一些约束模板和约束才能使用此工具。 ## 部署 GPM ### 使用 Kustomize 部署 要将 Gatekeeper Policy Manager 部署到您的集群,请运行以下命令来应用提供的 [`kustomization`](kustomization.yaml) 文件: ``` kubectl apply -k . ``` 默认情况下,这将在 `gatekeeper-system` 命名空间中创建一个名为 `gatekeper-policy-manager` 的部署和服务。我们建议您查看 `kustomization.yaml` 文件以进行进一步的配置。 部署应用程序后,如果您尚未设置 ingress,可以使用端口转发来访问 Web UI: ``` kubectl -n gatekeeper-system port-forward svc/gatekeeper-policy-manager 8080:80 ``` 然后在浏览器中访问:[http://127.0.0.1:8080](http://127.0.0.1:8080) ### 使用 Helm 部署 也可以使用[提供的 Helm Chart](./chart) 来部署 GPM。 首先创建一个值文件,例如 `my-values.yaml`,其中包含您的自定义发布值。有关更多信息,请参阅 [chart 的 readme](./chart/README.md) 和 [默认的 values.yaml](./chart/values.yaml)。 然后,执行: ``` helm repo add gpm https://sighupio.github.io/gatekeeper-policy-manager helm upgrade --install --namespace gatekeeper-system --set image.tag=v1.1.1 --values my-values.yaml gatekeeper-policy-manager gpm/gatekeeper-policy-manager ``` ## 本地运行 也可以使用 docker 和 `kubeconfig` 在本地运行 GPM,假设您要使用的 `kubeconfig` 文件位于 `~/.kube/config`,在本地运行 GPM 的命令如下: ``` docker run -v ~/.kube/config:/home/gpm/.kube/config -p 8080:8080 quay.io/sighup/gatekeeper-policy-manager:v1.1.1 ``` 然后在浏览器中访问:[http://127.0.0.1:8080](http://127.0.0.1:8080) ## 配置 GPM 是一个无状态应用程序,但可以通过环境变量进行配置。可能的配置如下: | 环境变量名称 | 描述 | 默认值 | | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | | `GPM_SECRET_KEY` | 用于生成 token 的密钥。**在生产环境中请更改此值**。 | `g8k1p3rp0l1c7m4n4g3r` | | `KUBECONFIG` | [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) 文件的路径,如果在集群内部运行时提供此配置文件,将替代集群的 API 使用此配置文件。 | | `GPM_LOG_LEVEL` | 日志级别(有关可用级别,请参阅 [python logging 文档](https://docs.python.org/2/library/logging.html#levels)) | `INFO` | | `GPM_AUTH_ENABLED` | 启用身份验证,当前选项:“Anonymous”、“OIDC” | Anonymous | | `GPM_PREFERRED_URL_SCHEME` | 生成链接时使用的 URL 方案。 | `http` | | `GPM_OIDC_REDIRECT_DOMAIN` | 正在运行 GPM 的域。这是客户端在通过身份验证后将被重定向到的地址 | | | `GPM_OIDC_CLIENT_ID` | 用于向 OIDC Provider 进行身份验证的 Client ID | | | `GPM_OIDC_CLIENT_SECRET` | 用于向 OIDC Provider 进行身份验证的 Client Secret(可选) | | | `GPM_OIDC_ISSUER` | OIDC Issuer 主机名(如果启用了 OIDC 身份验证则为必填) | | | `GPM_OIDC_AUTHORIZATION_ENDPOINT` | OIDC Authorization Endpoint(可选,设置此参数将禁用对其余提供程序配置的自动发现,如果设置此项,也需设置所有其他值) | | | `GPM_OIDC_JWKS_URI` | OIDC JWKS URI(可选,设置此参数将禁用对其余提供程序配置的自动发现,如果设置此项,也需设置所有其他值) | | | `GPM_OIDC_TOKEN_ENDPOINT` | OIDC TOKEN Endpoint(可选,设置此参数将禁用对其余提供程序配置的自动发现,如果设置此项,也需设置所有其他值) | | | `GPM_OIDC_INTROSPECTION_ENDPOINT` | OIDC Introspection Endpoint(可选,设置此参数将禁用对其余提供程序配置的自动发现,如果设置此项,也需设置所有其他值) | | | `GPM_OIDC_USERINFO_ENDPOINT` | OIDC Userinfo Endpoint(可选,设置此参数将禁用对其余提供程序配置的自动发现,如果设置此项,也需设置所有其他值) | | | `GPM_OIDC_END_SESSION_ENDPOINT` | OIDC End Session Endpoint(可选,设置此参数将禁用对其余提供程序配置的自动发现,如果设置此项,也需设置所有其他值) | | ### 多集群支持 当使用包含多个 context 的 `kubeconfig` 时,GPM 支持多集群。GPM 允许您直接从 UI 中选择 context。 如果您想在集群内运行 GPM 但又需要多集群支持,只需在 GPM 的 Pod 中挂载一个包含集群访问配置的 `kubeconfig` 文件,并将环境变量 `KUBECONFIG` 设置为挂载的 `kubeconfig` 文件的路径即可。或者您也可以直接将其挂载到 `/home/gpm/.kube/config`,GPM 会自动检测它。 在本地运行 GPM 时,您已经在使用 `kubeconfig` 文件连接到集群,现在您应该能看到所有已定义的 context。您可以在 UI 中轻松切换它们。 #### AWS IAM 身份验证 如果您想使用带有 IAM 身份验证的 Kubeconfig,则需要自定义 GPM 的容器镜像,因为 IAM 身份验证使用默认未包含在镜像中的外部 AWS 二进制文件。 您可以使用如下的 `Dockerfile` 自定义容器镜像: ``` FROM curlimages/curl:7.81.0 as downloader RUN curl https://github.com/kubernetes-sigs/aws-iam-authenticator/releases/download/v0.5.5/aws-iam-authenticator_0.5.5_linux_amd64 --output /tmp/aws-iam-authenticator RUN chmod +x /tmp/aws-iam-authenticator FROM quay.io/sighup/gatekeeper-policy-manager:v1.1.1 COPY --from=downloader --chown=root:root /tmp/aws-iam-authenticator /usr/local/bin/ ``` 您可能还需要添加 `aws` CLI,可以使用与上述相同的方法。 确保您的 `kubeconfig` 的 `apiVersion` 设置为 `client.authentication.k8s.io/v1beta1` 您可以在[此 issue](https://github.com/sighupio/gatekeeper-policy-manager/issues/330) 中了解更多信息。 ## 截图 ![welcome](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/25942104a5191359.png) ![Constraint Templates 视图](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3b76e88c21191402.png) ![Constraint Templates 视图 rego 代码](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/69faf996e7191404.png) ![Constraint 视图](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/2d902ee68b191409.png) ![Constraint 视图 2](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/7187da407a191413.png) ![Constraint 报告 3](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/6dd594109b191437.png) ![Configurations 视图 2](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/f9a29b5e94191440.png) ![集群选择器](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/65d2d434da191448.png) ## 开发 GPM 使用 Python 编写,后端采用 Flask 框架,前端采用带有 Elastic UI 和 Fury 主题的 React。 要开发 GPM,您需要创建一个 Python 3 虚拟环境,安装提供的 `requirements.txt` 中指定的所有依赖项,构建 React 前端,然后您就可以开始尽情开发了。 以下命令可帮助您启动并运行: ``` # 构建 frontend 并复制到 static 文件夹 $ pushd app/web-client $ yarn install && yarn build $ cp -r build/* ../static-content/ $ popd # 创建 virtualenv $ python3 -m venv env # 激活它 $ source ./env/bin/activate # 安装所有 dependencies $ pip install -r app/requirements.txt # 运行 development server $ FLASK_APP=app/app.py FLASK_ENV=development flask run ``` 如果您想实时测试前端的更改,请确保后端正在运行(见上文),然后使用 `yarn` 运行前端: ``` cd app/web-client yarn start ``` 此时应打开一个浏览器窗口,如果 React 应用无法连接到后端,请检查 `.env` 文件是否指向了正确的后端 endpoint(`REACT_APP_LOCAL_GPM_SERVER_URL`)。 ## 路线图 以下是我们希望添加到 GPM 中的功能愿望清单(排名不分先后): - [x] 列出当前正在使用 `ConstraintTemplate` 的约束 - [ ] 完善的 OIDC 身份验证 - [ ] LDAP 身份验证 - [x] 更好的 rego 代码片段语法高亮 - [x] 无 root 权限的 docker 镜像 - [x] 多集群视图 - [ ] 最小写入能力? - [ ] 用 Golang 重写应用?(在 `feature/go-backend` 分支中进行中) 如果您正在使用 GPM,请通过在此 GitHub 上创建 issue 告知我们,并告诉我们您希望拥有哪些功能 💪🏻
标签:Gatekeeper Policy Manager, Groq API, Helm, Kubeconfig, Kustomize, OPA Gatekeeper, Rego, TCP SYN 扫描, Web UI, 只读视图, 多集群支持, 子域名突变, 端口转发, 策略即代码, 策略可视化, 约束模板, 约束状态, 聊天机器人安全, 自动化攻击, 请求拦截, 运维工具, 逆向工具