HN 日本語サマリー

← 一覧へ戻る
インフラ・DevOps

リレーを保護する

Protect Your Relays (iroh.computer)

35 pointsby surprisetalk11 コメント

要約

Iroh Servicesは、クライアント配布時に含まれるリレーURLが悪用されるリスクに対応するため、デフォルトでマネージドリレーの認証を必須としました。これにより、プロジェクトのAPIキーから発行されたトークンを持つエンドポイントのみがリレーを利用できるようになり、URLが漏洩しても不正利用を防ぐことができます。この変更は2026年6月以降にデプロイされたリレーに適用され、それ以前にデプロイされたリレーは互換性のために引き続きオープンなままですが、設定から認証を有効化することも可能です。

全文翻訳

デバイス同士が直接接続できない場合、リレーが接続を仲介し、データの流れを維持します。リレーが誰でも受け入れる場合、そのURLを知る者は誰でもリレーを介してトラフィックを送信できます。そして、そのURLは、配布される各クライアントに含まれており、接続確立を監視している人には見えます。このため、Iroh Servicesのマネージドリレーはデフォルトで認証されるようになりました。プロジェクトのAPIキーによって発行されたトークンを持つエンドポイントのみが利用できます。これは特別な設定は不要です。既に iroh_services プリセットを通じて接続している場合、エンドポイントは自動的に認証されます。 ただし、これは2026年6月以降にデプロイされたリレーのデフォルト設定です。それ以前にリレーをデプロイした場合、既存のエンドポイントに影響を与えないように、オープンなままになります。これを有効にするには、リレーの認証設定(Relays > Settings)にアクセスしてください。 問題点:リレーURLは取り消せない認証情報です。 誰かが公開リポジトリ、クライアントバンドル、またはスクリーンショットであなたのリレーURLを見つけ、インフラがダウンするまでスパムを送り始めたとします。あなたは自身でリレーを起動するのに労力を費やしたのに、他人のトラフィックがあなたのトラフィックと競合します。リレーには、あなたがレンタルしているサーバー、デスクの下のVM、または私たちが提供する容量であっても、有限の帯域幅と接続スロットがあります。URLを見つけた他の誰かがそれを使用しています。 自身でリレーを実行している場合、独自の認証スキームを構築できます。iroh はそれについて意見を述べません。しかし、私たちのマネージドリレーを使用している場合、今月まではアクセスを簡単に制御する方法を提供していませんでした。今回、認証パズルの最初のピースであるAPIキーをリリースしました。APIキーは無制限に発行、ローテーション、削除できます。これらは、メトリクスをプッシュするために既に利用しているAPIキーと同じものです。Iroh Servicesを利用しているなら、既に持っています。 専用リレーをデプロイすると、30日間無料です。 仕組み すべてのリレー接続は、WebSocketにアップグレードするのと同じHTTPハンドシェイクから始まります。認証は標準ヘッダー Authorization: Bearer に含まれて送信されます。 トークンは署名付きケーパビリティトークンです。以下の4つの情報を含んでいます: - 発行者:あなたのプロジェクトのAPIキー - 対象:提示するエンドポイントの公開鍵 - 許可内容:リレーを使用する権限のみ - 有効期限:短い時間枠に設定可能。漏洩した場合でも、長期間使用されることはありません。 エンドポイントが接続すると、irohのリレーハンドシェイクは、まずエンドポイントがその鍵を実際に所有していることを証明します。これは、認証されているかどうかにかかわらず、すべての接続に対して行われます。その後、リレーはトークンをチェックします:署名は有効か、期限切れではないか、リレー使用を許可しているか、この特定のエンドポイント向けか、そしてあなたのプロジェクトのAPIキーのいずれかによって発行されたものか? すべての回答が「はい」の場合、エンドポイントは許可されます。 これにより、気に入っている2つの特性が生まれます。 漏洩したURLは無害です。APIキーによって発行されたトークンなしでは、それにダイヤルしても何も得られません。漏洩したトークンは接続を可能にしますが、なりすましはできません。トークンは特定のエンドポイントの公開鍵向けであるため、別のエンドポイントから提示しても失敗します。ハンドシェイクは、そのエンドポイントの秘密鍵の所有権を証明する必要がありますが、トークンだけではそれを与えません。 失効は同じパスをたどります。あなたのAPIキーはリレーが認識するIDであるため、キーをローテーションまたは削除すると、それによって発行されたトークンの処理が停止し、それらのトークンに乗っている接続は切断されます。 エンドポイントの接続 これらを手動で組み立てる必要はありません。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()? // IROH_SERVICES_API_SECRET を読み取る .build()?; // エンドポイントは認証されたマネージドリレーに到達するようになります。 let endpoint = Endpoint::bind(preset).await?; Ok(()) } ``` あなたのAPIシークレットはプロセスから離れることはありません。プリセットはそれを使用してリレー範囲のトークンを導き出し、その導き出されたトークンがリレーに送信されます。`.relays(...)` をプロジェクトダッシュボードのリレーURLにポイントし、`IROH_SERVICES_API_SECRET` を設定すれば完了です。 次のステップ 現在、各エンドポイントは同じ機能を持っています。将来的には、異なるスコープを持つトークンを発行する機能を追加し、一部のエンドポイントにより多くの権限を付与できるようになります。さらに、エンドポイントごとに個別にアクセスを失効させることを許可し、ダッシュボード外でこれらすべてを実行するためのAPIを提供します。 これらに興味がある場合は、Discordでご連絡ください。現在リレーを実行している場合は、少なくとも2つの異なるリージョンにデプロイして、1つのリージョンがダウンしてもエンドポイントが孤立しないようにしてください。マネージドリレーガイドで完全なセットアップを説明しています。 質問がある場合、またはリレー設定について話し合いたい場合は、Discordに参加するか、通話のスケジュールを設定してください。リレーについて話すのが大好きで、最大限に活用していただけるようにしたいと考えています。 Irohは、すぐに機能するデバイス間ネットワーキングライブラリです。必要な機能を取得するために、既製のプロトコルのエコシステムから構成するか、単純なパイプのクリーンな抽象化で完全にカスタム化します。Irohはオープンソースであり、既に何十万ものデバイスで本番稼働しています。 開始するには、ドキュメントをご覧になるか、コードに直接飛び込むか、Discordチャンネルで私たちとチャットしてください。