Amazon S3 でファイルをアップロードしようとすると、「403 Forbidden」(403 禁止) エラーが表示されるのはなぜですか?

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

Amazon S3 コンソールを使用して Amazon Simple Storage Service (Amazon S3) バケットにファイルをアップロードしようとしています。しかし、代わりに「403 Forbidden」(403 禁止) エラーが発生します。

簡単な説明

「403 Forbidden」(403 禁止) エラーは、次の理由で発生する可能性があります。

  • s3:PutObject がオブジェクトを追加するための許可、または s3:PutObjectAcl がオブジェクトの ACL を変更するための許可がない。
  • AWS Key Management Service (AWS KMS) キーを使用する許可がない。
  • バケットポリシーに明示的拒否ステートメントがある。
  • Amazon S3 ブロックパブリックアクセスが有効になっている。
  • バケットのアクセスコントロールリスト (ACL) が AWS アカウントのルートユーザーにオブジェクトの書き込みを許可していない。
  • AWS Organizations のサービスコントロールポリシーが Amazon S3 へのアクセスを許可していない。

解決方法

s3:PutObject または s3:PutObjectAcl の許可を確認する

次の手順を実行してください。

  1. AWS Identity and Access Management (IAM) コンソールを開きます。
  2. [User] (ユーザー) や [Role] (ロール) など、バケットポリシーへのアクセスに使用するアイデンティティを選択します。
  3. バケットポリシーへのアクセスに使用している IAM アイデンティティ名を選択します。
  4. [Permissions] (許可) タブを選択し、各ポリシーを展開して JSON ポリシードキュメントを表示します。
  5. JSON ポリシードキュメントで、Amazon S3 へのアクセスに関連するポリシーを検索します。その後、バケットに対する s3:PutObject または s3:PutObjectAcl アクションの許可があることを確認します。

AWS KMS キーを使用するための許可の付与を依頼する

カスタム AWS KMS キーによるデフォルトの暗号化を使用する S3 バケットにアクセスするには、キー管理者は、キーポリシーに対する許可を付与する必要があります。

暗号化されたバケットにオブジェクトをアップロードするには、IAM ユーザーまたはロールに、少なくとも kms:Encryptkms:GenerateDataKey に対する AWS KMS 許可が必要です。

バケットポリシーで明示的拒否ステートメントを確認する

次の手順を実行してください。

  1. Amazon S3 コンソールを開きます
  2. バケットのリストから、ファイルをアップロードするバケットを開きます。
  3. [Permissions] (許可) タブを選択します。
  4. [Bucket Policy] (バケットポリシー) を選択します。
  5. "Effect": "Deny" のあるステートメントを検索します。
  6. バケットポリシーに、特定の条件を満たすための s3:PutObject の正しい URI リクエストパラメータが含まれていることを確認します。

重要: "Effect": "Deny" でバケットポリシーを保存する前に、S3 バケットへのアクセスを拒否するステートメントがないか確認してください。ロックアウトされた場合は、「誤って全ユーザーの Amazon S3 バケットへのアクセスを拒否してしまいました。アクセスを回復するにはどうすればよいですか?」を参照してください。

次のステートメント例は、アップロードリクエストに AWS KMS キー arn:aws:kms:us-east-1:111122223333:key による暗号化が含まれていない限り、awsdoc-example-bucket 上の s3:PutObject へのアクセスを明示的に拒否します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::awsdoc-example-bucket/*",
      "Condition": {
        "StringNotLikeIfExists": {
          "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
        }
      },
      "Principal": "*"
    }
  ]
}

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

アップロードリクエストでパブリック ACL を渡していて、S3 ブロックパブリックアクセス機能が有効になっている場合は、ファイルをアップロードする前に無効にします。

アカウントレベルでの S3 ブロックパブリックアクセスの設定の詳細については、「アカウントのパブリックアクセスブロック設定の構成」を参照してください。バケットレベルでの設定については、「S3 バケットへのパブリックアクセスブロック設定の構成」を参照してください。

オブジェクトを書き込むための許可をルートユーザーに付与する

バケットの ACL 許可を設定して、オブジェクトを書き込むためのアクセス権をルートユーザーに付与します。

AWS Organizations のサービスコントロールポリシーを削除する

AWS Organizations を使用する場合は、S3 アクションを明示的に拒否するサービスコントロールポリシーをすべて削除します。