我想從 Amazon Simple Storage Service (Amazon S3) 下載儲存的物件,該服務使用伺服器端加密搭配 AWS Key Management Service (SSE-KMS) 管理的金鑰。
解決方法
從 S3 儲存貯體下載 SSE-KMS 加密的物件時,不需要指定 AWS Key Management Service (KMS) 金鑰識別碼。然而,您需要取得解密 AWS KMS 金鑰的許可。
當使用者傳送 GET 請求時,Amazon S3 必須檢查其是否已獲得適當的授權。Amazon S3 會檢查傳送請求的 AWS Identity and Access Management (IAM) 使用者或角色是否有權解密物件金鑰。如果 IAM 使用者或角色和金鑰屬於同一個 AWS 帳戶,則必須對金鑰政策授予解密許可。
**注意:**當 IAM 使用者或角色和 KMS 金鑰屬於同一個帳戶時,您可以使用 IAM 政策來控制金鑰的存取權限。不過,您必須修改金鑰政策以便明確開啟 IAM 政策並允許存取金鑰。如需詳細資訊,請參閱搭配使用 IAM 政策與 AWS KMS。
如果 IAM 使用者或角色和金鑰屬於不同的帳戶,則您必須對 IAM 使用者政策和金鑰政策授予解密許可。
以下是 IAM 政策範例,在允許使用者解密 AWS KMS 金鑰的同時,允許其從 S3 儲存貯體下載:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"s3:GetObject"
],
"Resource": [
"arn:aws:kms:example-region-1:123456789012:key/example-key-id",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
}
]
}
以下是允許使用者解密金鑰的金鑰政策陳述範例:
{
"Sid": "Allow decryption of the key",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::123456789012:user/Bob"
]
},
"Action": [
"kms:Decrypt"
],
"Resource": "*"
}
**注意:**若是 IAM 使用者或角色與儲存貯體屬於不同帳戶,則儲存貯體政策也必須授予使用者存取物件的權限。例如,如果使用者需要從儲存貯體下載,則使用者必須擁有儲存貯體政策的「s3:GetObject」動作許可。
獲得解密金鑰的權限後,您可以使用 AWS Command Line Interface (AWS CLI) 下載使用該金鑰加密的 S3 物件。請執行類似下列內容的命令:
aws s3api get-object --bucket DOC-EXAMPLE-BUCKET --key dir/example-object-name example-object-name
**注意:**如果您在執行 AWS CLI 命令時收到錯誤訊息,請確定您使用的是最新版本的 AWS CLI。
相關資訊
GetObject
get-object
透過儲存在 AWS Key Management Service (KMS) 中的 CMK 使用伺服器端加密 (SSE-KMS) 來保護資料