You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes静态加密场景下保护加密密钥文件?

如何保护Kubernetes静态加密的密钥文件?

针对你提到的——用--encryption-provider-config=/etc/kubernetes/config/encryption.yaml配置API Server,ETCD已加密但解密密钥仍存留在主节点的安全问题,这里有几个实际可行的解决方案:

1. 用节点级加密存储保护密钥文件

把存放encryption.yaml的目录(比如/etc/kubernetes/config)挂载到LUKS加密分区上。这样就算主节点的磁盘被物理窃取,没有解密密码也无法读取密钥文件。

  • 操作流程:先备份当前的加密配置文件,创建LUKS加密分区,将分区挂载到目标目录,恢复配置文件,最后更新/etc/fstab确保开机自动挂载(可以结合TPM模块实现无交互自动解锁,避免每次重启手动输密码)。

2. 切换到外部KMS管理密钥

放弃本地密钥文件,改用外部密钥管理服务(KMS)来处理加密解密逻辑。API Server只需要配置KMS的连接信息,实际密钥完全由KMS托管,主节点本地不会存储明文密钥。

  • 示例encryption.yaml配置(以自托管KMS为例):
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
      - configmaps
    providers:
      - kms:
          name: internalKms
          endpoint: unix:///var/run/kms/connector.sock
          cachesize: 1000
          timeout: 3s

主流的KMS选项包括HashiCorp Vault、AWS KMS、Azure Key Vault等,根据你的环境选择即可。

3. 严格限制密钥文件的系统权限

给encryption.yaml设置最小权限,避免非授权用户读取:

  • 执行命令设置权限:chmod 600 /etc/kubernetes/config/encryption.yaml,同时确保文件属主属组为root:root。
  • 可以配合Linux ACL进一步缩小访问范围,只允许API Server进程的运行用户(通常是root或kube-apiserver)访问该文件。

4. 定期轮换密钥并彻底清理旧密钥

就算密钥文件存在,定期轮换能降低泄露后的影响范围:

  • 在encryption.yaml中添加新密钥作为首选加密项,保留旧密钥用于解密存量资源;等所有资源都完成新密钥加密后,再移除旧密钥条目。
  • 删除旧密钥文件时,用shred -u /path/to/old-key.yaml彻底覆盖文件内容,避免被数据恢复工具找回。

5. 强化主节点的访问控制

从源头减少密钥文件被接触的可能:

  • 主节点禁用密码登录,只允许SSH密钥认证,并且禁止root用户远程登录。
  • 用防火墙限制只有管理IP能访问主节点的SSH、API端口。
  • 启用Linux审计日志,监控对/etc/kubernetes/config目录的访问操作,一旦有异常读取行为能及时告警。

内容的提问来源于stack exchange,提问作者Hlex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:53:22