速度制限の構成

レート制限ル _ールの旧バージョンは_非推奨となりました。 以前のバージョンで有効だったルールは、今後機能しなくなります。

速度制限 (エンタープライズ・プランのみ) は、サービス妨害攻撃、総当たりログイン攻撃や、アプリケーション層をターゲットにしたその他の不正な行為から保護します。

コンソールでのカスタムレート制限ルールの作成

カスタムレート制限ルールを作成するには、以下の手順に従ってください

  1. Cloud Internet Services (CIS) コンソールで、[ セキュリティ ] > [ レート制限 ] の順に選択し、 [ルールの作成] をクリックします。
  2. ルールの名前を入力します。
  3. ルールの照合条件を定義します:
    1. リクエストフィールド(URIパス、 HTTP メソッド、ヘッダーなど)を選択してください。
    2. 演算子(例:等号、包含、一致など)を選択してください。
    3. 値を入力または選択してください。
    4. オプション:より複雑な一致ロジックを実現するには、式ビルダーを使用してカスタム式を作成してください。
    5. オプション: 「And 」および「 Or 」演算子を使用して複数の条件を組み合わせ、複合ルールを作成します。
    6. オプション:レート制限ルールでオリジンサーバーに到達したリクエストのみを考慮させたい場合は、「 キャッシュステータス 」を無効にしてください。 デフォルトでは、キャッシュされたリクエストもレート計算の対象に含まれます。
  4. 同じ特徴を持つ 」で、 Cloud Internet Services (CIS) が一致するリクエストを識別するために使用する特性を選択します。 一般的なオプションには、IPアドレス、NAT対応のIPアドレス、セッション、ヘッダー、クッキー、クエリ文字列、 JA3 フィンガープリントなどがあります。
  5. オプション:カスタム集計式を定義するには:
    1. カスタム集計式を使用する」 を有効にします。
    2. 計算式を入力してください。 デフォルトでは、カウント式はルール式と一致します。 カスタム集計式を使用すると、リクエストの照合方法とは異なる方法でリクエストをカウントすることができます。
  6. レートが上限を超えた場合」 では、リクエストのしきい値を設定してください:
    1. 許可されるリクエストの最大数を入力してください。
    2. Cloud Internet Services (CIS) がリクエスト率を評価するために使用する期間を選択します(例:10 秒、1 分、1 時間など)。
  7. 「アクションを実行」 で、しきい値を超えたときに適用するアクションを選択します。 オプションには、「 ブロック (リクエストを拒否)」、「 チャレンジ ( CAPTCHA を提示)」、「 JS チャレンジ ( JavaScript チャレンジを提示)」、 「ログ (アクションを行わずにログに記録)」、または「 マネージド・チャレンジ (クライアントの特性に基づいて適切なチャレンジを提示)」があります。 たとえば、 「Block」 を選択すると、 Cloud Internet Services (CIS) は、設定されたレート制限を超えるリクエストを拒否するようになります。
  8. 次の動作」で、 緩和策の動作を選択してください:
    1. 緩和措置のタイムアウトを選択して、しきい値を超えた後、指定した期間(たとえば、1分、10分、または1時間)リクエストをブロックするように設定します。
    2. レート制限アドオンを利用しているエンタープライズのお客様は、設定されたアクションを適用する代わりに、「 設定された最大レートを超えるリクエストを制限する 」を選択して、リクエストを制限することができます。
  9. [ 適用先] で、ルールの順序を選択します。 ルールは順序通りに評価されるため、一般的なルールよりも具体的なルールを先に配置してください。
  10. 「デプロイ」 をクリックします。

速度制限ルールが作成され、デプロイされました。 このルールは直ちに有効となり、設定に従ってトラフィックの監視が開始されます。

コンソールでのレート制限ルールの更新

レート制限ルールを更新するには、以下の手順を実行してください

  1. Cloud Internet Services (CIS) コンソールで、[ セキュリティ ] > [ レート制限 ] の順に選択します。
  2. レート制限ルールセットのテーブルで、変更したいルールを探してください。
  3. 行の右側にある「アクション」メニューをクリックし、「 編集 」を選択します。
  4. 必要に応じてルールの設定を変更してください。
  5. 保存 」をクリックしてルールを更新してください。

コンソールでのレート制限ルールの削除

