首页/开发/CI/CD 与发布速查/Kubernetes Secret 的边界
环境与配置管理60 条

Kubernetes Secret 的边界

Secret 默认只是 base64 编码,不等同加密:需要开启 etcd 静态加密(KMS)、收紧 RBAC,并控制挂载与读取范围。

CI/CD 与发布速查开发更新于 2026-10-13

Secret 的边界是什么

Kubernetes 的 Secret 默认只是 base64 编码,不等同加密:需要开启 etcd 静态加密(可接 KMS)、收紧 RBAC,并控制挂载与读取范围。安全点包括静态加密、RBAC、ServiceAccount 权限、节点上的临时存储与可读范围。默认配置下能读 Secret 的人可能远多于预期,需要定期审计 ClusterRole 与命名空间 RBAC 绑定。更新 Secret 后的生效方式也要区分:卷挂载延迟同步,环境变量注入需要重启 Pod。

基本信息

创建kubectl create secret generic db --from-literal=password=...
安全点静态加密、RBAC、ServiceAccount 权限、节点可读范围
默认状态base64 编码,不等同加密
挂载方式文件挂载优先于环境变量(降低转储泄露面)
审计定期检查 ClusterRole 与命名空间 RBAC 绑定

典型使用场景

  • 数据库凭据:密码等机密以 Secret 注入,不写在镜像与部署清单里。
  • 静态加密:etcd 落盘加密加 KMS 托管密钥,满足合规要求。
  • RBAC 收紧:按命名空间与角色最小化谁能读 Secret。
  • 挂载选择:优先文件挂载并控制文件权限,环境变量更易被进程转储带出。
  • 轮换:凭据轮换流程与 Secret 更新方式配套,明确应用如何感知。
  • 审计演练:定期核对 RBAC 与访问记录,确认没有过宽授权。

静态加密配置要点

静态加密配置要点
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources: [secrets]
    providers:
      - kms:
          apiVersion: v2
          name: app-kms
          endpoint: unix:///var/run/kmsplugin/socket.sock
      - identity: {}
默认配置下能读 Secret 的人可能远多于预期:定期审计 ClusterRole 与命名空间 RBAC 绑定。
Secret 落入节点磁盘的方式与卷类型相关,敏感场景要核对所用卷的实现与权限。
生效路径要写进流程:卷挂载的更新会延迟同步,环境变量注入的必须重启 Pod 才生效。

常用操作速查

操作要点
创建kubectl create secret generic 键值来自命令行或文件
查看键名kubectl describe secret 只看键名与大小,不显示值
更新kubectl create 加 dry-run 输出 yaml 后 apply 更新
删除重建留意挂载方需要重启感知新内容
排查时不要直接把 Secret 内容打到终端与聊天工具:按需临时解码、用完清理,输出即泄露面。

易错点

  • 以为 Secret 自带加密:默认只是编码,必须显式配置静态加密与访问控制。
  • Secret 挂载为环境变量后随进程转储泄露:优先文件挂载并控制转储行为。
  • RBAC 过宽:能读的人与组件远超预期,定期审计绑定并按命名空间最小化。
  • 把 Secret 提交进 Git:仓库历史难以彻底清除,凭据应重新生成并改走密钥注入。
  • 轮换没有流程:更新后应用不生效或两端不同步,凭据长期不换。
  • 多人共用集群凭据:谁读过、谁复制过无从追溯,敏感环境应结合访问审计与专用账户。

数据来源与参考

  • Kubernetes 文档《Encrypting Confidential Data at Rest》
  • Kubernetes 文档《Secrets》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