Simplified Storage Service (Amazon S3) のバケットポリシーを変更しようとすると、「403 Access Denied」エラーが表示されるのはなぜですか?

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

Amazon Simple Storage Service (Amazon S3) バケットのバケットポリシーを変更しようとすると、「403 Access Denied」(403 アクセス拒否) エラーが発生し続けます。

簡単な説明

「403 Access Denied」(403 アクセス拒否) エラーは、次の理由で発生する可能性があります。

  • AWS Identity and Access Management (IAM) ユーザーまたはロールには、s3:GetBucketPolicy および s3:PutBucketPolicy の両方に対するアクセス許可がない。
  • バケットポリシーが、s3:GetBucketPolicy または s3:PutBucketPolicy に対する IAM アイデンティティのアクセス許可を拒否している。
  • Amazon S3 ブロックパブリックアクセスが設定されている。
  • AWS Organizations のサービスコントロールポリシーが、Amazon S3 へのアクセスを許可していない。

こうしたエラーを解決するには、次の手順に従います。

  • IAM ユーザーまたはロールに、バケットポリシーを表示するs3:Get:BucketPolicy アクセス許可と、バケットポリシーを編集するためのs3:PutBucketPolicy アクセス許可があることを確認します。IAM ユーザーポリシーを追加して、存在しない場合にアクセスを許可します。
  • 許可が拒否された場合は、バケットアクセス許可を持つ別の IAM アイデンティティを使用して、バケットポリシーを編集します。または、誰もアクセスできない場合はバケットポリシーを削除して再作成します。
  • パブリック読み取りポリシーを追加しようとしている場合は、バケットの S3 ブロックパブリックアクセスを無効にします。
  • AWS Organizations を使用する場合は、S3 アクションを明示的に拒否するサービスコントロールポリシーがないことを確認します。また、オペレーションに例外を追加できることを確認します。

解決方法

s3:GetBucketPolicy と s3:PutBucketPolicy のアクセス許可を確認する

以下の手順を実行してください:

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

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

3.    バケットポリシーへのアクセスに使用している IAM アイデンティティ名を選択します。

4.    IAM アイデンティティの [Permissions] (アクセス許可) タブで各ポリシーを展開し、その JSON ポリシードキュメントを表示します。

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

次の IAM ポリシーの例では、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" のステートメントを探します。次に、これらのステートメントが、IAM アイデンティティによる s3:GetBucketPolicy または s3:PutBucketPolicy へのアクセスを拒否していないことを確認します。

バケットポリシーが存在しない場合に追加する

s3:GetBucketPolicy または s3:PutBucketPolicy アクセス許可を付与するポリシーが見つからない場合は、IAM アイデンティティにそれらのアクセス許可を付与するポリシーを追加します。s3:GetBucketPolicy または s3:PutBucketPolicy へのアクセスを拒否するポリシーが見つかった場合は、これらのポリシーを削除します。IAM のアクセス許可を変更する手順については、「IAM ユーザーのアクセス許可の変更」を参照してください。

バケットアクセス許可を持つ別の IAM アイデンティティを使用し、バケットポリシーを変更する

バケットポリシーを変更するには、次の手順を実行してください。

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

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

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

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

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

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

全員のアクセスを拒否する場合に、バケットポリシーを削除して再作成する

バケットポリシーが s3:GetBucketPolicys3:PutBucketPolicy、または Amazon S3 アクション (s3:*) へのすべてのアクセスを拒否する場合は、バケットポリシーを削除します。バケットポリシーを削除できない場合は、AWS アカウントのルートユーザーとしてポリシーを削除してみてください。ポリシーが削除されたら、新しいバケットポリシーを作成できます。

S3 ブロックパブリックアクセスを無効にする

バケットポリシーでパブリックアクセスが許可されている場合は、バケットで S3 ブロックパブリックアクセスが有効になっているか確認し、無効にします。公開する S3 バケットへのアクセスが今後拒否されないようにするには、そのアカウントで S3 ブロックパブリックアクセスが有効になっていないことを確認します。

注意:アカウントレベルで S3 ブロックパブリックアクセスを無効にする前に、不要なパブリックアクセスを防ぐために、プライベートバケットのバケットレベルで有効になっていることを確認してください。

AWS Organizations で、Amazon S3 アクセスを許可しないサービスコントロールポリシーを削除する

AWS Organizations を使用している場合は、サービスコントロールポリシーで、s3:PutBucketPolicy アクションまたはその他の S3 アクションを明示的に拒否するステートメントがないかを確認します。組織のセキュリティポリシーに従って S3 アクションを明示的に拒否するサービスコントロールポリシーを削除します。

例えば、次のポリシーは、すべての S3 アクションへのアクセスを拒否します。

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

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


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