コンソールでレート制限ルールを削除するには、以下の手順に従ってください

  1. Cloud Internet Services (CIS) コンソールで、[ セキュリティ ] > [ レート制限 ] の順に選択します。
  2. 「レート制限ルール」テーブルで、削除したいルールを探してください。
  3. そのルールの「アクション」メニューをクリックし、「 削除 」を選択します。
  4. 確認メッセージを確認し、「 削除 」をクリックして確定してください。

応答の構成

リストされているアクションから選択し、タイムアウト期間を指定します。 この場合、タイムアウトとはアクションの実行が禁止されるまでの期間のことです。 60秒のタイムアウトとは、その処理が60秒間適用されることを意味します。

レート制限のための措置
アクション 説明
ブロック しきい値を超えると 429 エラーを発行します
チャレンジ ユーザーは、先に進む前に、 Google の reCAPTCHA チャレンジに合格する必要があります。 正常に実行された場合、要求は受け入れられます。 そうでない場合、要求はブロックされます。
JS チャレンジ ユーザーは、先に進む前に「 JavaScript 」チャレンジに合格する必要があります。 正常に実行された場合、要求は受け入れられます。 そうでない場合、要求はブロックされます。
シミュレート このオプションを使用して、他のいずれかのオプションをご使用の稼働環境に適用する前に、ルールをテストできます。

APIのレート制限ルールのエントリポイントの取得

すべてのレート制限ルールAPI操作には、レート制限ルールフェーズ RULESET_ID のエントリポイントルールセットが必要です。 このエントリポイントのルールセットは、すでに存在している場合もあれば、存在しない場合は作成する必要がある場合もあります。

