我想要將大型檔案上傳到我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。在我的上傳請求中,我會包括 AWS Key Management Service (AWS KMS) 金鑰的加密資訊。但是,我收到「存取遭拒」的錯誤。
簡短說明
確認您具有權限可對用於加密物件的 AWS KMS 金鑰執行 kms:Decrypt 動作。
對於大型檔案,AWS Command Line Interface (AWS CLI) 的高階 s3 命令、AWS SDK,以及許多第三方程式都會自動執行多組件上傳。若要使用 AWS KMS 金鑰來加密多組件上傳,您必須擁有 kms:GenerateDataKey 和 kms:Decrypt 權限。kms:GenerateDataKey 權限允許您啟動上傳。透過 kms:Decrypt 權限,您可以使用用於相同物件的先前組件的金鑰來加密新上傳的組件。
**注意事項:**上載所有組件之後,您必須組裝上傳的組件以完成多組件上傳作業。因為上傳的組件是使用 AWS KMS 金鑰進行伺服器端加密,因此您必須先解密物件組件,才能組裝組件。因此,您必須對使用 AWS KMS 金鑰 (SSE-KMS) 的伺服器端加密的多組件上傳請求具有 kms:Decrypt權限。
解決方法
您的 AWS Identity and Access Management (IAM) 角色和金鑰可能存在於相同的 AWS 帳戶或不同帳戶中。如果您的 IAM 角色和金鑰位於相同的帳戶中,則您可以從 IAM 政策或 AWS KMS 金鑰政策指定 kms:Decrypt 權限。如果您的 IAM 角色和金鑰位於不同的帳戶中,則您必須同時在金鑰和 IAM 政策中指定 kms:Decrypt 權限。
金鑰政策
檢閱 AWS 管理主控台政策視圖中的 AWS KMS 金鑰政策。
在金鑰政策中,搜尋將您的 IAM 使用者或角色的 ARN 列為 AWS 主體的陳述式。ARN 的格式如下:arn:aws:iam::111122223333:user/john。
然後,檢查 IAM 使用者或角色陳述式允許的動作清單。若為多組件上傳,允許的動作清單必須包含 SSE-KMS 的 kms:Decrypt。
例如,金鑰政策中的下列陳述式可讓使用者 John 執行 kms:Decrypt 和 kms:GenerateDataKey 動作:
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/john"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*"
},
IAM 權限
若要檢閱您的 IAM 權限,請開啟 IAM 主控台,然後選擇您的 IAM 使用者或角色。
檢閱套用至 IAM 使用者或角色的權限政策清單。請確定有適用的政策可讓您對用來加密物件的金鑰執行 kms:Decrypt 動作:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
]
}
}
此範例陳述式授予 IAM 使用者存取權,以對金鑰 arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd 執行 kms:Decrypt 和 kms:GenerateDataKey。
如需如何更新 IAM 權限的指示,請參閱變更 IAM 使用者的權限。
相關資訊
AWS 政策產生器