本文介紹如何使用OSS的服務端加密功能,對持久化在OSS上的數據進行加密保護:

OSS支援在伺服器端對上傳的數據進行加密編碼(Server-Side Encryption):用戶上傳數據時,OSS對收到的用戶數據進行加密編碼,然後再將得到的加密資料持久化保存下來;用戶下載數據時,OSS自動對保存的加密資料進行解密並把未經處理資料返回給用戶,並在返回的HTTP請求Header中,聲明該數據進行了伺服器端加密。

OSS服務端加密主要應用場景

OSS通過服務端加密機制,提供待用資料保護。適合於對於檔案儲存體有高安全性或者合規性要求的應用場景。例如,深度學習樣本檔案的儲存、線上協作類文檔數據的儲存。針對不同的應用場景,OSS有如下幾種服務端加密方式:

  • 直接使用KMS進行加密、解密

    用戶直接調用KMS的API,使用指定的CMK進行加密、解密數據。這種方式適合於少量數據的加解密服務(且檔案大小小於4KB)。用戶數據會通過安全頻道傳輸至KMS服務端,對應的加解密結果通過安全頻道返回給客戶。

  • 使用KMS託管的信封加密

    用戶直接調用KMS的API,使用指定的CMK來產生明文數據密鑰、密文數據密鑰。這種場景適合於大量的數據加解密。用戶數據無需通過網路發送到KMS服務端進行加解密,這是一種低成本的加解密方式。

  • 使用OSS完全託管加密

    基於OSS完全託管的加密方式,是Object的一種屬性。用戶建立object時,只需要put object 請求中攜帶x-oss-server-side-encryption的HTTP Header,並指定其值為AES256,即可以實現該Object的伺服器端加密儲存。該方式適合於批量數據的加解密。

服務端加密選項

OSS服務端加密有以下選項,用戶可根據需要(密鑰管理原則)進行選擇:

  • 使用由OSS完全託管的服務端加密功能:資料加密金鑰的生成和管理,由OSS負責,並採用高強度、多因素的安全措施進行保護。資料加密的演算法採用使用行業標準的強密碼編譯演算法AES-256(即256位進階加密標準)。

服務端加密-OSS完全託管

OSS的伺服器端加密是Object的一個屬性。用戶建立一個Object的時候,只需要在Put Object的請求中攜帶x-oss-server-side-encryption的HTTP Header,並指定其值為AES256,即可以實現該Object的伺服器端加密儲存。

以下操作支援在請求中攜帶這些HTTP Header:

  • PutObject:簡單上傳
  • CopyObject:複製Object
  • InitiateMultipartUpload:分區上傳

服務端加密-KMS託管主要金鑰

當用戶建立Object時,在請求中攜帶x-oss-server-side-encryption的HTTP Header,並指定其值為KMS,即可實現在服務端加密儲存該Object(密鑰管理使用KMS服務)。OSS通過KMS服務,採用信封加密機制、AES-256密碼編譯演算法等強安全方法,對用戶儲存在OSS的對象進行加密保護。

KMS是阿里雲提供的一款安全、易用的管理類服務。用戶無需花費大量成本來保護密鑰的保密性、完整性和可用性,藉助金鑰管理服務,用戶可以安全、便捷的使用密鑰,專註於開發加解密功能場景。用戶可以通過KMS控制台中查看和管理KMS密鑰。

以下操作支援在請求中攜帶這些HTTP Header

  • PutObject:簡單上傳
  • CopyObject:複製Object
  • InitiateMultipartUpload:分區上傳
说明
  • 使用該模式,首次向某地域中的Bucket添加加密對象時,將自動為您在該地域建立一個預設KMS密鑰(用作用戶主要金鑰CMK)。此密鑰將用於服務端加密(KMS模式)。
  • 用戶可以在KMS控制台查看該密鑰資訊,請參見KMS使用文檔

服務端加密API使用

操作請求

以下API支援要求攜帶x-oss-server-side-encryption頭:

  • PutObject:簡單上傳
  • CopyObject:複製Object
  • InitiateMultipartUpload:分區上傳

HTTP Header格式如下:

名稱 描述 樣本
x-oss-server-side-encryption 指定服務端加密的模式

有效值:AES256、KMS

x-oss-server-side-encryption:KMS表示使用服務端加密模式為KMS託管主要金鑰
说明
  • 其他OSS收到的請求中,如果出現x-oss-server-side-encryption頭,OSS會直接返回HTTP狀態碼400,並在消息體內註明錯誤碼為InvalidArgument。
  • 如果您指定的x-oss-server-side-encryption頭不為有效值,OSS會直接返回HTTP狀態碼400,並在消息體內註明錯誤碼為InvalidEncryptionAlgorithmError
操作響應

通過伺服器端加密儲存的Object,以下API請求中OSS會返回x-oss-server-side-encryption頭:

  • PutObject
  • CopyObject
  • InitiateMultipartUpload
  • UploadPart
  • CompleteMultipartUpload
  • GetObject
  • HeadObject
Meta資訊

通過伺服器端加密-KMS託管主要金鑰模式儲存的Object,其Meta資訊會增加以下欄位:

名稱 描述 樣本
x-oss-server-side-encryption 指定伺服器端加密的模式 x-oss-server-side-encryption: KMS
x-oss-server-side-encryption-key-id 該Object加密,所用的用戶KMS key的ID x-oss-server-side-encryption-key-id: 72779642-7d88-4a0f-8d1f-1081a9cc7afb
相關API