資料加密適用於對高安全性或合規性具有較高要求的應用情境,您無需自建和維護密鑰管理基礎設施,通過加密保護儲存在阿里雲ECS上的資料就能保障資料的隱私性和自主性。本文介紹如何使用KMS(Key Management Service)託管的CMK(Customer Master Key)或OSS完全託管密鑰功能對阿里雲Container ServiceACK叢集的OSS儲存卷資料加密。
前提條件
叢集預設已安裝CSI組件。如需升級請參見升級csi-plugin和csi-provisioner。
說明如果您叢集中使用Flexvolume組件,由於Flexvolume已廢棄,請參見遷移Flexvolume至CSI完成遷移後再進行掛載。您可以在 ,在儲存頁簽下確認儲存群組件類型。
已建立Bucket,Bucket與叢集需使用同一帳號操作。
說明若Bucket和ECS執行個體位於相同地區,請選擇私網網域名稱。
加密方式
OSS儲存卷加密分為服務端加密SSE(Server-Side Encryption)、用戶端加密,阿里雲Container Service只支援服務端加密:
服務端加密: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
通過儲存卷頁面查看已建立的加密儲存卷。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
方式二:使用KMS託管的指定CMK ID加密OSS Object
配置KMS存取權限。
使用KMS託管的指定CMK ID加密OSS Object,需要為PV使用的AccessKey對應的RAM使用者授予KMS的存取權限,操作步驟如下。更多資訊,請參見伺服器端加密。
使用阿里雲帳號(主帳號)登入RAM控制台。
說明阿里雲帳號(主帳號)對帳號中的資源具有完全系統管理權限,您也可以在RAM中建立一個RAM使用者,授予AdministratorAccess許可權,充當帳號管理員,該管理員可以對帳號下所有雲資源進行管控操作。更多資訊,請參見建立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
通過儲存卷頁面查看已建立的加密儲存卷。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
方式三:使用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
通過儲存卷頁面查看已建立的加密儲存卷。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。