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 内容打到终端与聊天工具:按需临时解码、用完清理,输出即泄露面。