資料加密適用於高安全性或合規性要求的情境。通過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組件。
建立儲存空間,且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角色。
使用阿里雲帳號(主帳號)或Resource Access Management員登入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