AWS KMS のデフォルト暗号化を使用する Amazon S3 バケットにファイルをアップロードするとき、Access Denied エラーが表示されるのはなぜですか?

最終更新日: 2022 年 5 月 12 日

Amazon Simple Storage Service (Amazon S3) バケットで、AWS Key Management Service (AWS KMS) のデフォルトの暗号化を使用しています。バケットにファイルをアップロードしようとすると、Amazon S3 から Access Denied というエラーメッセージが返されます。どうすれば解決できますか?

解決方法

まず、以下を確認します。

  • AWS Identity and Access Management (IAM) のユーザーまたはロールには、バケットに対する s3:PutObject 許可があること。
  • AWS KMS キーに「aws/s3」エイリアスがないこと。クロスアカウント IAM プリンシパルがオブジェクトをアップロードしている場合は、デフォルトバケットの暗号化にこのエイリアスを使用することはできません。AWS KMS キーおよびポリシーの管理の詳細については、「AWS Key Management Service (SSE-KMS) によるサーバー側の暗号化を使用したデータの保護」を参照してください。

次に、表示されたエラーメッセージに基づいて、IAM ユーザーまたはロールの AWS KMS 許可を更新します。

重要:

  • AWS KMS キーと IAM ロールが別々の AWS アカウントに属している場合は、IAM ポリシーと KMS キーポリシーを更新する必要があります。KMS 許可は、IAM ポリシーと KMS キーポリシーの両方に追加するようにしてください。
  • IAM ポリシーを使用して KMS キーへのアクセスを制御するには、KMS キーのキーポリシーで、IAM ポリシーを使用する許可をアカウントに付与する必要があります。

「An error occurred (AccessDenied) when calling the PutObject operation: Access Denied」

このエラーメッセージは、IAM ユーザーまたはロールに kms:GenerateDataKey アクションに対する許可が必要であることを示しています。

kms:GenerateDataKey に許可を追加するには、次の手順に従います。

1.    IAM コンソールを開きます。

2.    Amazon S3 バケットへのファイルのアップロードに使用する IAM ユーザーまたはロールを選択します。

3.    [Permissions] (許可) で、各ポリシーを展開して JSON ポリシードキュメントを表示します。

4.    JSON ポリシードキュメントで、AWS KMS アクセスに関連するポリシーを探します。"Effect": "Allow" のステートメントを確認し、ユーザーまたはロールが、バケットの AWS KMS キーに対する kms:GenerateDataKey アクションに対する許可を持っているかどうかを確認します。

5.    この許可がない場合は、適切なポリシーに許可を追加します。手順については、「ユーザーへの許可の追加 (コンソール)」または「ロールの許可ポリシーの変更 (コンソール)」を参照してください。

6.    JSON ポリシードキュメントで、"Effect": "Deny" のステートメントを探します。これらのステートメントがバケットでの s3: PutObject アクションを拒否しないことを確認します。これらのステートメントによって バケットの暗号化に使用されるキーに対する kms:GenerateDataKey アクションへの IAM ユーザーまたはロールのアクセスが拒否されないことを確認しますまた、VPC エンドポイントポリシー、サービスコントロールポリシー、許可境界、またはセッションポリシーを使用する場合は、必要な KMS および S3 の許可も制限しないでください。

“CreateMultipartUpload オペレーションを呼び出すときにエラー (AccessDenied) が発生しました: アクセスが拒否されました”

このエラーメッセージは、IAM ユーザーまたはロールに kms:GenerateDataKey および kms:Decrypt アクションに対する許可が必要であることを示します。

次の手順に従って、kms:GenerateDataKey および kms:Decrypt の許可を追加します。

1.    IAM コンソールを開きます。

2.    Amazon S3 バケットへのファイルのアップロードに使用する IAM ユーザーまたはロールを選択します。

3.    [Permissions] (許可) で、各ポリシーを展開して JSON ポリシードキュメントを表示します。

4.    JSON ポリシードキュメントで、AWS KMS アクセスに関連するポリシーを探します。"Effect": "Allow" のステートメントを確認し、バケットの AWS KMS キーに対する kms:GenerateDataKey および kms:Decrypt の許可がロールにあるかどうかを確認します。

5.    これらの許可がない場合は、適切なポリシーに許可を追加します。手順については、「ユーザーへの許可の追加 (コンソール)」または「ロールの許可ポリシーの変更 (コンソール)」を参照してください。

6.    JSON ポリシードキュメントで、"Effect": "Deny" のステートメントを探します。次に、これらのステートメントがバケットで s3: PutObject アクションを拒否しないことを確認します。これらのステートメントによって、バケットの暗号化に使用されるキーに対する kms:GenerateDataKey および kms:Decrypt アクションに対する IAM ユーザーまたはロールのアクセスが拒否されていないことも確認します。また、VPC エンドポイントポリシー、サービスコントロールポリシー、許可境界、またはセッションポリシーを使用する場合は、必要な KMS および S3 の許可も制限しないでください。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?