スキップしてコンテンツを表示

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

所要時間2分
0

Amazon S3 コンソールを使用して Amazon Simple Storage Service (Amazon S3) バケットにファイルをアップロードしたいのですが、"403 Forbidden" エラーが発生します。

簡単な説明

次の原因で "403 Forbidden" エラーが発生する可能性があります。

  • オブジェクトの追加 (s3:PutObject) またはオブジェクトのアクセスコントロールリスト (ACL) 変更 (s3:PutObjectAcl) を行うための権限が付与されていない。
  • AWS Key Management Service (AWS KMS) キーを使用するための権限が付与されていない。
  • バケットポリシーに明示的な拒否ステートメントが含まれている。
  • Amazon S3 Block Public Access が有効である。
  • AWS Organizations のサービスコントロールポリシーで Amazon S3 へのアクセスが許可されていません。

解決策

s3:PutObject または s3:PutObjectAcl の権限を確認する

以下の手順に従ってください。

  1. AWS ID およびアクセス管理 (IAM) コンソールを開きます。
  2. ユーザーロールなど、バケットへのアクセスに使用される ID に移動します。ID の名前を選択します。
  3. [権限] タブを選択して各ポリシーを展開すると、JSON ポリシードキュメントが表示されます。
  4. JSON ポリシードキュメントで Amazon S3 へのアクセスに関連するポリシーを検索します。次に、バケットに対する s3:PutObject または s3:PutObjectAcl アクションの権限があることを確認します。

AWS KMS キーを使用する許可を取得する

AWS KMS で暗号化されたオブジェクトをアップロードするには、AWS KMS アクションを実行する権限が必要です。最低限、kms:Decrypt および kms:GenerateDataKey アクションを実行できる必要があります。

重要: 別のアカウント内のバケットにオブジェクトをアップロードする場合、AWS マネージドキー aws/S3 をデフォルトの暗号化キーとして使用することはできません。AWS マネージドキーポリシーは、変更できません。

バケットポリシーに明示的な拒否ステートメントがないか確認する

以下の手順に従ってください。

  1. Amazon S3 コンソールを開きます
  2. バケットのリストから、ファイルのアップロード先となるバケットを開きます。
  3. [権限] タブを選択します。
  4. [バケットポリシー] を選択します。
  5. "Effect": "Deny" を含むステートメントを探します。
  6. これらのステートメントで、バケットへのアップロードを妨げていないことを確認してください。

重要: "Effect": "Deny" を含むバケットポリシーを保存する前に、S3 バケットへのアクセスを拒否するステートメントの有無を確認してください。ロックアウトされた場合は、「誤って全員のアクセスを拒否した後に、Amazon S3 バケットへのアクセスを復旧する方法を教えてください」を参照してください。

次のステートメント例では、アップロードリクエストにより、ARN が arn:aws:kms:us-east-1:111122223333:key と一致する AWS KMS キーでオブジェクトが暗号化されている場合を除き、example-bucket に対する s3:PutObject へのアクセスを明示的に拒否しています。

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

リクエストからパブリック ACL を削除するか、S3 Block Public Access を無効にする

PUT リクエストでパブリック ACL (例: public-readauthenticated-read) を渡した場合、そのパブリック ACL によって S3 オブジェクトはパブリックに設定されます。このアカウントまたはバケットで S3 Block Public Access が有効な場合、アップロードリクエストは拒否されます。

: ユースケースで必要な場合のみ、オブジェクトをパブリックに設定することをおすすめします。

オブジェクトを一般公開オブジェクトとして正常にアップロードするには、必要に応じて S3 Block Access 機能を変更します。ユースケースではオブジェクトを一般公開する必要がない場合は、かかるパブリック ACL を PUT リクエストから除外します。

アカウントレベルで S3 Block Public Access を構成する方法については、「アカウントに Block Public Access を構成する」を参照してください。バケットレベルで構成する方法については、「S3 バケットに Block Public Access を構成する」を参照してください。パブリックアクセス設定に関する追加情報については、「"パブリック" の意味」を参照してください。

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

AWS Organizations を使用している場合は、サービスコントロールポリシーが Amazon S3 アクションを明示的に拒否しているかどうかを確認します。その場合は、要件に応じてポリシーを変更します。

関連情報

Amazon S3 からの 403 アクセス拒否エラーのトラブルシューティング方法を教えてください。

Amazon S3 でバケットポリシーの変更を試みると、"You don't have permissions to edit bucket policy" エラーが発生する場合のトラブルシューティング方法を教えてください

Amazon S3 で発生するアクセス拒否 (403 Forbidden) エラーのトラブルシューティング

AWS公式更新しました 2ヶ月前
コメントはありません

関連するコンテンツ