...
Cloudflareがすべての顧客向けにセルフマネージドOAuthをリリース
Cloudflareがすべての顧客にOAuthを公開
Cloudflareの新しいセルフマネージドOAuth機能により、あらゆるCloudflareアカウントが独自のOAuthアプリケーションを作成できるようになります。これにより、開発者は、長期間有効なAPIトークンに依存する代わりに、標準的で、取り消し可能、かつ同意ベースのCloudflare APIへのアクセス方法を利用できるようになります。
なぜユニバーサルなOAuthが重要なのか
- セキュリティの向上 – ユーザーは明確な同意画面を確認でき、ダッシュボードからアクセス権限を取り消すことができ、フィッシング攻撃から保護されます。
- より優れた開発者体験 – スコープ付きアクセスは、現代的なSaaSや内部プラットフォームのワークフローに適合し、脆弱なAPIトークン管理の必要性を排除します。
- エコシステムの成長 – OAuthを公開することで、サードパーティの統合、エージェンティックなツール、およびカスタム自動化パイプラインの障壁を取り除きます。
OAuthエンジンを安全にスケールさせる
CloudflareのオリジナルのOAuth実装は、オープンソースの Hydra エンジンを使用していました。これは、少数の手動でオンボードされたパートナーには十分なものでした。しかし、開発者プラットフォームが拡大するにつれ、チームは3つの重要なギャップを認識しました。
- 権限モデル – 初期の同意フローでは、アプリケーションのアイデンティティと、付与されたスコープが明確に分離されていませんでした。
- 取り消し体験 – ユーザーはアプリのアクセス権限を簡単に確認したり、取り消したりすることができませんでした。
- 悪用防止策 – エンジンには、大規模かつ自動化された利用に対する堅牢な保護策が不足していました。
これらのギャップに対処するため、Cloudflareは同意UIを更新し、ダッシュボードでの取り消しコントロールを追加し、アプリの所有権をユーザーに可視化しました。
Hydra 1.X → 2.X へのアップグレード戦略
2段階のアップグレード計画
- ステップ 1 – 1.X への移行 – 最新の1.Xリリースに移行し、スキーマ移行に
CREATE INDEX CONCURRENTLYを使用するように書き換え、ロック競合を避けるためにSELECT *クエリを明示的なカラムリストに置き換えます。 - ステップ 2 – 2.X への移行 – 大規模なスキーマ変更を処理しながら、ダウンタイムを回避するためにブルーグリーンアーキテクチャを採用します。
ブルーグリーン移行の詳細
- 書き込み有効化アプローチ – すべての書き込みを無効にする代わりに、CloudflareはトークンのTTLを数時間に延長し、既存のトークンが切り替えの間に有効であり続けるようにしました。
- 取り消しリプレイキュー – Cloudflare Queueが移行中の取り消しイベントをキャプチャします。切り替え後、キューを空にして、取り消されたはずのイベントをリプレイすることで、アクセス権限の誤った再付与を防ぎます。
実行結果
1.X アップグレード
- ユーザーへの影響なしで移行が完了しました。
- 新しい、より厳格なリフレッシュトークンの無効化により、時折トークンチェーンの無効化が発生しました。Cloudflareは、Workerにリフレッシュトークンを結合するレイヤーを追加し、Hydra 2.Xの構成可能な猶予期間を活用することで、これを軽減しました。
2.X アップグレード
- リクエストボリュームが最も低い時間帯に移行ウィンドウを選択しました。合計実行時間は約3時間でした。
- 切り替え後、有効なOAuthポリシーデータが誤って削除されたため、403エラーが急増しました。この問題は、データを復元し、認可ロジックを改善することで解決されました。
- ロールアウト後、クライアント固有の微調整が迅速に行われました。
アップグレード後のパフォーマンス向上
| メトリック | アップグレード前 | アップグレード後 | Δ |
|---|---|---|---|
| API P95 レイテンシ | 185 ms | 101 ms | -45 % |
| RSS メモリ | 888 MB | 763 MB | -14 % |
| Go ヒープ割り当て | 449 MB | 271 MB | 764 MB |
| Goroutine カウント | 4,015 | 3,076 | -23 % |
| CPU 使用率 | 0.67 cores | 0.67 cores | -37 % |
| CPU 使用率 | 1.07 cores | 0.67 cores | -37 % |
| CPU 使用率 | 0.67 cores | 0.67 cores | -37 % |
| CPU 使用率 | 0.67 cores | 0.67 cores | -37 % |
| CPU 使用率 | 0.67 cores | 0.67 cores | -37 % |
| CPU 使用率 | 0.67 cores | 0.67 cores | -37 % |
| CPU 使用率 | 0.67 cores | 0.67 cores | -37 % |
| CPU 使用率 | 0.67 cores | 0.67 cores | -n/a |
| CPU 使用率 | 0.67 cores | ||
| CPU 使用率 | 0.67 cores | ||
| CPU 使用率 | REQUEST_ERROR | ||
| CPU 使用率 | 0,67 cores | ||
| CPU | CPU 使用率 | 0.67 cores | |
| CPU | 0.67 cores | ||
| CPU | 0.67 cores | ||
| CPU | -n/a | ||
| CPU | 0.67 cores | ||
| CPU | 0,67 cores | ||
| CPU | 0,67 cores | ||
| CPU | 0,67 cores | hought: 1. The user wants a JSON translation of a Markdown document from English to Japanese. 2. The JSON must follow a specific schema: `{ |