storageclass 本身不提供加密能力,仅作为定义存储供应策略的模板;真正的加密需由底层存储系统支持,并通过 storageclass 的 parameters 显式启用,kubernetes 仅透传参数。

StorageClass 本身不直接提供加密能力,它只是定义存储供应策略的“模板”。真正的加密必须由底层存储系统(如云厂商块存储、企业级NAS或CSI驱动)支持,并通过 StorageClass 的 parameters 显式启用。Kubernetes 层面不参与加解密过程,只负责将加密参数透传给供应器。
确认底层存储是否原生支持加密
这是前提。不同后端支持方式差异大:
-
AWS EBS:支持 KMS 加密,需在 StorageClass 中指定
encrypted: "true"和kmsKeyId(可选) -
Azure Disk:通过
kind: Managed+diskEncryptionSetID参数启用 Azure 磁盘加密集 -
GCP PD:默认启用 Google 托管加密,也可用
diskType: pd-ssd+encryptionKmsKey指定客户托管密钥 - NFS/本地存储:通常不支持服务端加密;若需加密,得依赖文件系统层(如 LUKS)或应用层加密,StorageClass 无法控制
-
CSI 驱动(如 Portworx、Rook/Ceph):部分支持卷级加密,需查阅对应 CSI 文档并配置特定参数(如
encrypted: "true"或encryptionProvider: vault)
编写启用加密的 StorageClass 清单
以 AWS EBS 为例,以下 StorageClass 将为所有动态创建的 PV 启用 KMS 加密:
评估 Kubernetes 集群安全态势,覆盖 RBAC、工作负载安全、网络策略、基础设施即代码(IaC)、运行时监控和密钥管理等 30 项控制项……
apiVersion: storage.k8s.io/v1<br>kind: StorageClass<br>metadata:<br> name: encrypted-gp3<br>provisioner: kubernetes.io/aws-ebs<br>parameters:<br> type: gp3<br> encrypted: "true"<br> kmsKeyId: arn:aws:kms:us-east-1:123456789012:key/abcd1234-1234-1234-1234-123456789012<br> fsType: xfs<br>reclaimPolicy: Delete<br>volumeBindingMode: Immediate
关键点:
-
encrypted: "true"是布尔字符串,必须加引号 -
kmsKeyId若不填,则使用 AWS 默认密钥(AWS managed CMK) -
volumeBindingMode: Immediate表示 PVC 创建即绑定 PV,适合无拓扑约束场景;若需节点亲和性,改用WaitForFirstConsumer
验证加密是否生效
仅靠 PVC 绑定成功不能证明加密启用。需分两层验证:
-
Kubernetes 层:检查 PVC 绑定的 PV 是否带有
annotations.volume.kubernetes.io/storage-provisioner且状态为Bound;再 describe PV,确认其spec.awsElasticBlockStore.encrypted字段为true - 云平台层:登录 AWS 控制台 → EC2 → Volumes,找到对应卷,查看 “Encryption” 列是否显示 “Encrypted”,并确认 KMS 密钥 ARN 匹配
注意事项与常见误区
加密不是万能开关,实际使用中要注意:
- 已存在的未加密 PV/PVC 无法通过修改 StorageClass 反向加密;必须新建 PVC 触发新 PV 创建
- 加密密钥权限必须授予 EKS 节点角色(IAM Role),否则 provisioner 会因权限拒绝而失败
- 加密仅保护静态数据(at-rest),不涉及传输中(in-transit)或内存中数据;Pod 内读写仍为明文
- 某些 CSI 驱动加密功能需额外部署密钥管理组件(如 HashiCorp Vault 插件),并非开箱即用










