本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用伺服器端加密 AWS KMS 按鍵 (SSE-KMS)
重要
Amazon S3 現在會使用 Amazon S3 受管金鑰 (SSE-S3) 套用伺服器端加密,做為 Amazon S3 中每個儲存貯體的加密基礎層級。從 2023 年 1 月 5 日起,所有上傳到 Amazon S3 的新物件都會自動加密,無需額外費用,也不會影響效能。S3 儲存貯體預設加密組態和新物件上傳的自動加密狀態可在 AWS CloudTrail 日誌、S3 庫存、S3 儲存鏡頭、Amazon S3 API 主控台,以及在 AWS Command Line Interface 以及 AWS SDKs。如需詳細資訊,請參閱預設加密FAQ。
伺服器端加密是指接收資料的應用程式或服務在目的地將資料加密。
Amazon S3 會針對新物件上傳自動啟用使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密。
除非另有指定,否則儲存貯體預設會使用 SSE-S3 來加密物件。不過,您可以選擇將值區設定為使用伺服器端加密 AWS Key Management Service (AWS KMS)鍵(SSE-KMS)代替。如需詳細資訊,請參閱指定伺服器端加密 AWS KMS (SSE-KMS)。
AWS KMS 是一種結合安全、高可用性硬體和軟體的服務,提供專為雲端調整規模的金鑰管理系統。Amazon S3 使用伺服器端加密搭配 AWS KMS (SSE-KMS) 以加密您的 S3 物件資料。此外,當物件要求 SSE-KMS 時,S3 總和檢查碼 (做為物件中繼資料的一部分) 會以加密形式儲存。如需總和檢查的詳細資訊,請參閱 檢查物件完整性。
如果您使用KMS密鑰,則可以使用 AWS KMS 通過 AWS Management Console
-
集中建立、檢視、編輯、監控、啟用或停用、旋轉和排程刪除KMS金鑰。
-
定義控制KMS金鑰的使用方式和使用者的原則。
-
稽核其使用情況,以證明其使用方式正確無誤。稽核支援 AWS KMS API,但不是由 AWS KMSAWS Management Console
.
中的安全控制 AWS KMS 可協助您符合與加密相關的法規遵循要求。您可以使用這些KMS金鑰來保護 Amazon S3 儲存貯體中的資料。當您使用 SSE-使用 S3 儲存貯體KMS加密時, AWS KMS keys 必須與值區位於相同的區域。
使用需支付額外費用 AWS KMS keys如需詳細資訊,請參閱。AWS KMS key中的概念 AWS Key Management Service 開發人員指南和 AWS KMS 定價
許可
若要上載使用 AWS KMS key 對於 Amazon S3,您需要密鑰的kms:GenerateDataKey
許可。若要下載使用 AWS KMS key,您需要kms:Decrypt
權限。如需有關的資訊 AWS KMS 分段上傳所需的權限,請參閱分段上傳API和權限。
重要
請仔細檢閱KMS金鑰原則中授予的權限。一律將客戶管理的KMS金鑰原則權限限制為僅限IAM主體和 AWS 必須存取相關的服務 AWS KMS 關鍵動作。如需詳細資訊,請參閱中的主要原則 AWS KMS.
主題
AWS KMS keys
當您使用伺服器端加密 AWS KMS (SSE-KMS),您可以使用預設值 AWS Managed 金鑰,或者您可以指定已建立的客戶管理金鑰。 AWS KMS 支持信封加密。S3 使用 AWS KMS 信封加密功能可進一步保護您的資料。信封加密是使用資料金鑰加密純文字資料,然後使用金鑰加密該資料金鑰的做法。KMS如需有關信封加密的詳細資訊,請參閱中的信封加密 AWS Key Management Service 開發人員指南。
如果您未指定客戶受管金鑰,Amazon S3 會自動建立 AWS 受管金鑰 在您的 AWS 帳戶 第一次將使用 SSE-加密的對象添加KMS到存儲桶。根據預設,Amazon S3 會將此KMS金鑰用於 SSE-KMS。
如果您想要將客戶管理的金鑰用於 SSE-KMS,請在設定 SSE-KMS 之前建立對稱加密客戶管理的金鑰。然後,當您KMS為值區設定 SSE-時,請指定現有的客戶管理金鑰。如需有關對稱加密金鑰的詳細資訊,請參閱中的對稱加密KMS金鑰。AWS Key Management Service 開發人員指南。
建立客戶受管金鑰可為您提供更多的靈活性與控制。例如,您可以建立、輪換和停用客戶受管金鑰。您也可以定義存取控制,並稽核用來保護資料的客戶受管金鑰。有關客戶管理和更多信息 AWS 受管理金鑰,請參閱客戶金鑰和 AWS 按鍵中的 AWS Key Management Service 開發人員指南。
注意
當您將伺服器端加密與儲存在外部金鑰存放區中的客戶管理金鑰搭配使用時,與標準KMS金鑰不同,您必須負責確保金鑰資料的可用性和耐久性。如需外部金鑰存放區及其如何轉移共用責任模型的詳細資訊,請參閱 AWS Key Management Service 開發人員指南。
使用 SSE-跨帳戶操作的KMS加密
對跨帳戶操作使用加密時,請注意下列事項:
-
如果 AWS KMS key Amazon 資源名稱 (ARN) 或別名未在請求時或透過儲存貯體的預設加密組態提供, AWS 受管金鑰 (
aws/s3
) 被使用。 -
如果您使用上傳或存取 S3 物件 AWS Identity and Access Management (IAM) 在相同的主參與者 AWS 帳戶 作為您的KMS關鍵,您可以使用 AWS 受管金鑰 (
aws/s3
). -
如果您想要授予 S3 物件跨帳戶存取權,請使用客戶受管金鑰。您可以設定客戶受管金鑰的政策,以允許從另一個帳戶存取的權限。
-
如果您要指定客戶管理的KMS金鑰,建議您使用完全合格的KMS金鑰ARN。如果您改用KMS索引鍵別名, AWS KMS 解析要求者帳戶中的金鑰。此行為可能會導致使用屬於請求者的KMS金鑰 (而非值區擁有者) 加密資料。
-
您必須指定已授予您 (要求者) 已獲授予
Encrypt
許可的金鑰。如需詳細資訊,請參閱中的允許金鑰使用者使用KMS金鑰進行密碼編譯作業。AWS Key Management Service 開發人員指南。
如需有關何時使用客戶管理金鑰的詳細資訊,以及 AWS 託管KMS密鑰,請參閱我應該使用 AWS 受管金鑰 還是客戶管理密鑰來加密我在 Amazon S3 中的對象?
SSE-KMS 加密工作流程
如果您選擇使用 AWS 受管金鑰 或客戶管理的金鑰, AWS KMS 和 Amazon S3 會執行下列信封加密動作:
-
Amazon S3 請求純文字資料金鑰和在指定KMS金鑰下加密的金鑰副本。
-
AWS KMS 產生資料金鑰,在金KMS鑰下加密,然後將純文字資料金鑰和加密的資料金鑰傳送到 Amazon S3。
-
Amazon S3 使用資料金鑰來加密資料,並在使用後盡快從記憶體中移除純文字金鑰。
-
Amazon S3 將加密的資料金鑰以中繼資料形式跟加密資料一起存放。
當您要求解密資料時,Amazon S3 和 AWS KMS 執行下列動作:
-
Amazon S3 會將加密的資料金鑰傳送到 AWS KMS 在
Decrypt
請求中。 -
AWS KMS 使用相同的金鑰解密加密的資料KMS金鑰,然後將純文字資料金鑰傳回 Amazon S3。
-
Amazon S3 使用純文字資料金鑰來解密加密的資料,然後盡快從記憶體移除純文字資料金鑰。
重要
當您使用 AWS KMS key 對於 Amazon S3 中的伺服器端加密,您必須選擇對稱加密KMS金鑰。Amazon S3 僅支援對稱加密KMS金鑰。如需有關這些金鑰的詳細資訊,請參閱 KMS AWS Key Management Service 開發人員指南。
稽核 SSE-KMS 加密
若要識別指定 SSE-的請求KMS,您可以使用 Amazon S3 儲存鏡頭指標中的「全部 SSE-KMS 請求」和「全部百分比」請求指標。SSE KMSS3 Storage Lens 是一種雲端儲存體分析功能,您可以用來了解整個組織使用物件儲存體的情況及其活動情形。您也可以使用KMS已啟用值區計數和KMS已啟用% SSE 的值區,以瞭解預設值區加密 (SSE-KMS) 的值區計數。SSE如需詳細資訊,請參閱使用 S3 Storage Lens 評估儲存活動和用量。如需完整的指標清單,請參閱 S3 Storage Lens 指標詞彙表。
若要稽核您的使用 AWS KMS 您的密鑰 SSE-KMS 加密數據,您可以使用 AWS CloudTrail 日誌。您可以深入了解您的加密操作,例如 GenerateDataKey 和 Decrypt。 CloudTrail 支援許多屬性值來篩選搜尋,包括事件名稱、使用者名稱和事件來源。
Amazon S3 儲存貯體金鑰
當您使用設定伺服器端加密時 AWS KMS (SSE-KMS),您可以將存儲桶配置為使用 S3 存儲桶密鑰 SSE-KMS。使用桶級密鑰 SSE-KMS 可以減少 AWS KMS 將 Amazon S3 的請求流量減少到最多 99% 的請求成本 AWS KMS.
當您將儲存貯體設定為SSEKMS在新物件上使用 S3 儲存貯體金鑰時, AWS KMS 會產生儲存貯體層級金鑰,用來為值區中的物件建立唯一的資料金鑰。此 S3 儲存貯體金鑰會在 Amazon S3 內使用一段時間限制,進一步減少 Amazon S3 發出請求的需求 AWS KMS 完成加密作業。如需使用 S3 儲存貯體金鑰的詳細資訊,請參閱 KMS使用 Amazon S3 儲存貯體金鑰降低成本 SSE。
要求伺服器端加密
若要在特定 Amazon S3 儲存貯體中要求所有物件的伺服器端加密,您可以使用儲存貯體政策。例如,如果請求不包含要求伺服器端加密的x-amz-server-side-encryption-aws-kms-key-id
標頭,則下列儲存貯體政策會拒絕所有人使用 SSE upload object (s3:PutObject
) 權限。KMS
{ "Version":"2012-10-17", "Id":"PutObjectPolicy", "Statement":[{ "Sid":"DenyObjectsThatAreNotSSEKMS", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::
amzn-s3-demo-bucket1
/*", "Condition":{ "Null":{ "s3:x-amz-server-side-encryption-aws-kms-key-id":"true" } } } ] }
要求一個特定的 AWS KMS key 用於加密存儲桶中的對象,可以使用s3:x-amz-server-side-encryption-aws-kms-key-id
條件密鑰。若要指定KMS金鑰,您必須使用arn:aws:kms:
格式為 Amazon 資源名稱 (ARN) 的金鑰。 AWS Identity and Access Management 不驗證的字串是否region
:acct-id
:key/key-id
s3:x-amz-server-side-encryption-aws-kms-key-id
存在。
注意
上傳物件時,您可以使用x-amz-server-side-encryption-aws-kms-key-id
標頭來指定KMS金鑰,或依賴預設值區加密組態。如果您的 PutObject 請求aws:kms
在x-amz-server-side-encryption
標頭中指定,但未指定x-amz-server-side-encryption-aws-kms-key-id
標頭,則 Amazon S3 假設您要使用 AWS 受管金鑰。 無論如何, AWS KMS Amazon S3 用於物件加密的金鑰識別碼必須符合 AWS KMS 政策中的金鑰識別碼,否則 Amazon S3 會拒絕該請求。
如需 Amazon S3 特定條件金鑰的完整清單,請參閱服務授權參考中的 Amazon S3 條件金鑰。
加密內容
加密內容是一組金鑰值對,其中包含資料的其他相關內容資訊。加密內容不被加密。為加密操作指定加密內容時,Amazon S3 必須指定與解密操作相同的加密內容。否則,解密會失敗。 AWS KMS 使用加密內容作為額外的已驗證資料 (AAD) 來支援已驗證的加密。如需有關加密內容的詳細資訊,請參閱 AWS Key Management Service 開發人員指南。
根據預設,Amazon S3 會使用物件或儲存貯體 Amazon 資源名稱 (ARN) 做為加密內容配對:
-
如果您在KMS未啟用 S3 儲存貯體金鑰的情況下使用 SSE-,ARN則會將物件用作加密內容。
arn:aws:s3:::
object_ARN
-
如果您使用 SSE-KMS 並啟用 S3 儲存貯體金鑰,則會使用該儲存貯ARN體做為加密內容。如需 S3 儲存貯體金鑰的詳細資訊,請參閱 KMS使用 Amazon S3 儲存貯體金鑰降低成本 SSE。
arn:aws:s3:::
bucket_ARN
您可以選擇性地使用 s3: PutObject 請求中的x-amz-server-side-encryption-context
標頭來提供額外的加密內容對。不過,加密內容未加密,因此請確保其中不包含敏感資訊。Amazon S3 會一起存放此附加金鑰對與預設加密內容。當其處理 PUT
請求時,Amazon S3 會將 aws:s3:arn
的預設加密內容附加至您提供的加密內容。
您可以使用加密內容來識別和分類密碼編譯操作。您也可以使用預設的加密內容ARN值來追蹤 AWS CloudTrail 透過檢視哪個 Amazon S3 ARN 與哪個加密金鑰搭配使用。
在 CloudTrail 記錄檔的requestParameters
欄位中,加密內容看起來類似下列內容。
"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::
" }
amzn-s3-demo-bucket1
/file_name
當您使用 SSE-KMS 搭配選用的 S3 儲存貯體金鑰功能時,加密內容值即為儲存貯體ARN的值。
"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::
" }
amzn-s3-demo-bucket1
傳送要求 AWS KMS 加密物件
重要
所有GET
和PUT
請求 AWS KMS 加密物件必須使用安全通訊端層 (SSL) 或傳輸層安全性 (TLS) 來建立。請求也必須使用有效的認證進行簽名,例如 AWS 簽名版本 4 (或 AWS 簽名版本 2)。
AWS 簽名版本 4 是將身份驗證信息添加到 AWS 由傳送的要求HTTP。為了安全起見,大多數請求 AWS 必須使用訪問密鑰簽名,該訪問密鑰包括訪問密鑰 ID 和秘密訪問密鑰。這兩種金鑰通常稱為您的安全憑證。如需詳細資訊,請參閱驗證請求 (AWS 簽名版本 4)和簽名版本 4 簽名過程。
重要
如果您的物件使用 SSE-KMS,請勿針對要GET
求和要求傳送加密要HEAD
求標頭。否則,您將收到 HTTP400 錯誤請求
錯誤。