ConfigMap 仅能承载和分发非敏感安全策略配置,如 PSS baseline 规则、NetworkPolicy 模板、AuditPolicy 内容等,通过挂载文件、环境变量注入或 Kustomize/Helm 渲染被控制器读取执行,但不提供执行能力,不可替代 RBAC、Secret 或动态策略引擎。

ConfigMap 本身不提供安全策略执行能力,但它能高效承载和分发非敏感的安全策略配置,比如 Pod 安全标准(PSS)的 baseline profile 规则、网络策略模板、日志审计级别、镜像仓库白名单、或 admission controller 的非密参数。关键在于“统一管理”——把原本散落在多个 YAML 文件或脚本里的策略声明,集中到结构清晰、版本可控的 ConfigMap 中,再由对应控制器读取生效。
明确哪些策略适合放进 ConfigMap
只放非敏感、可公开、无需加密的策略定义内容。典型例子包括:
- Pod 安全准入(PodSecurity)启用的 baseline 或 restricted 模式开关(如
pod-security.kubernetes.io/enforce: baseline的标签值) - NetworkPolicy 的默认拒绝规则模板(YAML 片段,不含具体命名空间或 IP)
- AuditPolicy 配置文件内容(定义哪些事件要记录、日志级别)
- CoreDNS 的安全解析策略(如禁用递归查询的配置块)
- 镜像拉取策略白名单(如允许的 registry 域名列表,纯文本)
用 ConfigMap 承载策略并注入到控制器
不是让 ConfigMap “执行”策略,而是让它作为配置源被真正执行策略的组件使用。常见方式有:
-
挂载为文件:将策略 YAML 或 JSON 内容存入 ConfigMap 的
data字段,然后挂载进 Policy Controller(如 OPA/Gatekeeper 的policy目录、Kube-Bench 的--config路径) -
环境变量注入:对轻量级策略开关(如
AUDIT_LEVEL=medium),直接通过envFrom.configMapRef注入到审计代理容器中 -
配合 Kustomize 或 Helm 渲染:把 ConfigMap 作为 base,在不同环境 overlay 中替换策略字段(例如 dev 环境用
auditPolicy.yaml的宽松版,prod 用严格版)
保持策略一致性和可追溯性
统一管理的价值体现在运维层面:
- 所有集群共用同一份 ConfigMap YAML 模板,通过
kubectl apply -f或 GitOps 工具同步,避免手工修改导致差异 - 利用 ConfigMap 的
resourceVersion和注解(如policy.kubernetes.io/last-updated)标记变更时间与责任人 - 搭配 kubectl diff 或 Argo CD 的健康检查,快速发现某集群策略是否偏离基线
- 对大型策略(如完整 AuditPolicy),启用 ConfigMap 的
immutable: true字段,防止运行时被意外覆盖
不能替代真正的安全控制面
需清醒认识边界:ConfigMap 是配置载体,不是策略引擎。它无法替代以下能力:
- RBAC 权限控制(必须用 Role/ClusterRole 实现)
- Secret 加密存储(密码、token 必须走 Secret,不可放入 ConfigMap)
- 动态策略决策(如实时鉴权、IP 黑名单拦截,需 Gatekeeper 或 Kyverno)
- etcd 静态加密(属于 Kubernetes 底层配置,不在 ConfigMap 管理范围内)
把策略“写进 ConfigMap”只是第一步,关键是让正确的组件读取它、校验它、并强制执行它。











