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側では未完了セッションとパート情報を管理し、容量制限の回避や中途半端なアップロードの残存を防ぎます。

HStorage S3互換APIの接続情報画面

利用条件

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 を外部に見せます。内部では、認証されたユーザーごとに名前空間を分けて保存します。他のユーザーの領域をキー名で指定することはできません。

認証情報を発行する

ダッシュボードから発行します。

  1. HStorageにログインします。
  2. ダッシュボードの設定から「S3 互換 API」を開きます。
  3. 接続情報のエンドポイント、バケット名、リージョンを確認します。
  4. 認証情報の名前を入力します。例: backup-serverrclone-sync
  5. 権限を「読み取り専用」または「読み書き」から選びます。
  6. 「発行」を押します。
  7. 表示されたアクセスキーIDとシークレットアクセスキーをコピーして、安全な場所に保存します。

シークレットアクセスキーは発行時に一度だけ表示されます。HStorageはシークレットを平文保存しません。画面を閉じたあとに再表示できないため、パスワードマネージャーやサーバー側のシークレット管理に保存してください。

S3互換APIの認証情報発行と管理画面

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

読み取り専用の認証情報を使う場合、copysync の書き込み操作は失敗します。監査や参照用には rclone lsrclone 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-chunked streaming upload

非対応操作は黙って成功させません。S3 XML形式のエラー、たとえば NotImplementedAccessDeniedBucketNotEmpty などで返します。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は同じファイル管理基盤と容量制限に沿って動きます。運用チームは用途に合わせて入口を選べます。