我想要將大型檔案上傳至我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。在我的上傳請求中,我會包含使用 AWS Key Management Service (AWS KMS) key 的加密資訊。但是,我收到「Access Denied」錯誤。
簡短說明
確認您擁有在用來加密物件的 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 Name (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 政策產生器
Amazon S3 中的資料加密