レート制限ルールのエントリポイントルールセットを取得するには、次の手順に従ってください:

  1. 正しい変数を使用して API 環境をセットアップします。

  2. API コマンドで使用する以下の値を変数に格納します。

    CRN:サービス・インスタンスの完全な URL-encoded Cloud Resource Name(CRN)。

    ZONE_ID: ドメイン ID。

  3. すべての変数の初期化が完了したら、エントリポイントのルールセットを取得します:

    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を使用してレート制限ルールを作成するには、以下の手順に従ってください:

  1. 正しい変数を使用して API 環境をセットアップします。

  2. API コマンドで使用する以下の値を変数に格納します。

    CRN:サービス・インスタンスの完全な URL-encoded Cloud Resource Name(CRN)。

    ZONE_ID: ドメイン ID。

    RULESET_ID:レート制限ルールのエントリポイントルールセットのID。

  3. すべての変数の初期化が完了したら、レート制限ルールを作成します:

    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を使用して既存のレート制限ルールを更新するには、以下の手順に従ってください:

  1. 正しい変数を使用して API 環境をセットアップします。

  2. API コマンドで使用する以下の値を変数に格納します。

    CRN:サービス・インスタンスの完全な URL-encoded Cloud Resource Name(CRN)。

    ZONE_ID: ドメイン ID。

    RULESET_ID:レート制限ルールのエントリポイントルールセットのID。

    RULE_ID:変更するレート制限ルールのID。

  3. すべての変数の初期化が完了したら、レート制限ルールを更新します:

    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を使用して既存のレート制限ルールを削除するには、以下の手順に従ってください:

  1. 正しい変数を使用して API 環境をセットアップします。

  2. API コマンドで使用する以下の値を変数に格納します。

    CRN:サービス・インスタンスの完全な URL-encoded Cloud Resource Name(CRN)。

    ZONE_ID: ドメイン ID。

    RULESET_ID:レート制限ルールのエントリポイントルールセットのID。

    RULE_ID:変更するレート制限ルールのID。

  3. すべての変数の初期化が完了したら、レート制限ルールを削除してください:

    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 Found
  • 429 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 からレート制限ルールを作成するには、以下の手順に従ってください

  1. CLI 環境をセットアップします。

  2. CLIからアカウントにログインしてください。 パスワードを入力すると、システムから、使用するアカウントと地域を入力するよう求められます:

    ibmcloud login --sso
    
  3. レート制限ルールを作成するには、次のコマンドを実行してください:

    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 データで必須となるフィールドは、 matchthresholdperiod 、および action です:
    • match: レート制限ルールが、どのトラフィックを閾値の算定対象とするかを決定します。
      • request: 「 HTTP 」というリクエストに一致します。
        • methods: HTTP メソッドは、 [POST,PUT] のサブセットである場合もあれば、 [_ALL_] のすべてである場合もあります。 レート制限ルールを作成する際、このフィールドは必須ではありません。 有効な値は、GETPOSTPUTDELETEPATCHHEAD_ALL_ です。
        • schemes: HTTP スキームは、 [HTTPS] のいずれか、 [HTTPHTTPS] の両方、あるいは [_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: 実行されたアクションの種類。 有効な値は、simulatebanchallengejs_challenge です。
      • timeout: 緩和措置を実行するための時間を秒単位で、整数として指定します。 タイムアウトは、その期間と同じか、それ以上とすることができます。 このフィールドは、モードが「 simulate 」または「 ban 」の場合にのみ有効です。 最小値は 10 、最大値は 86400 です。
      • response: 返すカスタムコンテンツタイプと本文。 これはゾーンのカスタム・エラーをオーバーライドします。 このフィールドは必須ではありません。 指定しないと、デフォルトの HTML エラー・ページが使用されます。 このフィールドはモードが simulate または ban のときのみ有効です。
        • content_type: 本文のコンテンツタイプ。以下のいずれかでなければなりません: text/plaintext/xmlapplication/json
        • body: 戻ってくる体。 この内容は、content_type と一致する必要があります。 最大長は 10240 です。
  • オプション・フィールドは、iddisableddescriptioncorrelate、および bypass です。
    • id: 速度制限ルールの識別子。
    • disabled: このレート制限ルールが現在無効になっているかどうか。
    • description: レート制限ルールの理由を説明するために使用できるメモです。
    • correlate: NAT ベースのレート制限を有効にするかどうか。
      • by: 有効な値は「 nat 」です。
    • bypass: レート制限を無効にできる条件。 たとえば、特定のURL群にはレート制限を適用すべきではないことを示す場合などです。
      • name: 有効な値は「 url 」です。
      • value: バイパスするURL。

サンプル 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 データで必須となるフィールドは、 matchthresholdperiod 、および action です:
    • match: レート制限ルールが、どのトラフィックを閾値の算定対象とするかを決定します。
      • request: 「 HTTP 」というリクエストに一致します。
        • methods: HTTP メソッドは、 [POST,PUT] のサブセットである場合もあれば、 [ALL] のすべてである場合もあります。 レート制限ルールを作成する際、このフィールドは必須ではありません。 有効な値は、GETPOSTPUTDELETEPATCHHEADALL です。
        • 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: 実行されたアクションの種類。 有効な値は、 simulatebanchallengejs_challenge です。
      • timeout: 緩和措置を実行するまでの時間(秒単位)。整数で指定してください。 タイムアウトは、その期間と同じかそれ以上です。 このフィールドはモードが simulate または ban のときのみ有効です。 最小値は 10 、最大値は 86400 です。
      • response: 返すカスタムコンテンツタイプと本文。 これはゾーンのカスタム・エラーをオーバーライドします。 このフィールドは必須ではありません。 指定しないと、デフォルトの HTML エラー・ページが使用されます。 このフィールドはモードが simulate または ban のときのみ有効です。
        • content_type: 本文のコンテンツタイプ。以下のいずれかでなければなりません: text/plaintext/xmlapplication/json
        • body: 戻ってくる体。 この内容は、content_type と一致する必要があります。 最大長は 10240 です。
  • オプション・フィールドは、disableddescriptioncorrelate、および bypass です。
    • disabled: このレート制限ルールが現在無効になっているかどうか。
    • description: レート制限ルールの理由を説明するために使用できるメモです。
    • correlate: NAT ベースのレート制限を有効にするかどうか。
      • by: 有効な値は「 nat 」です。
    • bypass: レート制限を無効にできる条件。 たとえば、特定のURL群にはレート制限を適用すべきではないことを示す場合などです。
      • name: 有効な値は「 url 」です。
      • value: バイパスするURL。

サンプル 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でカスタムレート制限ルールを作成する

レート制限ルールセットを作成するには、まずエントリポイントを作成し、その後でレート制限ルールセットを作成する必要があります。 これを行うには、以下の手順を実行します。

  1. エントリポイントのルールセットを作成するには、次のコマンドを実行します

    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 ブロックは、これらの更新を無視し、リソースの安定性を維持するのに役立ちます。

  2. レート制限ルールセットを作成するには、次のコマンドを実行してください:

    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
      }
    }
  }