
bridgecrew/whorfCheckov Admission Controller镜像基于开源IaC静态分析工具Checkov构建,是Kubernetes的准入控制器组件。其核心功能是在Kubernetes资源(如Pod、Deployment、StatefulSet等)创建或更新阶段,通过Kubernetes Webhook机制自动执行安全策略检查,基于Checkov的内置规则及自定义策略验证资源配置安全性,拦截不符合安全标准的资源请求,从而实现对Kubernetes集群配置安全的自动化管控。
bashkubectl create namespace checkov-admission-controller
创建deployment.yaml:
yamlapiVersion: apps/v1 kind: Deployment metadata: name: checkov-admission-controller namespace: checkov-admission-controller spec: replicas: 1 selector: matchLabels: app: checkov-admission-controller template: metadata: labels: app: checkov-admission-controller spec: containers: - name: checkov-admission-controller image: checkov-admission-controller:latest # 替换为实际镜像地址 ports: - containerPort: 443 volumeMounts: - name: tls-certs mountPath: /certs readOnly: true - name: policy-dir mountPath: /policy readOnly: true args: - --tls-cert-file=/certs/tls.crt - --tls-private-key-file=/certs/tls.key - --policy-dir=/policy - --log-level=info resources: limits: cpu: 500m memory: 512Mi requests: cpu: 200m memory: 256Mi volumes: - name: tls-certs secret: secretName: checkov-admission-tls # 包含TLS证书的Secret - name: policy-dir configMap: name: checkov-policy # 包含自定义规则的ConfigMap(可选)
执行部署:
bashkubectl apply -f deployment.yaml -n checkov-admission-controller
创建service.yaml:
yamlapiVersion: v1 kind: Service metadata: name: checkov-admission-controller namespace: checkov-admission-controller spec: selector: app: checkov-admission-controller ports: - port: 443 targetPort: 443 clusterIP: None # Headless Service(可选,根据Webhook配置调整)
执行创建:
bashkubectl apply -f service.yaml -n checkov-admission-controller
创建webhook.yaml(定义触发检查的资源和规则):
yamlapiVersion: admissionregistration.k8s.io/v1 kind: ValidatingWebhookConfiguration metadata: name: checkov-admission-controller webhooks: - name: checkov-admission-controller.example.com clientConfig: service: name: checkov-admission-controller namespace: checkov-admission-controller path: /validate caBundle: <CA_BUNDLE> # 集群CA证书Base64编码(用于验证Webhook服务证书) rules: - apiGroups: ["", "apps", "batch"] apiVersions: ["v1"] operations: ["CREATE", "UPDATE"] resources: ["pods", "deployments", "statefulsets", "daemonsets", "jobs"] scope: "Namespaced" admissionReviewVersions: ["v1"] sideEffects: None timeoutSeconds: 5
替换<CA_BUNDLE>为集群CA证书(可通过kubectl config view --raw --minify --flatten -o jsonpath='{.clusters[0].cluster.certificate-authority-data}'获取),执行创建:
bashkubectl apply -f webhook.yaml
| 参数名 | 说明 | 示例值 |
|---|---|---|
--tls-cert-file | TLS证书文件路径(容器内路径) | /certs/tls.crt |
--tls-private-key-file | TLS私钥文件路径(容器内路径) | /certs/tls.key |
--policy-dir | 自定义规则文件目录(容器内路径) | /policy |
--log-level | 日志级别(debug/info/warn/error) | info |
--port | 服务监听端口 | 443(默认) |
--check-mode | 检查模式(deny/audit) | deny(默认,阻止不安全资源) |
| 变量名 | 说明 | 示例值 |
|---|---|---|
CHECKOV_POLICY_REPO | 远程策略仓库地址(如Git) | [***] |
CHECKOV_POLICY_BRANCH | 远程策略仓库分支 | main |
KUBECONFIG | 本地测试用Kubeconfig路径(非集群内部署时) | /root/.kube/config |
通过--policy-dir挂载包含Checkov自定义规则的目录,规则文件需符合Checkov自定义规则格式(如custom_rule.yaml),示例:
yaml- name: "禁止特权容器" id: "CKV_K8S_999" severity: "CRITICAL" message: "特权容器可能导致容器逃逸,禁止使用" category: "容器安全" match: apiGroups: [""] apiVersions: ["v1"] kinds: ["Pod"] cond: - attr: "spec.containers[*].securityContext.privileged" operator: "equals" value: true
--enable-admission-plugins=ValidatingAdmissionWebhook)。caBundle匹配,避免API Server验证Webhook服务证书失败。--check-mode=audit模式测试规则有效性,避免误拦截正常资源。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务