シーケンス緩和
シーケンス緩和は、APIと通信する認証済みクライアントのリクエストパターンを強制することを可能にします。この機能は、シーケンス分析を支えるのと同じ基盤システムを利用しています。
シーケンスルールを使用して、APIクライアントの既知の動作のセットを確立できます。
例えば、銀行の資金移動中に行われるAPIリクエストが、以下の時間順に従うことを期待するかもしれません:
| 順序 | メソッド | パス | 説明 |
|---|---|---|---|
| 1 | GET | /api/v1/users/{user_id}/accounts | user_id はアクティブなユーザーです。 |
| 2 | GET | /api/v1/accounts/{account_id}/balance | account_id はユーザーのアカウントの1つです。 |
| 3 | GET | /api/v1/accounts/{account_id}/balance | account_id はユーザーに属する別のアカウントです。 |
| 4 | POST | /api/v1/transferFunds | これは、資金を移動するアカウント、資金を移動する先のアカウント、および移動する金額の詳細を含むリクエストボディです。 |
APIユーザーが GET /api/v1/users/{user_id}/accounts を GET /api/v1/accounts/{account_id}/balance の前にリクエストし、さらに GET /api/v1/accounts/{account_id}/balance を POST /api/v1/transferFunds の前にリクエストすることを強制したいかもしれません。
シーケンス緩和を使用すると、2つの新しいシーケンス緩和ルールでそのリクエストパターンを強制できます。
APIに対する動作を時間をかけて強制するために、シーケンスルールを2つの異なる方法で作成できます。シーケンスルールは、ユーザーが特定のAPI呼び出しの既知のシーケンスを実行するのを防ぐ(負のセキュリティモデルとして知られる)か、ユーザーが期待を超えたAPIリクエストを行うのを防ぐ(正のセキュリティモデルとして知られる)ことができます。
銀行の資金移動の例では、ユーザーが POST /api/v1/transferFunds の前に GET /api/v1/accounts/{account_id}/balance をリクエストすることを強制することは、ユーザーがアカウント残高を確認した後にのみ資金移動を行うことができるため、正のセキュリティモデルと見なされます。
負のセキュリティモデルは、アプリケーションの標準から外れた悪用行為を見た場合に役立ち、正のセキュリティモデルを実装するために調査している間にリクエストを停止する必要がある場合に有用です。
例えば、他のユーザーのプロフィールを GET /api/v1/users/{var1}/profile を介して反復することを許可する認可バグがあり、その後ユーザーが不正な資金移動を試みる場合、GET /api/v1/users/{var1}/profile から POST /api/v1/transferFunds までのシーケンスをブロックまたはログするルールを作成できます。
- Cloudflareダッシュボード ↗にログインし、アカウントとドメインを選択します。
- セキュリティ > APIシールド > APIルールに移動します。
- シーケンスルールを作成を選択します。
- ルールに名前を付けます。
- 開始エンドポイントを選択します。これは、APIを使用する際にユーザーが最初にリクエストフローでヒットすることを期待するエンドポイントです。
- ホスト名を選択して、そのホスト名のエンドポイントのリストを表示します。
- エンドポイントを選択します。
- 開始エンドポイントとして設定を選択します。
- 最終エンドポイントを選択します。これは、保護対象のエンドポイントです。
- ホスト名を選択して、そのホスト名のエンドポイントのリストを表示します。
- エンドポイントを選択します。
- 終了エンドポイントとして設定を選択します。
- セキュリティモデルタイプに対応するアクションを選択します:
-
許可:これは、API上の承認されたシーケンスを定義することによって正のセキュリティモデルを作成します。
-
ログ / ブロック:これは、API上の既知の悪いシーケンスを定義することによって負のセキュリティモデルをテストまたは強制します。
-
- ルールを作成を選択します。
ルールリストでルールを選択することで、既存のルールを編集するオプションもあります。ルールの名前を変更したり、開始および終了エンドポイントの順序を調整したり、エンドポイントを変更したり、ルールのアクションを変更したりできます。
リスト上のルールを選択してドラッグすることで、ルールの優先順位を変更できます。
また、ルールの三点リーダーを選択し、**移動先…**を選択することで、結果のモーダルウィンドウで新しい優先順位を設定することもできます。
APIエンドポイントへのリクエストを追跡するには、それらを エンドポイント管理 に追加する必要があります。エンドポイント管理にエンドポイントを追加するには、APIディスカバリー、スキーマ検証、または 手動で Cloudflareダッシュボードを通じて行います。
APIシールドは、構成された セッション識別子 を使用してセッションを追跡します。シーケンス緩和が期待通りに機能するためには、APIの各エンドユーザーごとにユニークなセッション識別子を構成する必要があります。
APIシールドは現在、セッション識別子によって識別された各APIユーザーによる最後の10のリクエストされたエンドポイントを保存します。シーケンス緩和は、シーケンスを構築する際に同じエンドポイントへのリクエストを重複排除します。
例えば、上記の元の シーケンス例 では、シーケンス緩和は以下のシーケンスを保存します:
GET /api/v1/users/{user_id}/accountsGET /api/v1/accounts/{account_id}/balancePOST /api/v1/transferFunds
シーケンス緩和は、GET /api/v1/accounts/{account_id}/balance への2つのリクエストを重複排除し、1つのリクエストとして保存しました。
シーケンス緩和ルールには、10分の振り返り期間があります。あるパスが別のパスの前にリクエストされる必要があるルールを作成し、ユーザーが各パスをリクエストする間に10分以上経過した場合、ルールは一致しません。
シーケンス緩和は現在、クローズドベータ版であり、エンタープライズ顧客のみが利用可能です。ベータ版に含まれたい場合は、アカウントチームに連絡してください。