HStorageは、ビジネスプラン向けにS3互換APIをリリースしました。AWS SDK、aws-cli、rcloneなどのS3クライアントから、HStorage上のファイルを直接アップロード、取得、一覧表示、削除できます。ブラウザ操作だけでなく、バックアップ、社内システム連携、バッチ処理、AI/RAG用データ投入にも使えるデータプレーンです。
S3互換APIでできること
HStorageのS3互換APIは、Amazon S3の主要なオブジェクト操作と互換性のあるHTTP APIです。S3完全互換ではありません。HStorageのユーザー、プラン、容量制限、フォルダ、既存ファイル管理と整合する範囲で、主要なS3クライアントから使いやすい操作を提供します。
対応している主な操作は次のとおりです。
| 操作 | 内容 |
|---|---|
ListBuckets |
固定バケット hstorage を返します。 |
HeadBucket |
バケット存在確認に成功レスポンスを返します。 |
ListObjectsV2 |
認証ユーザーがアクセスできるオブジェクト一覧を返します。 |
HeadObject |
オブジェクトのメタデータを取得します。 |
GetObject |
オブジェクトをダウンロードします。Rangeリクエストにも対応します。 |
PutObject |
単一オブジェクトをアップロードします。Content-Length が必要です。 |
DeleteObject |
所有者の名前空間内のオブジェクトを削除します。 |
| Presigned URL | SigV4のクエリ署名を検証します。 |
| Multipart upload | 開始、パートアップロード、完了、中断、パート一覧取得に対応します。 |
大容量ファイルでは、SDKやrcloneがmultipart uploadを使います。HStorage側では未完了セッションとパート情報を管理し、容量制限の回避や中途半端なアップロードの残存を防ぎます。

利用条件
S3互換APIの認証情報を新規発行できるのは、ビジネスプランのユーザーです。既存の認証情報を持っている場合は、管理画面から無効化または削除できます。
認証情報には2つの権限があります。
| 権限 | 用途 |
|---|---|
読み取り専用 (read_only) |
一覧取得、メタデータ取得、ダウンロード用。バックアップ確認やAI検索の読み込みに向いています。 |
読み書き (read_write) |
アップロード、削除、multipart uploadを含む運用用。バックアップ投入やシステム連携で使います。 |
読み取りだけで足りる用途には read_only を使ってください。不要な書き込み権限を付けないことで、誤削除や誤アップロードの範囲を絞れます。
接続情報
S3クライアントには以下の値を設定します。
| 項目 | 値 |
|---|---|
| エンドポイント | https://s3.hstorage.jp |
| バケット名 | hstorage |
| リージョン | auto または ap-northeast-1 |
| アドレス形式 | パススタイル(forcePathStyle: true) |
HStorageは固定バケット hstorage を外部に見せます。内部では、認証されたユーザーごとに名前空間を分けて保存します。他のユーザーの領域をキー名で指定することはできません。
認証情報を発行する
ダッシュボードから発行します。
- HStorageにログインします。
- ダッシュボードの設定から「S3 互換 API」を開きます。
- 接続情報のエンドポイント、バケット名、リージョンを確認します。
- 認証情報の名前を入力します。例:
backup-server、rclone-sync。 - 権限を「読み取り専用」または「読み書き」から選びます。
- 「発行」を押します。
- 表示されたアクセスキーIDとシークレットアクセスキーをコピーして、安全な場所に保存します。
シークレットアクセスキーは発行時に一度だけ表示されます。HStorageはシークレットを平文保存しません。画面を閉じたあとに再表示できないため、パスワードマネージャーやサーバー側のシークレット管理に保存してください。

