我想要將大型檔案上傳到我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。在我的上傳請求中,我會包括 AWS Key Management Service (AWS KMS) 金鑰的加密資訊。但是,我收到「存取遭拒」的錯誤。
簡短說明
請確認您具有相關許可,可對加密物件所用的 AWS KMS key 執行 kms:Decrypt 動作。
如果是大型檔案,AWS Command Line Interface (AWS CLI) 的高階 aws s3 命令、AWS SDK,以及許多第三方程式都會自動執行多組件上傳。若要使用 AWS KMS key 來加密多組件上傳,您必須擁有 kms:GenerateDataKey 和 kms:Decrypt 許可。kms:GenerateDataKey 許可允許您啟動上傳作業。kms:Decrypt 許可允許您使用同物件先前組件所用的金鑰來加密新上傳的組件。
**注意:**若要使用 AWS KMS key 的加密方式執行多組件上傳,您必須具有下列權限:
如果您的 AWS Identity and Access Management (IAM) 使用者或角色與 KMS key 位於相同的 AWS 帳戶中,則您的金鑰政策必須具有這些許可。如果您的 IAM 使用者或角色所屬帳戶與 KMS key 不同,則您的金鑰政策和 IAM 使用者或角色都必須具有這些許可。
解決方法
金鑰政策
檢閱 AWS 管理主控台政策視圖中的 AWS KMS key 政策。
在此金鑰政策中,搜尋將 IAM 使用者或角色的 Amazon Resource Number (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 許可的指示,請參閱 Changing permissions for an IAM user。
相關資訊
AWS 政策產生器
Amazon S3 中的資料加密