---
title: Kubernetes Secrets加密与密钥轮换实践
keywords:
- Secrets
- EncryptionConfiguration
- KMS
- 密钥轮换
- etcd加密
description: 在Kubernetes中启用Secrets加密(包括KMS)并进行密钥轮换,提供可验证的配置与步骤,保障敏感数据安全。
date: 2025-11-26
categories:
- 文章资讯
- 技术教程
---
概述
- 目标:对存储在etcd中的Secrets进行加密,并建立密钥轮换流程以降低泄露风险,满足合规要求。
- 适用:生产集群、包含敏感配置的工作负载。
核心与实战
- EncryptionConfiguration示例(AES与KMS):
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources: ["secrets"]
providers:
- kms:
name: my-kms
endpoint: unix:///var/run/kms-provider.sock
cachesize: 1000
- aescbc:
keys:
- name: key1
secret: 32-byte-base64==
- identity: {}
- 启用加密:
-- 在API Server启动参数中添加:
--encryption-provider-config=/etc/kubernetes/encryption-config.yaml
- 密钥轮换流程:
1) 生成新密钥并添加为列表首位(aescbc.keys[0])或更新KMS密钥
2) 重启API Server使新密钥生效
3) 触发资源重加密:
kubectl get secrets -A -o json | kubectl replace -f -
示例
- 验证加密:
ETCDCTL_API=3 etcdctl --endpoints=127.0.0.1:2379 get /registry/secrets/prod/web --hex | head
-- 期望:存储内容不可读(密文)
- KMS提供者:
-- 使用外部KMS(如Vault或云KMS)实现密钥托管与审计
验证与监控
- API Server健康:
- 观察加密提供者加载日志与错误;确保轮换后正常服务。
- 重加密进度:
- 统计Secrets更新数量与失败重试;在低峰进行操作。
- 审计:
- 记录密钥更改与轮换时间;外部KMS提供审计日志。
常见误区
- 未进行重加密导致旧密钥仍在etcd;需replace流程。
- 把identity置于首位导致未加密;正确顺序应优先KMS/AEAD。
- 在高峰进行轮换导致性能抖动;需低峰并分批。
结语
- 通过EncryptionConfiguration与KMS提供者加密Secrets并建立轮换流程,可显著提升集群敏感数据的安全与合规。

发表评论 取消回复