メインコンテンツにスキップ ナビゲーションにスキップ フッターにスキップ

設定ストレージ

パスキー、マスターパスワード、リカバリーコードによるアンロックに対応したゼロ知識暗号化設定同期

設定ストレージ

設定ストレージは、デバイス間でCLI設定のゼロ知識暗号化同期を提供します。設定はコンテンツ暗号化キー(CEK)を使ってクライアントサイドで暗号化され、サーバーが平文データを見ることは一切ありません。

アンロック方法(キースロット)

ストアごとに1つのCEKがあり、LUKSのキースロットと同様に、アンロック方法ごとに個別にラップされます。どのスロットからでも同じキーを開くことができ、データを再暗号化することなくスロットの追加・削除が可能です:

方法内容備考
パスキーPRF拡張機能を備えたWebAuthnパスキー最も強力な選択肢。ハードウェアに紐づく
マスターパスワード任意に選ぶパスワードをPBKDF2-SHA256(60万回のイテレーション)でストレッチングPRF対応ハードウェアなしでも利用可能。ヘッドレスCLIエンロールメントも可能にする
リカバリーコード生成されるRC1-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX形式のコード作成時に一度だけ表示される。安全な場所に保管すること

どの方法も同じパイプラインに合流します。スロットから得られるシークレットとサーバー側が保持するシークレットを組み合わせてCEKをアンラップします。どちらか一方だけでは不十分なため、3つの方法すべてでゼロ知識の性質が保たれます。スロットのシークレットがサーバーに届くことは一切ありません。

スロットはポータルの設定ストレージページで管理します。ハードウェアのみでのアンロックを望む組織は、パスキー必須ポリシーを有効にできます。このポリシーはストア全体でパスキー以外のスロットを拒否し、失効させます。

アンロックはデバイスごとに行われます。新しいデバイスでは一度アンロックすれば、以降の日常的なCLI操作(push/pull)はパスキーに触れることもパスワードを入力することもなく動作します。

前提条件

  • 二要素認証がアカウントで有効になっていること
  • パスキー方式の場合: FIDO2セキュリティキー(例: YubiKey)、iCloud Keychain、Google Password Manager、1Password、DashlaneなどPRFサポート付きのパスキープロバイダー
  • ブラウザ: Chrome 133+、Edge 133+、Firefox 130+、またはSafari 17+

PRFの要件はパスキースロットにのみ適用されます。マスターパスワードとリカバリーコードの方式は、サポートされているブラウザであればどれでも動作します。

セットアップ

  1. サイドバーの設定ストレージに移動し、設定ストレージをセットアップをクリックします
  2. 要件チェックリストがブラウザ、2FA、セッションのステータスを確認します
  3. セットアップ開始をクリックします。パスキースロットの場合、セキュリティキーを2回タッチする必要があります:
    • 1回目のタッチ: パスキーを登録
    • 2回目のタッチ: PRFを介して暗号化キーを派生
  4. セットアップ完了, パスキーシークレットはOSのキーリングに保存されます

セットアップ後は、認証器を紛失したり非対応だったりした場合にロックアウトされないよう、設定ストレージページからマスターパスワードまたはリカバリーコードのスロットを追加しておいてください。

PRFプロバイダー互換性

プロバイダーPRFサポートプラットフォーム
YubiKey / FIDO2セキュリティキーWindows 11、macOS、Linux
iCloud KeychainmacOS 15+、iOS 18+
Google Password ManagerAndroid
1PasswordAndroid、iOS
Dashlaneクロスプラットフォーム
Bitwarden拡張機能開発中
Windows Hello非対応

ヘッドレスCLIエンロールメント

ブラウザを持たないマシン(サーバー、CIランナー、エグゼキュータデーモンなど)は、マスターパスワード方式で既存のストアにエンロールできます:

rdc config remote enable --password

要件:

  • ポータル経由で既にプロビジョニングされたマスターパスワードスロット(プロビジョニング中はブラウザがキーを保持するため、このステップ自体はヘッドレスにはできません)
  • 呼び出しを認証するための、config:enrollスコープ付きのAPIトークン

