バケットポリシーを変更しようとすると、Amazon S3 コンソールでアクセス拒否エラーが表示されるのはなぜですか?

最終更新日: 2020 年 11 月 10 日

コンソールを使用して Amazon Simple Storage Service (Amazon S3) バケットのバケットポリシーを変更しようとすると、アクセス拒否エラーが表示されます。どうすれば解決できますか?

簡単な説明

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

アクセス拒否エラーを解決するには、次のことを確認します。

  • お客様の IAM ID には、s3:GetBucketPolicys3:PutBucketPolicy の両方に対するアクセス許可があります。
  • バケットポリシーは、s3:GetBucketPolicy または s3:PutBucketPolicy に対する IAM ID のアクセス許可を拒否しません。
  • Amazon S3 のブロックパブリックアクセスが有効になっている場合、バケットポリシーを変更しても、パブリックアクセス権は付与されません。
  • AWS Organizations のサービスコントロールポリシーは、Amazon S3 へのアクセスを許可します。
  • バケットポリシーが s3:GetBucketPolicys3:PutBucketPolicy、または Amazon S3 アクション (s3:*) へのすべてのアクセスを拒否する場合は、バケットポリシーを削除します。

解決方法

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

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

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

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

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

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

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ModifyBucketPolicy",
      "Action": [
        "s3:GetBucketPolicy",
        "s3:PutBucketPolicy"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
    },
    {
      "Sid": "AccessS3Console",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::*"
    }
  ]
}

注: 前の例の IAM ポリシーの「AccessS3Console」ステートメントは、Amazon S3 コンソールにアクセス権を付与し、バケットポリシーの変更に固有のものではありません。

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.    [ ] タブを選択します。

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

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

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

Amazon S3 のブロックパブリックアクセスが有効になっている場合、バケットポリシーを変更しても、パブリックアクセス権は付与されません

バケットポリシーの変更を確認して、その変更がバケットへのパブリックアクセス権を付与するかどうかを確認します。次に、バケットまたはアカウントで Amazon S3 のブロックパブリックアクセスが有効になっているかどうかを確認します。S3 のブロックパブリックアクセスが有効になっている場合、パブリックアクセス権を付与するバケットポリシーを保存しようとすると、アクセス拒否エラーが発生します。

AWS Organizations のサービスコントロールポリシーは、Amazon S3 へのアクセスを許可します

AWS Organizations を使用している場合は、サービスコントロールポリシーで、Amazon S3 アクセスを明示的に拒否するステートメント (特に s3:PutBucketPolicy アクション) を確認します。

たとえば、次のポリシーは、すべての Amazon S3 アクションへのアクセスを明示的に拒否して、アクセス拒否エラーが表示されます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

バケットポリシーが s3:GetBucketPolicy、s3:PutBucketPolicy、または Amazon S3 アクション (s3:*) へのすべてのアクセスを拒否する場合は、バケットポリシーを削除します。

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


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


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