當我嘗試從 Amazon Simple Storage Service (Amazon S3) 儲存貯體下載或複製物件時,出現以下錯誤: 密文指的是客戶主金鑰不存在、在此區域中不存在,或者不允許您進行存取。
解決方案
當以下兩個條件都成立時,您會收到此錯誤:
- 儲存在您提出請求的儲存貯體中的物件是使用 AWS Key Management Service (KMS) 金鑰加密。
- 提出請求的 AWS Identity and Access Management (IAM) 角色或使用者沒有足夠的權限,無法存取用於加密物件的 AWS KMS 金鑰。
**注意事項:**如果您在執行AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確定您使用的是最新的 AWS CLI 版本。
您可以使用 AWS CLI 命令 head-object 檢查物件的加密:
aws s3api head-object --bucket my-bucket --key my-object
請務必在前面的命令中執行以下動作:
- 將 my-bucket 取代為您的儲存貯體的名稱。
- 將 my-object 取代為您的物件的名稱。
此命令輸出如下所示:
{
"AcceptRanges": "bytes",
"ContentType": "text/html",
"LastModified": "Thu, 16 Apr 2015 18:19:14 GMT",
"ContentLength": 77,
"VersionId": "null",
"ETag": "\"30a6ec7e1a9ad79c203d05a589c8b400\"",
"ServerSideEncryption": "aws:kms",
"Metadata": {},
"SSEKMSKeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
"BucketKeyEnabled": true
}
輸出中的 SSekMSkeyID 欄位指定用來加密物件的 AWS KMS 金鑰。
若要解決此錯誤,請執行以下任一動作:
- 請確定附加至 IAM 使用者或角色的政策具有必要的權限。範例:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": [
"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
]
}
}
- 請確定 AWS KMS 政策具有必要的權限。範例:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AWS-account-ID:user/user-name-1"
},
"Action": [
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
}
如果 IAM 使用者或角色和 AWS KMS 金鑰來自不同的 AWS 帳戶,請確認以下事項:
- 附加到 IAM 實體的政策具有必要的 AWS KMS 權限。
- AWS KMS 金鑰政策會將所需的權限授與 IAM 實體。
**重要事項:**您無法在跨帳戶使用案例中使用 AWS 受管金鑰,因為無法修改 AWS 受管金鑰政策。
若要取得 AWS KMS 金鑰的詳細資訊,請執行 describe-key 命令:
aws kms describe-key --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
您還可以使用 AWS KMS 主控台檢視關於 AWS KMS 金鑰的詳細資料。
**注意事項:**確定已啟用用來加密物件的 AWS KMS 金鑰。
相關資訊
我的 Amazon S3 儲存貯體具備使用自訂 AWS KMS 金鑰的預設加密功能。如何允許使用者從儲存貯體下載及上傳?
從 Amazon S3 下載 KMS 加密物件時,是否需要指定 AWS KMS 金鑰?