資料保護是指資料轉送(上傳資料至OSS、從OSS下載資料)過程中和處於靜止狀態(資料存放區在OSS資料中心磁碟)期間保護資料。傳輸中的資料可以通過SSL或者用戶端加密進行保護。待用資料可以通過以下方式進行保護:
伺服器端加密
OSS將資料保存到資料中心的磁碟之前進行加密,並且在下載對象時自動進行解密。用戶端加密
可以使用用戶端加密SDK,在本地進行資料加密,並將加密後的資料上傳到OSS。在這種場景下,使用者需要管理加密過程以及加密金鑰。說明:目前只有Python SDK支援用戶端加密。程式碼範例請參見Python SDK用戶端加密。
採用用戶端加密SDK保護資料
用戶端加密是指將資料發送到OSS之前在使用者本地進行加密,對於資料加密金鑰的使用,目前支援如下兩種方式:
- 使用KMS託管使用者主要金鑰
- 使用使用者自主管理密鑰
使用KMS託管使用者主要金鑰
當使用KMS託管使用者主要金鑰用於用戶端資料加密時,無需向OSS加密用戶端提供任何加密金鑰。只需要在上傳對象時指定KMS使用者主要金鑰ID(也就是CMK ID)。其具體工作原理如下:
- 上傳對象。
通過使用CMK ID,用戶端首先向KMS發送一個請求,申請1個用於加密對象的資料密鑰(Data Key)。作為響應,KMS會返回一個隨機生成的資料清除金鑰(Data Key)以及一個資料密文密鑰(Encrypted Data Key)。 - 本地加密資料。
本地用戶端接收到KMS返回的資料清除金鑰以及資料密文密鑰後,將使用資料清除金鑰進行本地加密,並且將加密後的對象以及資料密文密鑰上傳至OSS。 - 下載對象。
用戶端首先會從OSS服務端下載加密的對象以及作為對象中繼資料存放區的資料密文密鑰。 - 解密資料。
用戶端將資料密文密鑰以及CMK ID發送至KMS伺服器。作為響應,KMS將使用指定的CMK解密,並且將資料清除金鑰返回給本地加密用戶端。
注意:
- 本地加密用戶端為每一個上傳的對象獲取一個唯一的資料加密金鑰。
- 為了保證資料的安全性,建議CMK定期輪換或者更新。
- 客戶需要維護CMK ID與對象之間的映射關係。
使用使用者自主管理密鑰
使用使用者自主管理密鑰,需要使用者自主生成並保管加密金鑰。當使用者本地用戶端加密時,由使用者自主上傳加密金鑰(對稱式加密密鑰或者非對稱式加密密鑰)至本地加密用戶端。其具體加密過程如下:
上傳對象。
使用者首先向本地加密用戶端提供1個使用者主要金鑰(對稱金鑰或者非對稱金鑰)。用戶端只使用此主要金鑰加密其隨機生成的資料密鑰。該過程如下:- OSS本地加密用戶端在本地生成一個一次性的對稱金鑰,即資料密鑰(Data Key)。它將用於加密單個對象(針對每個對象,用戶端都會隨生成1個資料密鑰)。
- 用戶端使用資料祕密金鑰加密對象。
- 用戶端使用使用者提供的主要金鑰來加密資料密鑰。
- 用戶端將加密的資料密鑰(Encrypted Data Key)作為對象元資料的一部分上傳至OSS。
下載對象。
下載對象時,用戶端首先從OSS下載加密的對象以及元資料。通過使用元資料中的材料,用戶端將授權確定使用哪個主要金鑰來解密加密的資料密鑰。用戶端使用解密後的資料密鑰來解密對象。
注意:
- OSS本地加密用戶端不會將使用者主要金鑰以及未加密的資料發送至OSS。所以,請務必妥善保管加密金鑰,如果密鑰丟失,將無法解密資料。
- 資料密鑰由本地加密用戶端隨機生成。