バケットポリシーを変更しようとする際に Amazon S3 コンソールで「Access Denied」エラーが発生するのはなぜですか?

最終更新日: 2019 年 4 月 25 日

コンソールを使用して Amazon Simple Storage Service (Amazon S3) バケットのバケットポリシーを変更しようとしているのですが、「Access Denied」エラーが発生します。どうすればこれを修正できますか? 

簡単な説明

Amazon S3 コンソールからバケットポリシーを確認するには、AWS Identity and Access Management (IAM) ユーザーまたはロールに s3:GetBucketPolicy アクションへのアクセス許可が必要です。既存のバケットポリシーを編集するには、IAM ID に s3:PutBucketPolicy アクションへのアクセス許可が必要です。

「Access Denied」エラーを解決するには、以下を確認します。

  • お客様の IAM ID には s3:GetBucketPolicys3:PutBucketPolicy の両方に対するアクセス許可があります。
  • バケットポリシーは s3:GetBucketPolicy または s3:PutBucketPolicy に対するお客様の IAM ID のアクセス許可を拒否しません。
  • バケットポリシーによって、すべてのユーザーが s3:GetBucketPolicys3:PutBucketPolicy へのアクセスを拒否された場合、バケットポリシーを削除します。

解決方法

お客様の IAM ID には、 s3:GetBucketPolicy と s3:PutBucketPolicy の両方に対するアクセス許可があります

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

2.    コンソールから、使用している IAM ユーザーまたはロールを開き、バケットポリシーにアクセスします。

3.    IAM ユーザーまたはロールの [Permissions★] タブで各ポリシーを展開し、その JSON ポリシードキュメントを表示します。

4.    JSON ポリシードキュメント で、Amazon S3 へのアクセスに関連するポリシーを検索します。次に、バケットの s3:GetBucketPolicys3:PutBucketPolicy アクションに対するアクセス許可があることを確認します。

たとえば、この IAM ポリシーでは、ユーザーまたはロールが s3:GetBucketPolicys3:PutBucketPolicy アクションを awsexamplebucket で実行できます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetBucketPolicy",
        "s3:PutBucketPolicy"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::awsexamplebucket/*"
    }
  ]
}

別の例として、この IAM ポリシーでは、ユーザーまたはロールが awsexamplebucket のあらゆる Amazon S3 アクションにアクセスできます。すべての Amazon S3 アクションへのアクセス許可を持っている場合、s3:GetBucketPolicy または s3:PutBucketPolicyに対するアクセス許可を追加する必要はありません。 

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::awsexamplebucket/*"
    }
  ]
}

5.    JSON ポリシードキュメントで、必ず "Effect": "Deny" のあるステートメントを検索してください次に、これらのステートメントがバケットの s3:GetBucketPolicy または s3:PutBucketPolicy アクションへ、IAM ユーザーまたはロールがアクセスすることを拒否しないよう確認してください

6.    バケットに s3:GetBucketPolicy または s3:PutBucketPolicy へのアクセスを許可するポリシーが見つからない場合、IAM IDにこれらのアクセス許可を付与するポリシーを追加します。バケットで s3:GetBucketPolicy または s3:PutBucketPolicy へのアクセスを拒否するポリシーを見つけた場合、アクセスを拒否しているステートメントまたはポリシーを削除します。IAM のアクセス許可を変更する手順については、「IAM ユーザーのアクセス許可の変更」をご参照ください。

バケットポリシーは s3:GetBucketPolicy または s3:PutBucketPolicy に対する IAM ID のアクセス許可を拒否しません。

IAM ID によって正しいアクセス許可が付与されていることを確認したが、それでもバケットポリシーを変更できない場合、アクセス権を持つ別の IAM ID でバケットポリシーを確認する必要があります。この IAM IDはアクセスをブロックしているステートメントについて、ポリシーを確認する必要があります。

バケットポリシーへのアクセス権を持つ IAM ID を使用して、次のステップに従います。

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

2.    バケットのリストから、変更したいバケットポリシーを持つバケットを開きます。

3.    [Permissions★] タブを選択します。

4.    [Bucket Policy★] を選択します。

5.    "Effect": "Deny" のあるステートメントを検索します。

6.    バケットポリシーを変更して、"Effect": "Deny" ステートメントを編集または削除します。これは IAM ユーザーあるいはロールが s3:GetBucketPolicy または s3:PutBucketPolicy へのアクセスを誤って拒否しているステートメントです。

バケットポリシーが s3:GetBucketPolicy と s3:PutBucketPolicy へのすべてのアクセスを拒否している場合、バケットポリシーを削除します

IAM ID がバケットポリシーを表示または変更できない場合、AWS アカウントの root ユーザー には既存のバケットポリシーを削除するアクセス許可があります。既存のポリシーが root ユーザーによって削除された後、IAM ユーザーまたはロールは新しいバケットポリシーを作成できます。