我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體具有 AWS Key Management Service (AWS KMS) 預設加密。我嘗試將檔案上傳到存儲桶,但 Amazon S3 傳回存取遭拒錯誤訊息。我該如何解決這個問題?
解決方法
首先,請確認:
然後,根據您收到的錯誤訊息更新 IAM 使用者或角色的 AWS KMS 權限。
重要:
- 如果 AWS KMS key 和 IAM 角色屬於不同的 AWS 帳戶,則必須更新 IAM 政策和 KMS 金鑰政策。請務必將 KMS 權限新增至 IAM 政策和 KMS 金鑰政策。
- 若要使用 IAM 政策來控制 KMS 金鑰的存取權,KMS 金鑰的金鑰政策必須授予帳戶使用 IAM 政策的權限。
「呼叫 PutObject 作業時發生錯誤 (AccessDenied): 存取遭拒」
此錯誤訊息表示您的 IAM 使用者或角色需要 kms:GenerateDataKey 動作的權限。
請按照以下步驟為 kms:GenerateDataKey 新增權限:
1. 開啟 IAM 主控台。
2. 選擇您用來將檔案上傳到 Amazon S3 儲存貯體的 IAM 使用者或角色。
3. 在權限索引標籤中,展開各個政策以檢視其 JSON 政策文件。
4. 在 JSON 政策文件中,尋找與 AWS KMS 存取相關的政策。檢閱包含**"Effect": "Allow"** 的陳述式,檢查使用者或角色是否具有權對儲存貯體的 AWS KMS key 執行 kms:GenerateDataKey 動作。
5. 如果缺少此權限,請將權限新增至適當的政策。如需指示,請參閱為使用者新增權限 (主控台) 或修改角色權限政策 (主控台)。
6. 在 JSON 政策文件中,尋找包含**"Effect": "Deny"** 的陳述式。確認這些陳述式不會拒絕對儲存貯體執行 s3:PutObject 動作。陳述式不得拒絕 IAM 使用者或角色對用於加密儲存貯體的金鑰存取 kms:GenerateDataKey 動作。此外,在使用 VPC 端點政策、服務控制政策、權限界限或工作階段政策時,不得限制所需的 KMS 和 S3 權限。
「呼叫 CreateMultipartUpload 作業時發生錯誤 (AccessDenied): 存取遭拒」
此錯誤訊息表示您的 IAM 使用者或角色需要 kms:GenerateDataKey 和kms:Decrypt 動作的權限。
請按照以下步驟為 kms:GenerateDataKey 和 kms:Decrypt 新增權限:
1. 開啟 IAM 主控台。
2. 選擇您用來將檔案上傳到 Amazon S3 儲存貯體的 IAM 使用者或角色。
3. 在權限索引標籤中,展開各個政策以檢視其 JSON 政策文件。
4. 在 JSON 政策文件中,尋找與 AWS KMS 存取相關的政策。檢閱包含**"Effect": "Allow"** 的陳述式,檢查角色是否具有對儲存貯體 AWS KMS key 的 kms:GenerateDataKey 和 kms:Decrypt 權限。
5. 如果缺少這些權限,請將權限新增至適當的政策。如需指示,請參閱為使用者新增權限 (主控台) 或修改角色權限政策 (主控台)。
6. 在 JSON 政策文件中,尋找包含**"Effect": "Deny"** 的陳述式。然後,確認這些陳述式不會拒絕對儲存貯體執行 s3:PutObject 動作。陳述式不得拒絕 IAM 使用者或角色對用於加密儲存貯體的金鑰存取 kms:GenerateDataKey 和 kms:Decrypt 動作。此外,在使用 VPC 端點政策、服務控制政策、權限界限或工作階段政策時,不得限制所需的 KMS 和 S3 權限。
相關資訊
設定 Amazon S3 儲存貯體的預設伺服器端加密行為