https://s3-blob.squarecloud.app で S3 API に対応しています。カスタム endpoint を設定できるツールであれば動作します: aws-cli、boto3、AWS SDK for JavaScript、rclone、Cyberduck、およびほとんどのバックアップツールです。
認証情報
S3 ツールはアクセスキーのペアでリクエストに署名します。ペアは S3 認証情報から取得します。blob:read のみを持つキーからは読み取り専用のペアが得られます。
API キーが変わらない限りペアも変わらないため、一度取得してシークレットマネージャーまたは環境変数に保管してください。起動のたびにこのルートを呼び出さないでください: 受け付けるのは 1 時間に 10 リクエストです。
バケット
アカウントからは 2 つの固定バケットが見えます。バケットの作成や削除はできません。public または private バケット内のキーは、ユーザー id を含まないオブジェクトのパスです。public バケット内の images/logo.png は、REST API 上のオブジェクト pub/<user_id>/images/logo.png にあたります。S3 経由で書き込んだファイルは REST API とダッシュボードに表示され、その逆も同様です。
設定
boto3 で署名付き URL を生成するには
signature_version="s3v4" が必要です。指定しないと、generate_presigned_url は古い SigV2 で署名し、ゲートウェイはそれを受け付けません。署名付き URL の有効期間は最大 7 日 (604800 秒) です。サポートされる操作
バケットポリシー、CORS、ライフサイクル、ウェブサイト、暗号化、オブジェクトロック、バージョン、ログ記録、通知、レプリケーション、ACL とタグの書き込み、
partNumber による GET、ブラウザの POST フォームによるアップロードは 501 NotImplemented を返します。ライフサイクルルールにはアカウント設定を使用してください。
キー
- キーはリテラルなパスです。キーの長さは約 1000 バイトまでです: 1024 バイトの上限にはアカウントのプレフィックスも含まれます。それより長いキーには
KeyTooLongErrorが返され、そのメッセージに使用できる正確なバイト数が示されます。セグメントを空、.、..にすることはできず、一覧のプレフィックスとマーカーにも同じ規則が適用されます。 - クエリ文字列内のそのままの
+はInvalidArgumentで拒否されます:+は%2B、スペースは%20にエンコードしてください。すべての AWS SDK、rclone、AWS CLI はすでにそうしています。 /で終わる 0 バイトのキーはフォルダーマーカーであり、AWS コンソールがフォルダーを作成する方法と同じです。- 配信される
Content-Typeは、REST API と同様に拡張子から決定されます。実行ファイルはInvalidArgumentで拒否され、.html、.svg、.xmlはダウンロードとして配信されます。
メタデータ、キャッシュ、有効期限
x-amz-meta-*ヘッダーは Pro と Enterprise で保持されます (最大 5 キー、512 バイト。超えるとMetadataTooLarge)。その他のプランでは破棄されます。Content-Dispositionはinlineかattachmentのみ受け付け、ファイル名にはオブジェクト自身の名前が使われます。Cache-Controlはno-cacheかmax-age(最大 1 年、immutable付き)のみ受け付け、それ以外は破棄されます。キャッシュしないCache-Control(no-cache、no-store、max-age=0) は、Enterprise 以外ではAccessDeniedで拒否されます。- プレフィックスごとのルールは、自動削除、
max_size、extensionsを含め、S3 経由で書き込まれたオブジェクトにも適用されます。
制限
制限を超えると、ゲートウェイは
SlowDown (HTTP 503) を返し、AWS SDK は自動的にバックオフして再試行します。S3 リクエストはプランの API リクエスト制限にカウントされません。
ループで再試行する前に、キーペアを確認してください。無効な認証情報を送信しすぎた IP は短時間ブロックされます。
パートサイズ
マルチパート対応のツールは大きなファイルを自動的に分割します。各パートは 80 MB 以下にしてください。AWS CLI (8 MB) と rclone (5 MB) のデフォルトはすでにこの範囲内です。AccessDenied を返します。ストレージ枠は REST API と同様に適用され、開いているすべてのマルチパートアップロードのパートの合計が枠の残りに対してカウントされます (QuotaExceeded)。

