加密对象存储卷
若您的业务对数据安全性和合规性有严格要求,可使用OBS服务端加密功能,对上传到OBS存储的数据进行加密保护。服务端加密是指OBS服务端对客户端上传到OBS的对象进行加密存储。在访问对象时,由OBS服务端对文件进行解密,然后向客户端返回解密后的数据。服务端加密支持SSE-KMS、SSE-OBS、SSE-C三种加密方式,目前,CCE仅支持创建使用SSE-KMS方式加密的对象存储卷。
关于SSE-KMS加密方式的详细介绍,请参见服务端加密。
前提条件
- 在IAM中,已有“cce_cluster_agency”委托。您可前往“IAM控制台 > 委托”页签,查看该委托是否创建。
- 已经创建好一个集群,且集群版本在1.25.9-r0、1.27.6-r0、1.28.4-r0及以上。
- 已在集群中安装CCE容器存储(Everest),且插件版本在2.4.153及以上。
- 已在数据加密服务(DEW)中创建可用密钥,操作详情请参见创建密钥。
- 如果您需要通过命令行创建,需要使用kubectl连接到集群,详情请参见通过kubectl连接集群。
约束与限制
- 该功能正在陆续上线中,具体请以OBS服务声明为准。
- 使用SSE-KMS服务端加密功能对对象存储卷进行加密时,若需要开启存储桶密钥开关,则需确保“cce_cluster_agency”委托中具有kms:cmk:get、kms:cmk:list、kms:dek:crypto、kms:cmk:create以及kms:dek:create权限。其中“cce_cluster_agency”委托默认配置kms:cmk:get、kms:cmk:list以及kms:dek:crypto权限,而kms:cmk:create以及kms:dek:create权限需手动配置,具体操作请参见配置KMS权限。
- 当需要使用开启了SSE-KMS服务端加密功能的桶或者桶内对象时,请在IAM中为请求者配置kms:cmk:get、kms:cmk:list、kms:cmk:create、kms:dek:create、kms:dek:crypto权限,并确保请求访问的对象存储卷中已挂载对应的访问密钥(AK/SK),以实现对象的上传和下载操作。具体操作请参见给IAM用户授权和对象存储卷挂载设置自定义访问密钥(AK/SK)。
通过kubectl自动创建SSE-KMS加密的对象存储卷
- 使用kubectl连接集群。
- 创建pvc-obs-auto.yaml文件。其他参数说明,请参见kubectl命令行方式。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: evs-encrypt-test1 namespace: default annotations: everest.io/obs-volume-type: STANDARD csi.storage.k8s.io/fstype: s3fs everest.io/csi.sse: "kms" # 固定填'kms' everest.io/csi.data-encryption-algorithm: "xxx" # 用来加密数据的数据加密算法 everest.io/crypt-key-id: "xxx" # SSE-KMS加密方式下使用的KMS主密钥 everest.io/csi.sse-kms-key-project-id: "xxx" # SSE-KMS加密方式下KMS主密钥所属的项目ID everest.io/csi.sse-bucket-key-enabled: 'true' # 非必填项,是否开启存储桶密钥的开关 spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: csi-obs
表1 参数说明 参数
说明
everest.io/csi.sse
用于创建开启SSE-KMS加密的对象存储,值固定为'kms'。
everest.io/csi.data-encryption-algorithm
用于指定数据加密算法,取值为AES_256或SM4。
- AES_256:表示AES对称密钥。
- SM4:表示国密SM4对称密钥。
everest.io/crypt-key-id
表示SSE-KMS加密方式下使用的KMS主密钥,获取方法请参见查看密钥详细信息。
everest.io/csi.sse-kms-key-project-id
表示SSE-KMS加密方式下KMS主密钥所属的项目ID(非企业项目ID),获取方式请参见从控制台获取项目ID。
everest.io/csi.sse-bucket-key-enabled
非必填项,用于开启存储桶密钥开关,取值为'true'或'false'。不填该参数时,默认为'false'。
- true:表示开启存储桶密钥开关。该开关开启后,可以降低加密请求次数并提升访问效率。
- false:表示不开启存储桶密钥开关。
当创建的底层存储为并行文件系统时,该参数必填,且需设置为'true'。
说明:开启存储桶密钥开关时,则需确保“cce_cluster_agency”委托中具有kms:cmk:get、kms:cmk:list、kms:dek:crypto、kms:cmk:create以及kms:dek:create权限。其中“cce_cluster_agency”委托默认配置kms:cmk:get、kms:cmk:list以及kms:dek:crypto权限,而kms:cmk:create以及kms:dek:create权限需手动配置,具体操作请参见配置KMS权限。
- 执行命令创建 PVC。
kubectl apply -f pvc-obs-auto.yaml
- 前往“存储卷声明”页面,查看加密对象存储卷声明是否创建成功,并查看存储配置项是否显示已加密。
配置KMS权限
- 登录IAM控制台,在左侧导航栏单击“委托”。在右侧搜索框中,搜索“cce_cluster_agency”。在搜索结果中,单击“cce_cluster_agency”名称,进入基本信息页。
- 切换至“授权记录”页签,单击“授权”,右上角单击“新建策略”。
- 在“新建策略”步骤中,配置相关参数。本示例仅介绍必要参数,更多参数说明请参见创建自定义策略。
图1 配置权限
表2 参数
说明
策略名称
请根据需求自定义策略名称。
命名规范:长度不超过128个字符,仅只支持大小写字母、中文、数字、空格或特殊字符(-_.,)。
策略内容
用于配置具体策略,配置如下:
- 允许:请选择“允许”。
- 云服务:请选择“数据加密服务(KMS)”。
- 操作:请勾选“kms:cmk:create”和“kms:dek:create”权限。
- 所有资源:请选择“所有资源”
- 在右下角单击“下一步”,在“确认”弹窗中单击“确定”。当策略列表中出现新建的策略名称,则说明策略创建成功。
- 在“授权 > 选择策略”页面,勾选新建的策略名称,并在右下角单击“下一步”。
图2 选择策略
- 在“授权 > 设置最小授权范围”页面,选择“所有资源”,并在右下角单击“确定”。在“授权 > 完成”页面,单击“完成”。