数据加密适用于高安全性或合规性要求的场景。通过KMS托管的CMK或OSS托管密钥,您可以对ACK集群中的OSS存储卷进行加密,保障数据隐私和自主性。
加密方式说明
OSS存储卷加密分为服务端加密SSE(Server-Side Encryption)和客户端加密。ACK只支持服务端加密。
服务端加密:OSS将数据保存到数据中心的磁盘之前进行加密,并且在下载对象时自动进行解密。
客户端加密:可以使用客户端加密SDK,在本地进行数据加密,并将加密后的数据上传到OSS。
针对不同使用场景,OSS提供两种服务端加密方式来加密OSS Object。同一对象(Object)在同一时间内仅可以使用一种服务器端加密方式。
使用KMS托管的CMK加密(SSE-KMS)
使用默认CMK:上传对象文件时,在请求头中配置
X-OSS-server-side-encryption为KMS,不指定CMK ID。使用指定CMK ID:上传对象文件时,在请求头中配置
X-OSS-server-side-encryption为KMS,指定X-OSS-server-side-encryption-key-id为CMK ID。
重要使用KMS密钥功能时会产生少量的KMS密钥API调用费用。关于费用详情,请参考KMS 1.0计费说明。
数据无需通过网络发送到KMS服务端进行加解密,是一种低成本的加解密方式。
使用OSS完全托管的密钥加密(SSE-OSS)
基于OSS完全托管的加密方式,是Object的一种属性。
OSS负责生成和管理数据加密密钥,并使用行业标准的强加密算法AES-256。
上传对象文件时,在请求头中配置
X-OSS-server-side-encryption为AES256。
可通过ossfs工具配置OSS存储卷的加密参数,在挂载PV时配置生效。
关于OSSFS的配置及安装,请参见安装ossfs 1.0。
准备工作
集群默认已安装CSI组件。如需升级,请参见升级csi-plugin和csi-provisioner。
说明如果您集群中使用Flexvolume组件,由于Flexvolume已废弃,请参见迁移Flexvolume至CSI完成迁移后再进行挂载。您可以在,在存储页签下确认存储组件类型。
已创建OSS Bucket,且Bucket与集群属于同一阿里云账号。
说明若需要跨账号挂载OSS Bucket,建议您通过RRSA鉴权方式实现,详情请参考如何跨账号挂载OSS Bucket?
场景一:使用KMS托管的默认CMK加密
将以下内容复制到kms-cmk-default.yaml文件中。
apiVersion: v1 kind: PersistentVolume metadata: name: oss-csi-pv spec: capacity: storage: 5Gi accessModes: - ReadOnlyMany csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: oss-csi-pv volumeAttributes: bucket: "python" url: "oss-cn-hangzhou.aliyuncs.com" otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other" akId: "<YourAccessKey ID>" # 替换为 AccessKey ID akSecret: "<YourAccessKey Secret>" # 替换为 AccessKey Secret path: "/" encrypted: "kms"参数
说明
akIdAccessKey ID
akSecretAccessKey Secret
encrypted存储卷的加密方式:
kms:KMS加密方式。aes256:AES-256算法加密方式。
创建加密的存储卷。
kubectl create -f kms-cmk-default.yaml查看已创建的加密存储卷。
kubectl get pv
场景二:使用KMS托管的指定CMK ID加密
1. 配置KMS访问权限
使用KMS托管的指定CMK ID加密OSS Object,需要为PV使用的AccessKey对应的RAM用户或角色授予KMS的访问权限。详情请参见服务器端加密。
操作前,请确保已创建RAM用户或已创建RAM角色。
使用阿里云账号(主账号)或RAM管理员登录RAM控制台。
在左侧导航栏,选择或角色。
在目标RAM用户操作列单击添加权限,或在目标RAM角色列表的操作列单击新增授权,按照页面提示完成权限的添加。可选系统策略AliyunKMSFullAccess或自定义权限AliyunOSSEncryptCustomizedPolicy。
AliyunKMSFullAccess权限较大,如需细粒度的权限控制,可创建自定义权限策略AliyunOSSEncryptCustomizedPolicy,内容如下。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:List*", "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "acs:kms:*:141661496593****:*" // 允许调用该阿里云账号ID下所有的KMS密钥。如果仅允许使用某个CMK,则输入对应的CMK ID ] } ] }
2. 创建加密存储卷
创建kms-cmk.yaml。
apiVersion: v1 kind: PersistentVolume metadata: name: oss-csi-pv spec: capacity: storage: 5Gi accessModes: - ReadOnlyMany csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: oss-csi-pv volumeAttributes: bucket: "python" url: "oss-cn-hangzhou.aliyuncs.com" otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other" akId: "<YourAccessKey ID>" # 替换为 AccessKey ID akSecret: "<YourAccessKey Secret>" # 替换为 AccessKey Secret path: "/" encrypted: "kms" kmsKeyId: "<YourCMKID>" # 替换为 CMK ID创建加密的存储卷。
kubectl create -f kms-cmk.yaml查看已创建的加密存储卷。
kubectl get pv
场景三:使用OSS完全托管的密钥加密
创建sse-oss.yaml。
apiVersion: v1 kind: PersistentVolume metadata: name: oss-csi-pv spec: capacity: storage: 5Gi accessModes: - ReadOnlyMany csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: oss-csi-pv volumeAttributes: bucket: "python" url: "oss-cn-hangzhou.aliyuncs.com" otherOpts: "-o max_stat_cache_size=0 -o allow_other-o umask=022 -o max_stat_cache_size=100000 -o allow_other" akId: "<YourAccessKey ID>" # 替换为AccessKey ID akSecret: "<YourAccessKey Secret>" # 替换为AccessKey Secret path: "/" encrypted: "aes256"创建加密的存储卷。
kubectl create -f sse-oss.yaml查看已创建的加密存储卷。
kubectl get pv