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

最終更新日: 2021 年 4 月 27 日

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:*) への全ユーザーのアクセスを拒否する場合は、バケットポリシーを削除します。
    注:
    バケットポリシーを削除できない場合は、AWS アカウントのルートユーザーとしてポリシーを削除してみてください。

解決方法

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

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

2.    [User] (ユーザー) や [Role] (ロール) など、バケットポリシーへのアクセスに使用するエンティティを選択します。

3.    バケットポリシーへのアクセスに使用している IAM ユーザーまたはロール名を選択します。

4.    IAM ユーザーまたはロールの [Permissions] (アクセス権限) タブで各ポリシーを展開し、その JSON ポリシードキュメントを表示します。

5.    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 コンソールにアクセス権を付与し、バケットポリシーの変更に固有のものではありません。

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

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

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

IAM アクセス権限を確認してもバケットポリシーを変更できない場合は、別の IAM ID を使用してポリシーを確認してください。この IAM ID にはバケットアクセスが必要です。これにより、アクセスをブロックしているステートメントのポリシーを確認できます。

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

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

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

3.    [Permissions] (アクセス権限) タブを選択します。

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

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

6.    バケットポリシーを変更して、s3:GetBucketPolicy または s3:PutBucketPolicy への IAM ID アクセスを誤って拒否する "Effect": "Deny" ステートメントを更新します。

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 ユーザーまたはロールは新しいバケットポリシーを作成できます。


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


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