GitHub
Draft

Single-User Instance

1インスタンス1ユーザーの設計パターンに関する仕様です。 Yurucommu は個人が自分のために立てる self-host な ActivityPub SNS であり、 その personal / single-operator なインスタンスの設計指針を定義します。

概要

Single-User Instanceは、1つのインスタンスを1人のユーザーが所有・運用するモデルです。 データの自己管理、プライバシーの確保、運用コストの最小化を目的としています。

メリット

アーキテクチャ

アクター構成

Single-User Instanceには通常1つのメインアクターが存在します:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Person",
  "id": "https://alice.example/users/alice",
  "preferredUsername": "alice",
  "name": "Alice",
  "inbox": "https://alice.example/users/alice/inbox",
  "outbox": "https://alice.example/users/alice/outbox",
  "followers": "https://alice.example/users/alice/followers",
  "following": "https://alice.example/users/alice/following"
}

WebFinger

@tako@example.com のようなアドレスでオーナーアクターを特定できます。 Yurucommu の Single-User Instance では、既存のローカル actor 名はその actor に解決し、 存在しない任意の acct:<name>@host は同じオーナーアクターへの alias として解決します。

GET /.well-known/webfinger?resource=acct:any@example.com

{
  "subject": "acct:any@example.com",
  "aliases": ["https://example.com/ap/users/tako"],
  "links": [
    {
      "rel": "self",
      "type": "application/activity+json",
      "href": "https://example.com/ap/users/tako"
    },
    {
      "rel": "http://webfinger.net/rel/profile-page",
      "type": "text/html",
      "href": "https://example.com/users/tako"
    }
  ]
}

認証

Yurucommu の標準運用では、複雑なユーザー登録フローは持たず、 AUTH_PASSWORD_HASH に設定した単一パスワードでオーナーとしてログインします。

対応する認証方式

方式 説明 適用場面
パスワード認証 AUTH_PASSWORD_HASH による単一パスワード認証 標準運用
OAuth 設定済みプロバイダを使うログイン 外部 ID 連携が必要な場合

セッション管理

ログイン状態はセッションCookieで管理します。 Single-User Instanceでは、長期間のセッション有効期限を設定しても問題ありません。

初期セットアップ

現行実装では、ブラウザ上の初回セットアップ画面からユーザー名・表示名・パスワードを登録する flow は提供しません。 パスワードは deploy 時に AUTH_PASSWORD_HASH として設定します。

初回ログインフロー

  1. インスタンスをデプロイ
  2. AUTH_PASSWORD_HASH を secret として設定
  3. 初回アクセス時は通常のログイン画面を表示
  4. 正しいパスワードでログイン
  5. オーナー actor が未作成の場合、固定 username tako / 表示名 tako で作成
  6. キーペア(公開鍵/秘密鍵)を自動生成

インスタンス情報

NodeInfoを通じてインスタンス情報を公開します。 Single-User Instanceであることを示すメタデータを含めることができます。

{
  "version": "2.1",
  "software": {
    "name": "yurucommu",
    "version": "1.0.0"
  },
  "protocols": ["activitypub"],
  "usage": {
    "users": {
      "total": 1,
      "activeMonth": 1,
      "activeHalfyear": 1
    },
    "localPosts": 42
  },
  "openRegistrations": false,
  "metadata": {
    "singleUser": true
  }
}

セキュリティ考慮事項

HTTP Signatures

ActivityPubの連合通信にはHTTP Signaturesを使用します。 秘密鍵は安全に保管する必要があります。

HTTPS必須

本番環境では必ずHTTPSを使用してください。 ActivityPubの仕様上、HTTPSが推奨されています。

レート制限

単一ユーザーでも、外部からのリクエストにはレート制限を設けてください。 DoS攻撃の防止に役立ちます。

運用ガイドライン

バックアップ

定期的なバックアップを推奨します:

更新

セキュリティアップデートは速やかに適用してください。 Single-User Instanceは管理者=ユーザーなので、更新タイミングを柔軟に決められます。

参考