Kubernetes密钥管理
外观
Kubernetes密钥管理[编辑 | 编辑源代码]
Kubernetes密钥管理是Kubernetes安全性的核心组成部分,涉及敏感数据(如密码、API密钥、TLS证书等)的安全存储、访问控制和生命周期管理。本指南将详细介绍Kubernetes原生密钥管理机制及其最佳实践。
概述[编辑 | 编辑源代码]
Kubernetes通过以下资源类型管理密钥:
- Secret:键值对形式的加密对象,用于存储敏感数据
- ConfigMap(非敏感配置):与Secret类似但不加密,适用于普通配置数据
- 外部密钥管理系统集成:如HashiCorp Vault、AWS Secrets Manager等
Secret基础[编辑 | 编辑源代码]
Kubernetes Secret的主要类型:
- Opaque:通用密钥(默认类型),Base64编码存储
- docker-registry:存储Docker镜像仓库认证信息
- tls:存储TLS证书和私钥
- service-account-token:服务账号令牌
创建Secret示例[编辑 | 编辑源代码]
# 从文件创建 kubectl create secret generic db-credential \ --from-file=username=./username.txt \ --from-file=password=./password.txt # 从字面值创建 kubectl create secret generic api-key \ --from-literal=key=supersecret123
密钥使用方式[编辑 | 编辑源代码]
1. 环境变量注入[编辑 | 编辑源代码]
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: mycontainer
image: redis
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-credential
key: password
2. 卷挂载[编辑 | 编辑源代码]
apiVersion: v1
kind: Pod
metadata:
name: secret-vol-pod
spec:
containers:
- name: mycontainer
image: redis
volumeMounts:
- name: secret-volume
mountPath: "/etc/secrets"
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: db-credential
安全最佳实践[编辑 | 编辑源代码]
实践 | 说明 | 实施方法 |
---|---|---|
加密存储 | 确保etcd中的Secret加密 | 启用KMS provider或--encryption-provider-config |
最小权限 | 限制Secret访问权限 | RBAC + 服务账号 |
轮换机制 | 定期更新密钥 | 自动化工具 + 版本控制 |
审计日志 | 监控Secret访问 | 启用审计日志 |
etcd加密配置示例[编辑 | 编辑源代码]
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: <base64-encoded-32-byte-key>
- identity: {} # 回退方案
高级密钥管理[编辑 | 编辑源代码]
与外部系统集成[编辑 | 编辑源代码]
Vault集成示例[编辑 | 编辑源代码]
# 安装Vault Sidecar注入器
helm install vault hashicorp/vault --set injector.enabled=true
# 注解示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
template:
metadata:
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "webapp"
vault.hashicorp.com/agent-inject-secret-db-creds: "database/creds/webapp"
实际案例[编辑 | 编辑源代码]
场景:电子商务平台需要安全存储支付网关API密钥
解决方案: 1. 使用Kubernetes Secret存储初始密钥 2. 通过RBAC限制只有支付服务可以访问 3. 集成HashiCorp Vault实现:
* 自动密钥轮换(每24小时) * 细粒度访问控制 * 完整的审计跟踪
实施效果:
- 密钥泄露风险降低80%
- 符合PCI DSS合规要求
- 密钥更新实现零停机
数学原理[编辑 | 编辑源代码]
Secret的Base64编码过程:
加密存储时的额外保护层: 其中表示使用密钥k的加密函数。
故障排查[编辑 | 编辑源代码]
问题 | 检查步骤 | 解决方法 |
---|---|---|
Secret无法挂载 | 1. 检查Secret是否存在 2. 验证Pod服务账号权限 |
kubectl get secret 添加RBAC规则 |
解码后数据损坏 | 验证Base64编码完整性 | base64 --decode |
权限拒绝 | 检查审计日志 | 调整RBAC或命名空间策略 |
延伸阅读[编辑 | 编辑源代码]
- Kubernetes官方Secret文档
- NIST密钥管理指南(SP 800-57)
- CIS Kubernetes安全基准
通过本指南,您应该已经理解Kubernetes密钥管理的核心概念、实施方法和最佳实践。建议在生产环境中结合组织安全策略和合规要求设计完整的密钥管理方案。