Iroh マネージドリレーがデフォルトでAPIキー認証を要求するように
Irohのマネージドリレーは、プロジェクトのAPIキーから発行された署名付きケイパビリティトークンで、すべての接続を認証するようになりました。リレーURLが漏洩しても、インフラへのオープンアクセスにはなりません。

Irohはマネージドリレーのデフォルトを変更しました。2026年6月以降、Iroh Servicesを通じてデプロイされるすべてのリレーは認証を要求します。この変更はiroh_servicesプリセットを使用している人には自動的に適用され、設定の切り替えや追加コードは不要です。古いリレーはオプトインするまでオープンのままなので、既存のエンドポイントは壊れません。
動機は単純明快です。リレーURLは、配布するすべてのクライアントに組み込まれ、接続ハンドシェイクを覗き見る誰にでも見える資格情報です。リレーが誰でも受け入れる場合、そのURLを見つけた誰もがトラフィックを送り込むことができ、有限の帯域幅と接続スロットをめぐって自分のトラフィックと競合します。URLをローテーションしても、すべてのクライアントに組み込まれているため役に立ちません。
認証の仕組み
すべてのリレー接続はHTTPハンドシェイク(WebSocketにアップグレードされるものと同じ)から始まります。認証は標準ヘッダーに含まれます:
Authorization: Bearer <token>
トークンは、4つの情報を含む署名付きケイパビリティトークンです:
- 発行者: プロジェクトのAPIキー
- 主体: それを提示するエンドポイントの公開鍵
- 許可: リレーを使用する権限のみ
- 有効期限: 短い時間枠で、侵害されたトークンはすぐに無効になります
エンドポイントが接続すると、リレーはまずエンドポイントが実際に秘密鍵を所有していることを証明します(これは認証の有無にかかわらず、すべての接続で行われます)。次に、トークンの署名、有効期限、許可、主体の一致、発行者を検証します。すべてのチェックが成功した場合のみ、エンドポイントは受け入れられます。
この設計からは、2つの優れた特性が生まれます:
- 漏洩したURLは無害です。APIキーからのトークンがなければ、リレーにダイヤルしても何も得られません。
- 漏洩したトークンは接続を可能にしますが、なりすましはできません。トークンは特定のエンドポイント公開鍵にバインドされているため、別のエンドポイントから提示すると失敗します。ハンドシェイクは、そのエンドポイントの秘密鍵の所有証明を依然として要求します。
失効も同様にクリーンです。APIキーはリレーが認識するアイデンティティであるため、キーをローテーションまたは削除すると、それが発行したトークンの受け入れが停止され、それらのトークンを使用しているアクティブな接続は切断されます。
エンドポイントの接続
トークンを手動で組み立てる必要はありません。iroh_servicesプリセットがAPIシークレットからトークンを生成し、すべてのリレー接続に添付します。コードは、通常書くであろう数行と同じです:
use iroh::Endpoint;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let preset = iroh_services::preset()
.relays(["https://us-east1.your-project.iroh.link"])?
.api_secret_from_env()? // reads IROH_SERVICES_API_SECRET
.build()?;
let endpoint = Endpoint::bind(preset).await?;
Ok(())
}
APIシークレットはプロセスから出ることはありません。プリセットはそこからリレースコープのトークンを導出し、その導出されたトークンだけがリレーに送信されます。.relays(...)をプロジェクトのリレーURLに向け、IROH_SERVICES_API_SECRETを設定すれば完了です。
今後の予定
現在、すべてのエンドポイントは同じケイパビリティを取得します。Irohは、スコープ付きトークン(エンドポイントごとに異なる権限)、エンドポイントごとの失効、およびダッシュボード外でこれらを管理するAPIを追加する予定です。今のところ、アドバイスは変わりません。単一のリージョン障害でエンドポイントが孤立しないように、異なるリージョンで少なくとも2つのリレーを実行してください。
漏洩したURLは無害です。APIキーから発行されたトークンがなければ、ダイヤルしても何も得られません。
ディスカッション
0 件のコメント
最初のコメントを投稿しましょう。