本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
搭配客戶提供的金鑰 (SSE-C) 使用伺服器端加密
伺服器端加密是有關保護靜態資料。伺服器端加密只會加密物件資料,非物件中繼資料。藉由搭配客戶提供的加密金鑰使用伺服器端加密 (SSE-C),您可以儲存使用自己的加密金鑰加密的資料。如果您提供的加密金鑰作為請求的一部分,Amazon S3 會在資料寫入磁碟時管理資料加密,以及在您存取物件時管理資料解密。因此,您不需要維護任何程式碼來執行資料加密與解密。您只需要管理自己提供的加密金鑰即可。
當您上傳物件時,Amazon S3 會使用您提供的加密金鑰將 AES-256 加密套用至您的資料。然後,Amazon S3 會從記憶體中移除加密金鑰。當您擷取物件時,您必須在要求中提供相同的加密金鑰。Amazon S3 會先驗證您提供的加密金鑰是否相符,然後對物件進行解密,再將物件資料傳回給您。
使用 SSE-C 無須額外付費。不過,請求設定和使用 SSE-C 會產生標準的 Amazon S3 請求費用。如需定價的資訊,請參閱 Amazon S3 定價
注意
Amazon S3 不會存放您提供的加密金鑰。相反地,它會存放加密金鑰的隨機雜湊訊息驗證碼 (HMAC) Salt 值,以驗證未來的請求。HMAC Salt 值不可用來衍生加密金鑰的值,或用來對加密物件的內容進行解密。換句話說,如果您遺失加密金鑰,則會遺失物件。
S3 複寫支援使用 SSE-C 加密的物件。如需複寫加密物件的詳細資訊,請參閱 複寫加密的物件 (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)。
如需有關 SSE-C 的詳細資訊,請參閱以下主題。
SSE-C 概觀
本節提供 SSE-C 的概觀。使用 SSE-C 時,請謹記下列考量。
-
您必須使用 HTTPS。
重要
使用 SSE-C 時,Amazon S3 會拒絕所有透過 HTTP 提出的請求。為安全起見,建議任何錯誤地透過 HTTP 傳送的金鑰皆視為已遭洩漏。請捨棄該金鑰,並適當地輪換。
-
回應中的實體標籤 (ETag) 不是物件資料的 MD5 雜湊。
-
您會管理哪個加密金鑰用來加密哪個物件的對應。Amazon S3 不會存放加密金鑰。您會負責追蹤針對哪個物件提供哪個加密金鑰。
-
若已對儲存貯體啟用版本控制,使用此功能上傳的每個物件版本都會有自己的加密金鑰。您會負責追蹤針對哪個物件版本使用了哪個加密金鑰。
-
由於您是在用戶端管理加密金鑰,因此您會在用戶端管理任何額外的保護措施,例如金鑰輪替。
警告
如果您遺失加密金鑰,針對沒有其加密金鑰的物件所提出的任何
GET
要求都會失敗,而且您會遺失物件。 -
SSE-C 的要求和限制
若要針對特定 Amazon S3 儲存貯體中的所有物件要求 SSE-C,您可以使用儲存貯體政策。
例如,下列儲存貯體政策拒絕所有不包含請求 SSE-C 之 x-amz-server-side-encryption-customer-algorithm
標題請求的上傳物件 (s3:PutObject
) 許可。
您也可以使用政策,限制特定 Amazon S3 儲存貯體中所有物件的伺服器端加密。例如,如果請求包含請求 SSE-KMS 的 x-amz-server-side-encryption-customer-algorithm
標頭,則下列儲存貯體政策會拒絕向所有人上傳物件 (s3:PutObject
) 的許可。
重要
如果您使用儲存貯體政策在s3:PutObject
上要求 SSE-C,則必須在所有分段上傳請求中包含 x-amz-server-side-encryption-customer-algorithm
標頭 (CreateMultipartUpload、UploadPart 和 CompleteMultipartUpload)。
已預先簽章的 URL 和 SSE-C
您可以產生預先簽章的 URL,其可以用於上傳新的物件、擷取現有的物件或擷取物件中繼資料等操作。預先簽章的 URL 支援如下的 SSE-C:
-
建立預先簽章的 URL 時,您必須在簽章計算中使用
x-amz-server-side-encryption-customer-algorithm
標頭來指定演算法。 -
使用預先簽章的 URL 來上傳新的物件、擷取現有的物件或只擷取物件中繼資料時,您必須提供用戶端應用程式請求中的所有加密標頭。
注意
針對非 SSE-C 物件,您可以產生預先簽章的 URL,並將該 URL 直接貼入至瀏覽器以存取資料。
不過,您無法針對 SSE-C 物件執行此操作,因為除了預先簽章的 URL 之外,您亦須包含 SSE-C 物件專屬的 HTTP 標頭。因此,您只能以程式設計方式針對 SSE-C 物件使用預先簽章的 URL。
如需預先簽章的 URL 詳細資訊,請參閱使用預先簽章的 URL 來下載和上傳物件。
使用客戶提供金鑰 (SSC-C) 指定伺服器端加密
在使用 REST API 建立物件時,您可以使用客戶提供的金鑰 (SSE-C) 來指定伺服器端加密。當您使用 SSE-C 時,必須使用下列要求標頭來提供加密金鑰資訊。
名稱 | 描述 |
---|---|
x-amz-server-side-encryption-customer-algorithm
|
使用此標頭可指定加密演算法。標頭值必須為 |
x-amz-server-side-encryption-customer-key
|
使用此標頭可提供 256 位元 base64 編碼加密金鑰,讓 Amazon S3 用來對資料進行加密或解密。 |
x-amz-server-side-encryption-customer-key-MD5
|
使用此標頭可提供採用 RFC 1321 |
您可以使用 AWS SDK 包裝函式程式庫將這些標頭新增至您的請求。如果需要,您可以直接在應用程式中進行 Amazon S3 REST API 呼叫。
注意
您無法使用 Amazon S3 主控台上傳物件及請求 SSE-C。您也無法使用主控台來更新使用 SSE-C 存放的現有物件 (例如變更儲存方案或新增中繼資料)。
支援 SSE-C 的 Amazon S3 REST API
下列 Amazon S3 API 支援伺服器端加密搭配客戶提供的加密金鑰 (SSE-C)。
-
GET 操作 – 使用 GET API 擷取物件時 (請參閱 GET 物件),您可以指定這些請求標頭。
-
HEAD 操作 – 若要使用 HEAD API 擷取物件中繼資料 (請參閱 HEAD 物件),您可以指定這些請求標頭。
-
PUT 操作 – 使用 PUT API 上傳資料時 (請參閱 PUT 物件),您可以指定這些請求標頭。
-
分段上傳 – 使用分段上傳 API 上傳大型物件時,您可以指定這些標頭。您可以在啟動請求 (請參閱啟動分段上傳) 及每個後續片段上傳請求 (請參閱上傳片段或上傳片段 - 複製) 中指定這些標頭。每個部分上傳要求的加密資訊,必須與您在啟動分段上傳要求中所提供的加密資訊相同。
-
POST 操作 – 使用 POST 操作上傳物件時 (請參閱 POST 物件),請提供與表單欄位中相同的資訊,而不是請求標頭。
-
複製操作 – 當您複製物件時 (請參閱 PUT 物件 - 複製),您要同時有來源物件與目標物件。
-
如果您想要使用伺服器端加密搭配 AWS 受管金鑰來加密目標物件,您必須提供
x-amz-server-side-encryption
請求標頭。 -
如果您想要使用 SSE-C 對目標物件進行加密,您必須使用上一個表格中所述的三個標頭來提供加密資訊。
-
如果來源物件是使用 SSE-C 加密,您必須使用下列標頭來提供加密金鑰資訊,讓 Amazon S3 可以先解密物件,再進行複製。
名稱 描述 x-amz-copy-source-server-side-encryption-customer-algorithm
包含此標頭可指定 Amazon S3 應該用來解密來源物件的演算法。此值必須為
AES256
。x-amz-copy-source-server-side-encryption-customer-key
包含此標頭可提供 base64 編碼加密金鑰,讓 Amazon S3 用來對來源物件進行解密。此加密金鑰必須是您建立來源物件時提供給 Amazon S3 的加密金鑰。否則,Amazon S3 無法解密物件。
x-amz-copy-source-server-side-encryption-customer-key-MD5
包含此標頭可提供採用 RFC 1321
之 base64 編碼 128 位元 MD5 摘要的加密金鑰。
-
下列範例說明如何用客戶提供金鑰 (SSE-C),要求為物件進行伺服器端加密。這些範例會執行下列操作。每個操作示範如何在要求中指定 SSE-C 相關標頭:
-
放置物件 – 使用客戶提供的加密金鑰上傳物件並請求伺服器端加密。
-
取得物件 – 下載前一個步驟中所上傳的物件。在此請求中,請您提供在您上傳物件時所提供的相同加密資訊。Amazon S3 需要此資訊來解密物件,才能將物件傳回給您。
-
取得物件中繼資料 – 擷取物件的中繼資料。請您提供物件建立時,使用的加密資訊。
-
複製物件 – 建立先前上傳物件的複本。因為來源物件是使用 SSE-C 所存放,所以您必須在複製要求中提供其加密資訊。根據預設,只有在您明確請求加密時,Amazon S3 才會加密物件的複本。此範例指示 Amazon S3 存放加密的物件複本。
上節中的範例示範如何以 PUT、GET、Head 和 Copy 操作要求經由客戶提供加密金鑰的伺服器端加密 (SSE-C)。本節說明其他支援 SSE-C 的 Amazon S3 API。