数据加密适用于对高安全性或合规性具有较高要求的应用场景,您无需自建和维护密钥管理基础设施,通过加密保护存储在阿里云ECS上的数据就能保障数据的隐私性和自主性。本文介绍如何使用KMS(Key Management Service)托管的CMK(Customer Master Key)或OSS完全托管密钥功能对阿里云容器服务ACK集群的OSS存储卷数据加密。
前提条件
已创建Kubernetes集群,并且在该集群中安装CSI插件。具体操作,请参见创建Kubernetes托管版集群。
已创建Bucket。具体操作,请参见控制台创建存储空间。
说明若Bucket和ECS实例位于相同地域,请选择私网域名。
已开通密钥管理服务。具体操作,请参见开通密钥管理服务。
已通过kubectl连接Kubernetes集群。具体操作,请参见步骤二:选择集群凭证类型。
加密方式
OSS存储卷加密分为服务端加密SSE(Server-Side Encryption)、客户端加密,阿里云容器服务只支持服务端加密:
服务端加密:OSS将数据保存到数据中心的磁盘之前进行加密,并且在下载对象时自动进行解密。
客户端加密:可以使用客户端加密SDK,在本地进行数据加密,并将加密后的数据上传到OSS。
OSS针对不同使用场景提供了两种服务器端加密方式,您可以根据实际使用场景选用。
使用KMS托管的默认CMK或指定CMK ID加密OSS Object(SSE-KMS)
KMS托管的默认CMK加密OSS Object:上传对象文件时,配置
HTTP X-OSS-server-side-encryption
为KMS
,不指定CMK ID。KMS托管的指定CMK ID加密OSS Object:上传对象文件时,配置
HTTP X-OSS-server-side-encryption
为KMS
,指定X-OSS-server-side-encryption-key-id
为CMK ID
。
重要使用KMS密钥功能时会产生少量的KMS密钥API调用费用。关于费用详情,请参考KMS计费说明。
数据无需通过网络发送到KMS服务端进行加解密,是一种低成本的加解密方式。
使用OSS完全托管的密钥加密OSS Object(SSE-OSS)
基于OSS完全托管的加密方式,是Object的一种属性。
OSS负责生成和管理数据加密密钥,并使用行业标准的强加密算法AES-256。
上传对象文件时,配置
HTTP X-OSS-server-side-encryption
为AES256
。
同一对象(Object)在同一时间内仅可以使用一种服务器端加密方式。
为OSS存储卷加密
通过OSSFS工具配置OSS存储卷的加密参数,在挂载PV时配置生效。关于OSSFS的配置及安装,请参见OSSFS的安装及配置。
OSSFS支持以下三种加密配置方式:
方式一:使用KMS托管的默认CMK加密OSS Object
将以下内容复制到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=0 -o allow_other" akId: "<YourAccessKey ID>" # 请替换<YourAccessKey ID>为您的AccessKey ID。 akSecret: "<YourAccessKey Secret>" # 请替换<YourAccessKey Secret>为您的AccessKey Secret。 path: "/" encrypted: "kms"
参数
说明
akId
AccessKey ID
akSecret
AccessKey Secret
encrypted
存储卷的加密方式:
kms:表示KMS加密方式。
aes256:表示AES-256算法加密方式。
执行以下命令创建加密存储卷。
kubectl create -f kms-cmk-default.yaml
查看已创建的加密存储卷。
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏选择 。可以在存储卷页面查看到创建的加密存储卷。
方式二:使用KMS托管的指定CMK ID加密OSS Object
配置KMS访问权限。
使用KMS托管的指定CMK ID加密OSS Object,需要为PV使用的AccessKey对应的RAM用户授予KMS的访问权限,操作步骤如下。更多信息,请参见服务器端加密。
使用阿里云账号登录RAM控制台。
在左侧导航栏,选择 。
在用户页面,单击PV使用的AccessKey对应RAM用户操作列的添加权限。
根据需要选择权限是系统策略AliyunKMSFullAccess或自定义权限AliyunOSSEncryptCustomizedPolicy。
AliyunKMSFullAccess权限相对较大,如果需要更细粒度的权限控制,可为RAM用户创建自定义权限策略AliyunOSSEncryptCustomizedPolicy,自定义策略内容如下,具体操作请参见创建自定义权限策略。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:List*", "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "acs:kms:*:141661496593****:*"//表示允许调用该阿里云账号ID下所有的KMS密钥,如果仅允许使用某个CMK,此处可输入对应的CMK ID。 ] } ] }
单击确定,然后单击完成。
将以下内容复制到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=0 -o allow_other" akId: "<YourAccessKey ID>" # 请替换<YourAccessKey ID>为您的AccessKey ID。 akSecret: "<YourAccessKey Secret>" # 请替换<YourAccessKey Secret>为您的AccessKey Secret。 path: "/" encrypted: "kms" kmsKeyId: "<YourKMS KeyID>" # 请替换<YourKMS KeyID>为您的KMS ID。
执行以下命令创建加密存储卷。
kubectl create -f kms-cmk.yaml
查看已创建的加密存储卷。
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏选择 。可以在存储卷页面查看到创建的加密存储卷。
方式三:使用OSS完全托管的密钥加密OSS Object(SSE-OSS)
将以下内容复制到sse-oss.yaml文件中。
apiVersion: v1 kind: PersistentVolume metadata: name: oss-csi-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce 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" akId: "<YourAccessKey ID>" # 请替换<YourAccessKey ID>为您的AccessKey ID。 akSecret: "<YourAccessKey Secret>" # 请替换<YourAccessKey Secret>为您的AccessKey Secret。 path: "/" encrypted: "aes256"
执行以下命令创建加密存储卷。
kubectl create -f sse-oss.yaml
查看已创建的加密存储卷。
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏选择 。可以在存储卷页面查看到创建的加密存储卷。