エンロールメントは読み取り操作です。CLIはスロットの公開KDFパラメータとラップされたキーを取得し、パスワードのシークレットをローカルで導出して、デバイス上でCEKをアンラップします。これによりデバイスは設定を復号・同期できるようになりますが、ストア自体は変更されません。

有効化とオフライン読み取り

rdc config remote enable はアクティブな設定をストアに接続します。ストアが空の場合、有効化によって現在のローカル設定からストアが初期化されます: ローカルのリソースがストアの最初のバージョンとしてプッシュされ、その後プルバックしてラウンドトリップが正しく行われたことを確認します。ストアに既に内容がある場合、有効化は上書きするのではなく既存の内容と整合を取ります(本当の乖離がある場合は--forceを渡さない限り中断します)。

有効化されると、設定は完全な読み取りキャッシュを保持します。ローカル設定と同じ仕組みで保存時暗号化されるため、アカウントサーバーに到達できない場合でもストアを使い続けられます:

  • 読み取りはオフラインでも機能します。 キャッシュされた内容は、キャッシュされたバージョンとタイムスタンプ(cachedVersion / cachedAt)を付与した、古さに関する警告付きでstderrに表示されます。
  • 書き込みにはサーバーが必要で、到達できない場合はフェイルクローズします。 オフライン書き込みキューはありません: サーバーに到達できない書き込みはエラーになり、対象のサーバー名を示します。書き込みコマンドが成功していれば、その変更は必ずサーバー上にあります。
  • 2台のマシンからの同時編集は、リソースバケット単位でのプル・リプレイ・リプッシュによって解決されるため、他所での同時編集が自分の変更を上書きすることはありません。

キーローテーション

ストアのCEKをローテーションすると、新しい世代の下で再ラップされます:

  • ローテーションによりリカバリーコードは常に無効化されるため、ローテーション後に新しいコードを生成して保存してください
  • マスターパスワードスロットは、ローテーションウィザード中にパスワードを再入力した場合にのみ維持されます
  • 古い世代に取り残されたスロットは、わかりにくい復号エラーで失敗するのではなく、失効(stale)として報告されます

メンバー管理

設定ストレージは組織ごとにスコープされます。メンバーはWebポータルで管理されます:

  • メンバーの表示: 設定ストレージ → メンバー
  • メンバーの追加: 現在はCLIのみ(Web UIは計画中)
  • メンバーの削除: メンバーページの削除ボタンをクリック(2FA + 再認証が必要)

安全ガードにより、最後のアクティブメンバーの削除や自分自身の削除が防止されます。

ストア内の設定はさらにチームごとにスコープされますが、このスコープはサーバー側のアクセス制御であり、暗号的な分離ではありません: 組織全体で1つのCEKがすべてのチームの設定を暗号化しており、どのチームをメンバーが読み取れるかはサーバーが強制します。

セキュリティ

  • ゼロ知識: サーバーは復号できない三重暗号化データを保存します
  • 分割キー: 復号にはスロットシークレット(クライアント)とサーバーシークレット(サーバー)の両方が必要です
  • ローテーショントークン: 各API呼び出しは新しいトークンを使用し、古いトークンは自動破棄されます
  • IPバインディング: トークンは初回使用時にIPにバインドされます
  • 即時失効: 削除されたメンバーは30秒以内にアクセスを失います

トラブルシューティング

エラー原因修正方法
PRF not supported認証器にPRF拡張機能がないYubiKey、iCloud Keychain、1Password、Dashlaneを使用するか、マスターパスワードスロットを追加してください
X25519 not supportedブラウザバージョンが古すぎるChrome 133+、Edge 133+、Firefox 130+、またはSafari 17+に更新してください
Already configured組織のストアが既に存在する/account/config-storageにアクセスして管理してください
Config storage not configuredサーバーにblobストレージがない管理者に連絡してR2/RustFSを設定してください
Token expired24時間アクティビティがない任意の設定ストレージコマンドを実行してリフレッシュしてください
Cannot remove last memberストアが永久にロックされる先に別のメンバーを追加してください
Stale slotスロットが直近のキーローテーションより古いスロットを再登録してください(リカバリーコードはローテーションのたびに再生成が必要です)

関連