速度制限の構成
レート制限ル _ールの旧バージョンは_非推奨となりました。 以前のバージョンで有効だったルールは、今後機能しなくなります。
速度制限 (エンタープライズ・プランのみ) は、サービス妨害攻撃、総当たりログイン攻撃や、アプリケーション層をターゲットにしたその他の不正な行為から保護します。
コンソールでのカスタムレート制限ルールの作成
カスタムレート制限ルールを作成するには、以下の手順に従ってください
- Cloud Internet Services (CIS) コンソールで、[ セキュリティ ] > [ レート制限 ] の順に選択し、 [ルールの作成] をクリックします。
- ルールの名前を入力します。
- ルールの照合条件を定義します:
- リクエストフィールド(URIパス、 HTTP メソッド、ヘッダーなど)を選択してください。
- 演算子(例:等号、包含、一致など)を選択してください。
- 値を入力または選択してください。
- オプション:より複雑な一致ロジックを実現するには、式ビルダーを使用してカスタム式を作成してください。
- オプション: 「And 」および「 Or 」演算子を使用して複数の条件を組み合わせ、複合ルールを作成します。
- オプション:レート制限ルールでオリジンサーバーに到達したリクエストのみを考慮させたい場合は、「 キャッシュステータス 」を無効にしてください。 デフォルトでは、キャッシュされたリクエストもレート計算の対象に含まれます。
- 「 同じ特徴を持つ 」で、 Cloud Internet Services (CIS) が一致するリクエストを識別するために使用する特性を選択します。 一般的なオプションには、IPアドレス、NAT対応のIPアドレス、セッション、ヘッダー、クッキー、クエリ文字列、 JA3 フィンガープリントなどがあります。
- オプション:カスタム集計式を定義するには:
- 「 カスタム集計式を使用する」 を有効にします。
- 計算式を入力してください。 デフォルトでは、カウント式はルール式と一致します。 カスタム集計式を使用すると、リクエストの照合方法とは異なる方法でリクエストをカウントすることができます。
- 「 レートが上限を超えた場合」 では、リクエストのしきい値を設定してください:
- 許可されるリクエストの最大数を入力してください。
- Cloud Internet Services (CIS) がリクエスト率を評価するために使用する期間を選択します(例:10 秒、1 分、1 時間など)。
- 「アクションを実行」 で、しきい値を超えたときに適用するアクションを選択します。 オプションには、「 ブロック (リクエストを拒否)」、「 チャレンジ ( CAPTCHA を提示)」、「 JS チャレンジ ( JavaScript チャレンジを提示)」、 「ログ (アクションを行わずにログに記録)」、または「 マネージド・チャレンジ (クライアントの特性に基づいて適切なチャレンジを提示)」があります。 たとえば、 「Block」 を選択すると、 Cloud Internet Services (CIS) は、設定されたレート制限を超えるリクエストを拒否するようになります。
- 「 次の動作」で、 緩和策の動作を選択してください:
- 緩和措置のタイムアウトを選択して、しきい値を超えた後、指定した期間(たとえば、1分、10分、または1時間)リクエストをブロックするように設定します。
- レート制限アドオンを利用しているエンタープライズのお客様は、設定されたアクションを適用する代わりに、「 設定された最大レートを超えるリクエストを制限する 」を選択して、リクエストを制限することができます。
- [ 適用先] で、ルールの順序を選択します。 ルールは順序通りに評価されるため、一般的なルールよりも具体的なルールを先に配置してください。
- 「デプロイ」 をクリックします。
速度制限ルールが作成され、デプロイされました。 このルールは直ちに有効となり、設定に従ってトラフィックの監視が開始されます。
コンソールでのレート制限ルールの更新
レート制限ルールを更新するには、以下の手順を実行してください
- Cloud Internet Services (CIS) コンソールで、[ セキュリティ ] > [ レート制限 ] の順に選択します。
- レート制限ルールセットのテーブルで、変更したいルールを探してください。
- 行の右側にある「アクション」メニューをクリックし、「 編集 」を選択します。
- 必要に応じてルールの設定を変更してください。
- 「 保存 」をクリックしてルールを更新してください。
コンソールでのレート制限ルールの削除
コンソールでレート制限ルールを削除するには、以下の手順に従ってください
- Cloud Internet Services (CIS) コンソールで、[ セキュリティ ] > [ レート制限 ] の順に選択します。
- 「レート制限ルール」テーブルで、削除したいルールを探してください。
- そのルールの「アクション」メニューをクリックし、「 削除 」を選択します。
- 確認メッセージを確認し、「 削除 」をクリックして確定してください。
応答の構成
リストされているアクションから選択し、タイムアウト期間を指定します。 この場合、タイムアウトとはアクションの実行が禁止されるまでの期間のことです。 60秒のタイムアウトとは、その処理が60秒間適用されることを意味します。
| アクション | 説明 |
|---|---|
| ブロック | しきい値を超えると 429 エラーを発行します |
| チャレンジ | ユーザーは、先に進む前に、 Google の reCAPTCHA チャレンジに合格する必要があります。 正常に実行された場合、要求は受け入れられます。 そうでない場合、要求はブロックされます。 |
| JS チャレンジ | ユーザーは、先に進む前に「 JavaScript 」チャレンジに合格する必要があります。 正常に実行された場合、要求は受け入れられます。 そうでない場合、要求はブロックされます。 |
| シミュレート | このオプションを使用して、他のいずれかのオプションをご使用の稼働環境に適用する前に、ルールをテストできます。 |
APIのレート制限ルールのエントリポイントの取得
すべてのレート制限ルールAPI操作には、レート制限ルールフェーズ RULESET_ID のエントリポイントルールセットが必要です。 このエントリポイントのルールセットは、すでに存在している場合もあれば、存在しない場合は作成する必要がある場合もあります。
レート制限ルールのエントリポイントルールセットを取得するには、次の手順に従ってください:
-
正しい変数を使用して API 環境をセットアップします。
-
API コマンドで使用する以下の値を変数に格納します。
CRN:サービス・インスタンスの完全な URL-encoded Cloud Resource Name(CRN)。ZONE_ID: ドメイン ID。 -
すべての変数の初期化が完了したら、エントリポイントのルールセットを取得します:
curl -X GET "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/phases/http_ratelimit/entrypoint" \ --header "X-Auth-User-Token: Bearer <API_TOKEN>" \ --header "Content-Type: application/json"ルールセットIDは、成功したリクエストのレスポンスにある。 前述の呼び出しが404 Not Found応答を返した場合は、以下のAPIを使用して、レート制限ルールフェーズのエントリポイントルールセットを作成します:
curl -x POST https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets \ --header "X-Auth-User-Token: Bearer <API_TOKEN>" \ --header "Content-Type: application/json" \ --data '{ "name": "Zone-level phase entrypoint", "kind": "zone", "description": "Rate-limting rule entrypoint ruleset.", "phase": "http_ratelimit" }'
API を使用したレート制限ルールの作成
APIを使用してレート制限ルールを作成するには、以下の手順に従ってください:
-
正しい変数を使用して API 環境をセットアップします。
-
API コマンドで使用する以下の値を変数に格納します。
CRN:サービス・インスタンスの完全な URL-encoded Cloud Resource Name(CRN)。ZONE_ID: ドメイン ID。RULESET_ID:レート制限ルールのエントリポイントルールセットのID。 -
すべての変数の初期化が完了したら、レート制限ルールを作成します:
curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \ --header "X-Auth-User-Token: Bearer <API_TOKEN>" \ --header "Content-Type: application/json" \ --data '{ "description": "My rate limiting rule", "expression": "(http.request.uri.path matches \"^/api/\")", "action": "block", "ratelimit": { "characteristics": [ "cf.colo.id", "ip.src" ], "period": 60, "requests_per_period": 100, "mitigation_timeout": 600 } }'
APIによるレート制限ルールの更新
APIを使用して既存のレート制限ルールを更新するには、以下の手順に従ってください:
-
正しい変数を使用して API 環境をセットアップします。
-
API コマンドで使用する以下の値を変数に格納します。
CRN:サービス・インスタンスの完全な URL-encoded Cloud Resource Name(CRN)。ZONE_ID: ドメイン ID。RULESET_ID:レート制限ルールのエントリポイントルールセットのID。RULE_ID:変更するレート制限ルールのID。 -
すべての変数の初期化が完了したら、レート制限ルールを更新します:
curl -X PATCH "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules/$RULE_ID" \ --header "X-Auth-User-Token: Bearer <API_TOKEN>" \ --header "Content-Type: application/json" \ --data '{ "enabled": true, "description": "rate limit IPs for API" }'
APIによるレート制限ルールの削除
APIを使用して既存のレート制限ルールを削除するには、以下の手順に従ってください:
-
正しい変数を使用して API 環境をセットアップします。
-
API コマンドで使用する以下の値を変数に格納します。
CRN:サービス・インスタンスの完全な URL-encoded Cloud Resource Name(CRN)。ZONE_ID: ドメイン ID。RULESET_ID:レート制限ルールのエントリポイントルールセットのID。RULE_ID:変更するレート制限ルールのID。 -
すべての変数の初期化が完了したら、レート制限ルールを削除してください:
curl -X DELETE "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules/$RULE_ID" \ --header "X-Auth-User-Token: Bearer <API_TOKEN>" \ --header "Content-Type: application/json"
HTTP ステータスを使用して、レート制限ルールとレスポンスの一貫性を検証する
ウェブアドレスやサービスにレート制限ルールを適用する場合、ルールが正しく適用されているかどうかを確認することが重要です。 簡単なテストで、システムが以下の適切な HTTP ステータスコードで応答することを確認する:
200 OKまたは404 Not Found429 Too Many Requestsレート制限を超えた場合
レート制限ルールとレスポンスの一貫性を検証するには、以下のコマンドを実行する:
for i in {1..N}; do curl -s -o /dev/null -w "%{http_code}\n" <your-target-url>; done
コマンド・オプション
N- 送信したいリクエストの数。
your-target-url- URL テストしたいサービスやエンドポイントの。
このコマンドは、各リクエストに対して HTTP ステータスコードへの出力を提供し、レートリミットのしきい値にいつ達 したかを観察できるようにする。
CLI からレート制限ルールを作成する
CLI からレート制限ルールを作成するには、以下の手順に従ってください
-
CLI 環境をセットアップします。
-
CLIからアカウントにログインしてください。 パスワードを入力すると、システムから、使用するアカウントと地域を入力するよう求められます:
ibmcloud login --sso -
レート制限ルールを作成するには、次のコマンドを実行してください:
ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID --url URL [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]また、JSONファイルまたはJSON文字列を直接指定することで、レート制限ルールを作成することもできます:
ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]
コマンド・オプション
DNS_DOMAIN_ID- DNSドメインのID。 必須。
--json- レート制限ルールを記述するために使用されるJSONファイルまたはJSON文字列。
- JSON データで必須となるフィールドは、
match、threshold、period、およびactionです:match: レート制限ルールが、どのトラフィックを閾値の算定対象とするかを決定します。request: 「 HTTP 」というリクエストに一致します。methods: HTTP メソッドは、[POST,PUT]のサブセットである場合もあれば、[_ALL_]のすべてである場合もあります。 レート制限ルールを作成する際、このフィールドは必須ではありません。 有効な値は、GET、POST、PUT、DELETE、PATCH、HEAD、_ALL_です。schemes: HTTP スキームは、[HTTPS]のいずれか、[HTTPとHTTPS]の両方、あるいは[_ALL_]のすべてである可能性があります。 このフィールドは必須ではありません。url: ホストとパスで構成されるリソースに一致する「 URL 」パターン。例:example.org/path。 ワイルドカードは適用可能なトラフィックを一致させるために拡張されます。照会ストリングは一致されません。 ゾーンへのすべてのトラフィックには*を使用します。 最大長は1024です。
response: クライアントに返される前に、 HTTP のレスポンスに一致するものを抽出します。 これが定義されると、トラフィックの全体の合計がこのステージで発生します。status: HTTP ステータスコード。1つ指定する場合は[403]、複数指定する場合は[401,403]、またはこの値を指定しない場合はすべてを意味します。 このフィールドは必須ではありません。 最小値は100、最大値は999です。headers: 照合対象のレスポンスヘッダーの配列。 レスポンスがヘッダーの基準を満たさない場合、そのリクエストはレート制限ルールの対象にはカウントされません。 ヘッダーの照合条件には、以下のプロパティが含まれます。name: 照合対象のレスポンスヘッダー名。op: マッチング時の演算子。「eq」は「等しい」を、「ne」は「等しくない」を意味します。 有効な値はeqおよびneです。value: ヘッダーの値。これが完全に一致します。
threshold: レート制限の緩和措置を発動させる閾値。これには期間が組み合わされています。 例えば、期間ごとの閾値などです。 最小値は2、最大値は1000000です。period: 一致するトラフィックをカウントするのにかかる時間(秒単位)。 この期間内にカウントが閾値を超えた場合、そのアクションが実行されます。 最小値は10、最大値は86400です。action: 定義された期間内に、一致したトラフィックの閾値を超えた場合に実行されるアクション。mode: 実行されたアクションの種類。 有効な値は、simulate、ban、challenge、js_challengeです。timeout: 緩和措置を実行するための時間を秒単位で、整数として指定します。 タイムアウトは、その期間と同じか、それ以上とすることができます。 このフィールドは、モードが「simulate」または「ban」の場合にのみ有効です。 最小値は10、最大値は86400です。response: 返すカスタムコンテンツタイプと本文。 これはゾーンのカスタム・エラーをオーバーライドします。 このフィールドは必須ではありません。 指定しないと、デフォルトの HTML エラー・ページが使用されます。 このフィールドはモードがsimulateまたはbanのときのみ有効です。content_type: 本文のコンテンツタイプ。以下のいずれかでなければなりません:text/plain、text/xml、application/json。body: 戻ってくる体。 この内容は、content_typeと一致する必要があります。 最大長は10240です。
- オプション・フィールドは、
id、disabled、description、correlate、およびbypassです。id: 速度制限ルールの識別子。disabled: このレート制限ルールが現在無効になっているかどうか。description: レート制限ルールの理由を説明するために使用できるメモです。correlate: NAT ベースのレート制限を有効にするかどうか。by: 有効な値は「nat」です。
bypass: レート制限を無効にできる条件。 たとえば、特定のURL群にはレート制限を適用すべきではないことを示す場合などです。name: 有効な値は「url」です。value: バイパスするURL。
- JSON データで必須となるフィールドは、
サンプル JSON データ:
{
"id": "92f17202ed8bd63d69a66b86a49a8f6b",
"disabled": false,
"description": "Prevent multiple login failures to mitigate brute force attacks",
"bypass": [
{
"name": "url",
"value": "api.example.com/*"
}
],
"threshold": 60,
"period": 900,
"correlate": {
"by": "nat"
},
"action": [
{
"mode": "simulate",
"timeout": 86400,
"response": {
"content_type": "text/plain",
"body": "<error>This request has been rate-limited.</error>"
}
}
],
"match": {
"request": {
"methods": [
"GET"
],
"schemes": [
"HTTP",
"HTTPS"
],
"url": "*.example.org/path*"
},
"response": {
"status": [
403, 401
],
"headers": [
{
"name": "Cf-Cache-Status",
"op": "eq",
"value": "HIT"
}
]
}
}
}
-i, --instance- インスタンスの名前または ID。 インスタンス名またはIDが設定されていない場合は、
ibmcloud cis instance-set INSTANCEで指定されたコンテキストインスタンスが使用されます。 --output- 出力形式。 現在、
jsonが唯一サポートされている値です。
CLI からレート制限ルールを更新する
CLI からレート制限ルールを更新するには、次のコマンドを実行します:
ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID [--url URL] [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]
また、JSONファイルまたはJSON文字列を直接指定することで、レート制限ルールを更新することもできます:
ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]
コマンド・オプション
DNS_DOMAIN_ID- DNSドメインのID。 必須。
RATELIMIT_RULE_ID- レート制限ルールのID。 必須。
--json- レート制限ルールを記述するために使用されるJSONファイルまたはJSON文字列。
- JSON データで必須となるフィールドは、
match、threshold、period、およびactionです:match: レート制限ルールが、どのトラフィックを閾値の算定対象とするかを決定します。request: 「 HTTP 」というリクエストに一致します。methods: HTTP メソッドは、[POST,PUT]のサブセットである場合もあれば、[ALL]のすべてである場合もあります。 レート制限ルールを作成する際、このフィールドは必須ではありません。 有効な値は、GET、POST、PUT、DELETE、PATCH、HEAD、ALLです。schemes: HTTP スキームは、[HTTPS]のいずれか、[HTTP,HTTPS]の両方、または[_ALL_]のすべてである可能性があります。 このフィールドは必須ではありません。url: 照合対象となる「 URL 」というパターンは、ホスト名とパスで構成されていました。例えば、example.org/pathといった形です。 ワイルドカードは適用可能なトラフィックを一致させるために拡張されます。照会ストリングは一致されません。 ゾーンへのすべてのトラフィックには*を使用します。 最大長は1024です。
response: クライアントに返される前に、 HTTP のレスポンスに一致するものを抽出します。 このフィールドが定義されている場合、トラフィックの集計はすべてこの段階で実行されます。status: HTTP ステータスコード。1つ指定する場合は[403]、複数指定する場合は[401,403]、またはこの値を指定しない場合はすべてを意味します。 このフィールドは必須ではありません。 最小値は100、最大値は999です。headers: 照合対象のレスポンスヘッダーの配列。 レスポンスがヘッダーの基準を満たさない場合、そのリクエストはレート制限ルールの対象にはカウントされません。 ヘッダー照合基準には、以下のプロパティが含まれます。name: 照合対象のレスポンスヘッダー名。op: マッチング時の演算子。「eq」は「等しい」を、「ne」は「等しくない」を意味します。 有効な値はeqおよびneです。value: ヘッダーの値。これが完全に一致します。
threshold: レート制限の緩和措置を発動させる閾値。これは「期間」と組み合わせて使用されます。 例えば、期間ごとの閾値などです。 最小値は2、最大値は1000000です。period: 一致するトラフィックをカウントするのにかかる時間(秒単位)。 この期間内にカウントが閾値を超えた場合、そのアクションが実行されます。 最小値は1、最大値は3600です。action: 定義された期間内に、一致したトラフィックの閾値を超えた場合に、このアクションが実行されます。mode: 実行されたアクションの種類。 有効な値は、simulate、ban、challenge、js_challengeです。timeout: 緩和措置を実行するまでの時間(秒単位)。整数で指定してください。 タイムアウトは、その期間と同じかそれ以上です。 このフィールドはモードがsimulateまたはbanのときのみ有効です。 最小値は10、最大値は86400です。response: 返すカスタムコンテンツタイプと本文。 これはゾーンのカスタム・エラーをオーバーライドします。 このフィールドは必須ではありません。 指定しないと、デフォルトの HTML エラー・ページが使用されます。 このフィールドはモードがsimulateまたはbanのときのみ有効です。content_type: 本文のコンテンツタイプ。以下のいずれかでなければなりません:text/plain、text/xml、application/json。body: 戻ってくる体。 この内容は、content_typeと一致する必要があります。 最大長は10240です。
- オプション・フィールドは、
disabled、description、correlate、およびbypassです。disabled: このレート制限ルールが現在無効になっているかどうか。description: レート制限ルールの理由を説明するために使用できるメモです。correlate: NAT ベースのレート制限を有効にするかどうか。by: 有効な値は「nat」です。
bypass: レート制限を無効にできる条件。 たとえば、特定のURL群にはレート制限を適用すべきではないことを示す場合などです。name: 有効な値は「url」です。value: バイパスするURL。
- JSON データで必須となるフィールドは、
サンプル JSON データ:
{
"disabled": false,
"description": "Prevent multiple login failures to mitigate brute force attacks",
"bypass": [
{
"name": "url",
"value": "api.example.com/*"
}
],
"threshold": 60,
"period": 900,
"correlate": {
"by": "nat"
},
"action": [
{
"mode": "simulate",
"timeout": 86400,
"response": {
"content_type": "text/plain",
"body": "<error>This request has been rate-limited.</error>"
}
}
],
"match": {
"request": {
"methods": [
"GET"
],
"schemes": [
"HTTP",
"HTTPS"
],
"url": "*.example.org/path*"
},
"response": {
"status": [
403, 401
],
"headers": [
{
"name": "Cf-Cache-Status",
"op": "eq",
"value": "HIT"
}
]
}
}
}
-i, --instance- インスタンスの名前または ID。 設定されていない場合は、
ibmcloud cis instance-set INSTANCEで指定されたコンテキストインスタンスが使用されます。 --output- 出力形式を指定してください。
JSONのみがサポートされています。
CLI からレート制限ルールを削除する
CLI からレート制限ルールを削除するには、次のコマンドを実行します:
ibmcloud cis ratelimit-rule-delete DNS_DOMAIN_ID RATELIMIT_RULE_ID [--instance INSTANCE]
コマンド・オプション
DNS_DOMAIN_ID- DNSドメインのID。 必須。
RATELIMIT_RULE_ID- レート制限ルールのID。 必須。
-i, --instance- インスタンスの名前または ID。 設定されていない場合は、
ibmcloud cis instance-set INSTANCEで指定されたコンテキストインスタンスが使用されます。
詳細については、「 CLIのレート制限 」を参照してください。
Terraformでカスタムレート制限ルールを作成する
レート制限ルールセットを作成するには、まずエントリポイントを作成し、その後でレート制限ルールセットを作成する必要があります。 これを行うには、以下の手順を実行します。
-
エントリポイントのルールセットを作成するには、次のコマンドを実行します
resource "ibm_cis_ruleset_entrypoint_version" "config" { cis_id = data.ibm_cis.cis_instance.id domain_id = data.ibm_cis_domain.cis_domain.domain_id phase = "http_ratelimit" rulesets { description = "Zone rate limit entrypoint" } lifecycle { ignore_changes = [ rulesets ] } }ブロック
lifecycleを使用して、Terraformがエントリポイントルールセットを更新するのを防ぎます。 一部のエントリポイントパラメータは毎回の更新時に更新されるため、意図terraform applyしない設定変更が生じる可能性があります。 このlifecycleブロックは、これらの更新を無視し、リソースの安定性を維持するのに役立ちます。 -
レート制限ルールセットを作成するには、次のコマンドを実行してください:
resource "ibm_cis_ruleset_rule" "config" { cis_id = data.ibm_cis.cis_instance.id domain_id = data.ibm_cis_domain.cis_domain.domain_id ruleset_id = "data.ibm_cis_ruleset_entrypoint_versions.ruleset_id" rule { action = "block" enabled = true description = "Block IPs making over 100 requests/minute to /api/" expression = "(http.request.uri.path matches \"^/api/\")" ratelimit { characteristics = ["cf.colo.id", "ip.src"] period = 60 requests_per_period = 100 mitigation_timeout = 300 } } }
以下の例は、Terraform を使用してエントリポイントとレート制限ルールを作成する方法を示しています:
resource ibm_cis_ruleset_entrypoint_version test {
cis_id = ibm_cis.instance.id
domain_id = data.ibm_cis_domain.cis_domain.domain_id
phase = "http_ratelimit"
rulesets {
description = "Entrypoint ruleset for ratelimit ruleset"
}
lifecycle {
ignore_changes = [
rulesets
]
}
}
data ibm_cis_ruleset_entrypoint_versions test {
cis_id = ibm_cis.instance.id
domain_id = data.ibm_cis_domain.cis_domain.domain_id
phase = "http_ratelimit"
depends_on = [
ibm_cis_ruleset_entrypoint_version.ratelimit_ep
]
}
resource "ibm_cis_ruleset_rule" "ratelimit_rule_1" {
cis_id = ibm_cis.instance.id
domain_id = data.ibm_cis_domain.cis_domain.domain_id
ruleset_id = data.ibm_cis_ruleset_entrypoint_versions.ratelimit_data.rulesets[0].ruleset_id
rule {
action = "block"
description = "Block IPs making over 100 requests/minute to /api/"
enabled = true
expression = "(http.request.uri.path matches \"^/api/\")"
rate_limit {
characteristics = ["cf.colo.id","ip.src"]
mitigation_timeout = 300
period = 120
requests_per_period = 100
}
}
}