本文介紹如何使用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:分區上傳
![]() |
说明 |
|
服務端加密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託管主要金鑰 |
![]() |
说明 |
|
通過伺服器端加密儲存的Object,以下API請求中OSS會返回x-oss-server-side-encryption
頭:
- PutObject
- CopyObject
- InitiateMultipartUpload
- UploadPart
- CompleteMultipartUpload
- GetObject
- HeadObject
通過伺服器端加密-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:Append Object
- API:Put Object
- API:Copy Object
- API:Post Object