我希望 Amazon Simple Storage Service (Amazon S3) 儲存貯體只儲存由我的 AWS 帳戶中,AWS Key Management Service (AWS KMS) key 加密的物件。我如何確保只有這些物件可以上傳到我的儲存貯體?
簡短描述
使用 Amazon S3 預設加密功能,確保未使用加密標頭 (例如 x-amz-server-side-encryption 和 x-amz-server-side-encryption-aws-kms-key-id) 上傳的物件,在儲存到您的 S3 儲存貯體之前已由 AWS KMS 進行加密。接著,使用儲存貯體政策確保無法上傳具有其他加密設定 (如 AES-256) 的物件,並且使用 AWS KMS 加密上傳的物件必須包含來自您 AWS 帳戶的金鑰 ID。
**注意:**若要上傳 AWS KMS key 加密的物件,金鑰和 S3 儲存貯體必須位於同一 AWS 區域。
解決方法
Amazon S3 預設加密
請依照下列步驟使用 Amazon S3 主控台,將儲存貯體的 Amazon S3 預設加密設定為 AWS KMS:
- 開啟 Amazon S3 console (Amazon S3 主控台)。
- 選擇要用於 AWS KMS 加密物件的儲存貯體。
- 選擇 Properties (屬性) 檢視。
- 選擇 Default encryption (預設加密),然後選取 AWS-KMS。
- 選擇 Save (儲存)。
**注意:**若要使用 REST API、AWS Command Line Interface (AWS CLI) 或 AWS SDK 啟用 Amazon S3 預設加密,請參閱設定預設加密。
儲存貯體政策
請依照下列步驟設定您的儲存貯體政策,以拒絕以下兩種情況的上傳請求:使用其他加密設定 (如 AES-256),或使用 AWS KMS 加密但所使用的金鑰 ID 非來自您的 AWS 帳戶:
- 開啟 Amazon S3 console (Amazon S3 主控台)。
- 選擇要用於 AWS KMS 加密物件的儲存貯體。
- 選擇 Permissions (權限) 檢視。
- 選擇 Bucket Policy (儲存貯體政策)。
- 輸入類似以下內容的儲存貯體政策:
**注意:**將 samplebucketname 替換為您的儲存貯體的名稱,並將 us-east-1:111122223333 替換為正確的 AWS 區域和您的 AWS 帳戶 ID。
{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
{
"Sid": "DenySSE-S3",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::samplebucketname/*",
"Condition": {
"StringEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Sid": "RequireKMSEncryption",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::samplebucketname/*",
"Condition": {
"StringNotLikeIfExists": {
"s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
}
}
}
]
}
相關資訊
Amazon Simple Storage Service (Amazon S3) 如何使用 AWS KMS