aws-cliで接続する
環境変数に認証情報を設定します。アクセスキーをソースコードやシェル履歴に残さない運用にしてください。
export AWS_ACCESS_KEY_ID="発行したアクセスキーID"
export AWS_SECRET_ACCESS_KEY="発行したシークレットアクセスキー"
export AWS_DEFAULT_REGION="auto"
バケット一覧を確認します。
aws --endpoint-url https://s3.hstorage.jp s3 ls
パススタイルを使うよう、aws-cliの設定も確認してください。
aws configure set default.s3.addressing_style path
ファイルをアップロードします。
aws --endpoint-url https://s3.hstorage.jp \
s3 cp ./report.pdf s3://hstorage/reports/2026/report.pdf
一覧を取得します。
aws --endpoint-url https://s3.hstorage.jp \
s3 ls s3://hstorage/reports/2026/
ダウンロードします。
aws --endpoint-url https://s3.hstorage.jp \
s3 cp s3://hstorage/reports/2026/report.pdf ./report.pdf
rcloneで接続する
バックアップや既存ストレージからの移行にはrcloneが向いています。設定例です。
[hstorage]
type = s3
provider = Other
access_key_id = 発行したアクセスキーID
secret_access_key = 発行したシークレットアクセスキー
endpoint = https://s3.hstorage.jp
region = auto
force_path_style = true
ローカルディレクトリをHStorageへ同期します。
rclone sync ./backup hstorage:hstorage/backup --progress
読み取り専用の認証情報を使う場合、copy や sync の書き込み操作は失敗します。監査や参照用には rclone ls、rclone copy のダウンロード方向だけを使ってください。
AWS SDK for JavaScriptで接続する
Node.jsではAWS SDK v3を使えます。
import { S3Client, PutObjectCommand, ListObjectsV2Command } from "@aws-sdk/client-s3";
import { createReadStream } from "node:fs";
const client = new S3Client({
endpoint: "https://s3.hstorage.jp",
region: "auto",
forcePathStyle: true,
credentials: {
accessKeyId: process.env.HSTORAGE_S3_ACCESS_KEY_ID,
secretAccessKey: process.env.HSTORAGE_S3_SECRET_ACCESS_KEY,
},
});
await client.send(new PutObjectCommand({
Bucket: "hstorage",
Key: "invoices/2026-07.pdf",
Body: createReadStream("./invoice.pdf"),
}));
const result = await client.send(new ListObjectsV2Command({
Bucket: "hstorage",
Prefix: "invoices/",
}));
console.log(result.Contents ?? []);
forcePathStyle: true を必ず指定してください。HStorageのS3互換APIは、現在パススタイルのURLを前提にしています。
Python boto3で接続する
Pythonからはboto3を使えます。
import os
import boto3
from botocore.config import Config
s3 = boto3.client(
"s3",
endpoint_url="https://s3.hstorage.jp",
region_name="auto",
aws_access_key_id=os.environ["HSTORAGE_S3_ACCESS_KEY_ID"],
aws_secret_access_key=os.environ["HSTORAGE_S3_SECRET_ACCESS_KEY"],
config=Config(signature_version="s3v4", s3={"addressing_style": "path"}),
)
s3.upload_file("./photo.jpg", "hstorage", "photos/2026/photo.jpg")
objects = s3.list_objects_v2(Bucket="hstorage", Prefix="photos/2026/")
for obj in objects.get("Contents", []):
print(obj["Key"], obj["Size"])
boto3の upload_file は、ファイルサイズに応じてmultipart uploadを使います。大容量ファイルでも、ネットワーク断やリトライに強い転送ができます。
キー設計のルール
S3の Key はHStorage上のファイルパスとして扱われます。運用しやすいよう、日付や用途で階層を切ってください。
backup/mysql/2026/07/06/dump.sql.gz
reports/2026/07/monthly-report.pdf
media/project-a/raw/video-001.mov
セキュリティと整合性のため、次のようなキーは拒否されます。
..を含むパストラバーサル- バックスラッシュを含むパス
- 空のパスセグメント
- 制御文字を含むキー
- フォルダ階層が深すぎるキー
同じキーへの上書きは、既存ファイルの共有URLや履歴を壊さないため現時点ではサポート対象外です。ファイルを更新したい場合は、日付やバージョン番号をキーに含めて新しいオブジェクトとして保存してください。
非対応のS3機能
HStorageのS3互換APIは、ファイルの保存・取得・一覧・削除・大容量アップロードに必要な主要オブジェクトAPIを提供します。次の機能は初期リリース時点では対応していません。
- Bucket Policy / Bucket ACL / Object ACL
- Bucket Lifecycle Configuration
- Bucket Versioningの変更
- Object Lock / Legal Hold / Retention
- Object Tagging
- Bucket Notification
- Replication
- Website Hosting
- SelectObjectContent
- Glacier / RestoreObject
- Access Point / Object Lambda / S3 Express
aws-chunkedstreaming upload
非対応操作は黙って成功させません。S3 XML形式のエラー、たとえば NotImplemented、AccessDenied、BucketNotEmpty などで返します。S3クライアント側では、通常のS3エラーとして扱えます。
レート制限とリトライ
S3互換APIには、通常のWeb APIとは別のレート制限があります。アクセスキー単位とクライアントIP単位で制御し、超過時はS3 XMLエラー SlowDown とHTTP 503を返します。
SDKやrcloneを使う場合は、標準のリトライ機構を有効にしてください。自作クライアントでは、503 SlowDown を受け取ったら指数バックオフで再試行してください。短時間に大量の小さいファイルを並列投入する場合は、同時実行数を抑えると安定します。
認証情報の安全な運用
認証情報は通常のHStorageログインとは別物です。漏えいすると、権限の範囲内でS3互換APIを操作できます。
- アプリケーションコードにキーを直書きしない
- GitHubなどのリポジトリに
.envをコミットしない - 読み取り用途には
read_onlyを使う - 使わなくなったキーは無効化または削除する
- サーバーごと、用途ごとに認証情報を分ける
- 最終使用日時を定期的に確認する
削除は取り消せません。接続を一時停止したい場合は、まず無効化を使ってください。問題がなければ削除します。
既存システムとの接続先をHStorageへ向ける
S3互換APIを使うと、既存のS3連携コードを大きく書き換えずにHStorageへ接続できます。変更する値は、多くの場合エンドポイント、バケット名、リージョン、認証情報、パススタイル指定です。
バックアップサーバー、社内バッチ、rcloneによる移行、AI検索基盤のデータ取り込みなど、S3を前提にしたワークフローをHStorageに接続してください。HStorageのWeb画面、SFTP/WebDAV、S3互換APIは同じファイル管理基盤と容量制限に沿って動きます。運用チームは用途に合わせて入口を選べます。