本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用客戶提供金鑰 (SSC-C) 指定伺服器端加密
若要搭配客戶提供的金鑰 (SSE-C) 使用伺服器端加密,請先確定 SSE-C 不是 Amazon S3 一般用途儲存貯體的預設加密組態中的封鎖加密類型。如果封鎖,您可以透過更新儲存貯體的預設加密組態來啟用此加密類型。然後,您可以透過傳遞所需的標頭,在上傳請求中使用 SSE-C。請參閱 支援使用 SSE-C 寫入資料的 Amazon S3 動作,並確定包含 SSE-C 物件加密和解密請求所需的 S3 API 標頭。
當您上傳指定 SSE-C 的物件時,Amazon S3 會使用您提供的加密金鑰,將 AES-256 加密套用至您的資料。然後,Amazon S3 會從記憶體中移除加密金鑰。當您擷取物件時,您必須在要求中提供相同的加密金鑰。Amazon S3 會先驗證您提供的加密金鑰是否相符,然後對物件進行解密,再將物件資料傳回給您。
使用 SSE-C 之前,請確定您已檢閱 使用 SSE-C 之前的考量事項。
注意
Amazon S3 不會存放您提供的加密金鑰。相反地,它會存放加密金鑰的隨機雜湊訊息驗證碼 (HMAC) Salt 值,以驗證未來的請求。HMAC Salt 值不可用來衍生加密金鑰的值,或用來對加密物件的內容進行解密。換句話說,如果您遺失加密金鑰,則會遺失物件。
主題
SSE-C 動作和必要標頭
在支援的 S3 APIs 上指定 SSE-C 需要傳遞特定請求參數。
注意
Amazon S3 中的 PutBucketEncryption API 用於設定儲存貯體的預設伺服器端加密。不過, PutBucketEncryption 不支援啟用 SSE-C 做為儲存貯體的預設加密方法。SSE-C 是一種物件層級加密方法,可讓您在每次物件上傳或下載請求時,將加密金鑰提供給 Amazon S3。Amazon S3 使用此金鑰在請求期間加密或解密物件,然後捨棄金鑰。這表示 SSE-C 是以每個物件為基礎啟用,而不是做為預設儲存貯體設定。
支援使用 SSE-C 寫入資料的 Amazon S3 動作
您可以使用下列 API 操作或動作,在將物件寫入一般用途儲存貯體時,使用客戶提供的金鑰 (SSE-C) 請求伺服器端加密:
注意
S3 複寫支援使用 SSE-C 加密的物件。如需複寫加密物件的詳細資訊,請參閱 複寫加密的物件 (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)。
SSE-C 物件加密和解密請求所需的 S3 API 標頭
您必須提供下列三個 API 標頭,以使用 SSE-C 加密或解密物件:
x-amz-server-side-encryption-customer-algorithm使用此標頭來指定加密演算法。標頭值必須是 AES256。x-amz-server-side-encryption-customer-key使用此標頭提供 256 位元的 base64 編碼加密金鑰,讓 Amazon S3 用來加密或解密您的資料。x-amz-server-side-encryption-customer-key-MD5使用此標頭可根據 RFC 1321 提供加密金鑰的 base64 編碼 128 位元 MD5 摘要。Amazon S3 使用此標頭來進行訊息完整性檢查,以確保加密金鑰傳輸無誤。
請求複製使用 SSE-C 加密的來源物件所需的 S3 API 標頭
您必須提供下列三個 API 標頭,才能複製使用 SSE-C 加密的來源物件:
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 加密的儲存貯體政策範例
若要針對寫入 Amazon S3 儲存貯體的所有物件要求 SSE-C,您可以使用儲存貯體政策。例如,下列儲存貯體政策拒絕所有不包含請求 SSE-C 之 x-amz-server-side-encryption-customer-algorithm 標題請求的上傳物件 (s3:PutObject) 許可。
{ "Version":"2012-10-17", "Id": "PutObjectPolicy", "Statement": [ { "Sid": "RequireSSECObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "Null": { "s3:x-amz-server-side-encryption-customer-algorithm": "true" } } } ] }
重要
如果您使用儲存貯體政策在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 來下載和上傳物件。
使用 SSE-C 提出請求
在使用 REST API 建立物件時,您可以使用客戶提供的金鑰 (SSE-C) 來指定伺服器端加密。使用 SSE-C 時,您必須使用 提供加密金鑰資訊請求複製使用 SSE-C 加密的來源物件所需的 S3 API 標頭。您可以使用 AWS SDK 包裝函式程式庫將這些標頭新增至您的請求。如果需要,您可以直接在應用程式中進行 Amazon S3 REST API 呼叫。
重要
使用客戶提供的金鑰 (SSE-C) 指定伺服器端加密之前,請確定不會針對一般用途儲存貯體封鎖 SSE-C 加密。如需詳細資訊,請參閱封鎖或取消封鎖一般用途儲存貯體的 SSE-C。
注意
您無法使用 Amazon S3 主控台上傳物件並請求 SSE-C。 您也無法使用 主控台來更新 (例如,變更儲存類別或新增中繼資料) 使用 SSE-C 存放的現有物件。 如需詳細資訊,請參閱 SSE-C 物件加密和解密請求所需的 S3 API 標頭。
使用 REST API
支援 SSE-C 的 Amazon S3 REST API APIs
下列 Amazon S3 API 支援伺服器端加密搭配客戶提供的加密金鑰 (SSE-C)。
-
GET 操作 – 使用 GET API 擷取物件時 (請參閱 GET 物件),您可以指定這些請求標頭。
-
HEAD 操作 – 若要使用 HEAD API 擷取物件中繼資料 (請參閱 HEAD 物件),您可以指定這些請求標頭。
-
PUT 操作 – 使用 PUT API 上傳資料時 (請參閱 PUT 物件),您可以指定這些請求標頭。
-
分段上傳 – 使用分段上傳 API 上傳大型物件時,您可以指定這些標頭。您可以在啟動請求 (請參閱啟動分段上傳) 和每個後續分段上傳請求 (請參閱上傳組件或 UploadPartCopy) 中指定這些標頭。每個部分上傳要求的加密資訊,必須與您在啟動分段上傳要求中所提供的加密資訊相同。
-
POST 操作 – 使用 POST 操作上傳物件時 (請參閱 POST 物件),請提供與表單欄位中相同的資訊,而不是請求標頭。
-
複製操作 – 當您複製物件時 (請參閱 CopyObject),您同時擁有來源物件和目標物件:
-
如果您想要指定目標物件的加密類型,您必須提供
x-amz-server-side-encryption請求標頭。 -
如果您想要使用 SSE-C 加密目標物件,您必須使用 S3 API 提供加密資訊SSE-C 物件加密和解密請求所需的 S3 API 標頭。
-
如果來源物件是使用 SSE-C 加密,您必須使用 S3 API 標頭 提供加密金鑰資訊請求複製使用 SSE-C 加密的來源物件所需的 S3 API 標頭。
-
使用 AWS SDKs為 PUT、GET、頭部和複製操作指定 SSE-C
下列範例說明如何用客戶提供金鑰 (SSE-C),要求為物件進行伺服器端加密。這些範例會執行下列操作。每個操作示範如何在要求中指定 SSE-C 相關標頭:
-
放置物件 – 使用客戶提供的加密金鑰上傳物件並請求伺服器端加密。
-
取得物件 – 下載前一個步驟中所上傳的物件。在此請求中,請您提供在您上傳物件時所提供的相同加密資訊。Amazon S3 需要此資訊來解密物件,才能將物件傳回給您。
-
取得物件中繼資料 – 擷取物件的中繼資料。請您提供物件建立時,使用的加密資訊。
-
複製物件 – 建立先前上傳物件的複本。因為來源物件是使用 SSE-C 所存放,所以您必須在複製要求中提供其加密資訊。根據預設,只有在您明確請求加密時,Amazon S3 才會加密物件的複本。此範例指示 Amazon S3 存放加密的物件複本。
使用 AWS SDKs為分段上傳指定 SSE-C
上節中的範例示範如何以 PUT、GET、Head 和 Copy 操作要求經由客戶提供加密金鑰的伺服器端加密 (SSE-C)。本節說明其他支援 SSE-C 的 Amazon S3 API。