Configurazione della limitazione della velocità

La versione precedente delle regole di limitazione della velocità è obsoleta. Le regole attive della versione precedente non funzioneranno più.

La limitazione frequenza (solo piano Enterprise) protegge da attacchi DoS (denial-of-service), tentativi di accesso di forza bruta e altri tipi di comportamenti abusivi diretti a livello dell'applicazione.

Creazione di una regola personalizzata di limitazione della frequenza nella console

Per creare una regola personalizzata di limitazione della frequenza, procedere come segue:

  1. Nella console di Cloud Internet Services (CIS), accedere alla sezione Sicurezza > Limitazione della frequenza, quindi fare clic su Crea regola.
  2. Inserisci un nome per la regola.
  3. Definire la condizione di corrispondenza per la regola:
    1. Selezionare un campo della richiesta (ad esempio, percorso URI, HTTP metodo o intestazione).
    2. Selezionare un operatore (ad esempio, uguale a, contiene o corrisponde a).
    3. Inserisci o seleziona un valore.
    4. Facoltativo: utilizzare l'Expression Builder per creare un'espressione personalizzata per una logica di corrispondenza più complessa.
    5. Facoltativo: combinare più condizioni utilizzando gli operatori "And " e "Or " per creare regole composte.
    6. Opzionale: disattivare lo stato della cache se si desidera che la regola di limitazione della frequenza prenda in considerazione solo le richieste che raggiungono il server di origine. Per impostazione predefinita, le richieste memorizzate nella cache vengono incluse nel calcolo della frequenza.
  4. In "Con le stesse caratteristiche ", selezionare la caratteristica utilizzata da Cloud Internet Services (CIS) per identificare le richieste corrispondenti. Tra le opzioni più comuni figurano l'indirizzo IP, l'IP con supporto NAT, la sessione, le intestazioni, i cookie, la stringa di query o l'impronta digitale dell' JA3.
  5. Facoltativo: per definire un'espressione di conteggio personalizzata:
    1. Abilita l'opzione " Usa espressione di conteggio personalizzata ".
    2. Inserisci l'espressione di conteggio. Per impostazione predefinita, l'espressione di conteggio corrisponde all'espressione della regola. Un'espressione di conteggio personalizzata consente di contare le richieste in modo diverso rispetto a come vengono abbinate.
  6. In "Quando il tasso supera ", configurare la soglia di richiesta:
    1. Inserisci il numero massimo di richieste consentite.
    2. Selezionare l'intervallo di tempo utilizzato da Cloud Internet Services (CIS) per valutare la frequenza delle richieste (ad esempio, 10 secondi, 1 minuto o 1 ora).
  7. Nella sezione "Agisci", seleziona l'azione da applicare quando viene superata la soglia. Le opzioni disponibili sono: Blocca (rifiuta le richieste), Verifica (presenta una sfida del tipo CAPTCHA ), Verifica JS (presenta una sfida del tipo JavaScript ), Registra (registra senza intraprendere alcuna azione) o Verifica gestita (presenta una sfida appropriata in base alle caratteristiche del client). Ad esempio, selezionando "Blocca", " Cloud Internet Services (CIS) " respingerà le richieste che superano il limite di frequenza configurato.
  8. Nella sezione " Con il seguente comportamento ", selezionare il comportamento di mitigazione:
    1. Selezionare un timeout di mitigazione per bloccare le richieste per un periodo di tempo specificato dopo il superamento della soglia (ad esempio, 1 minuto, 10 minuti o 1 ora).
    2. I clienti Enterprise che dispongono del componente aggiuntivo per la limitazione della velocità possono selezionare l'opzione " Limita le richieste che superano la velocità massima configurata " per limitare le richieste, anziché applicare l'azione configurata.
  9. In "Posizione", selezionare l'ordine delle regole. Le regole vengono valutate in ordine, quindi inserisci le regole più specifiche prima di quelle generali.
  10. Fai clic su Deploy.

La regola di limitazione della velocità è stata creata e implementata. La regola entra in vigore immediatamente e inizia a monitorare il traffico in base alla configurazione specificata.

Aggiornamento di una regola di limitazione della velocità nella console

Per aggiornare una regola di limitazione della velocità, procedere come segue:

  1. Nella console di Cloud Internet Services (CIS), accedere alla sezione Sicurezza > Limitazione della frequenza.
  2. Nella tabella delle regole di limitazione della velocità, individuare la regola che si desidera modificare.
  3. Fai clic sul menu Azioni a destra della riga, quindi seleziona Modifica.
  4. Modifica le impostazioni della regola secondo necessità.
  5. Fai clic su " Salva " per aggiornare la regola.

Eliminazione di una regola di limitazione della velocità nella console

Per eliminare una regola di limitazione della velocità nella console, procedere come segue:

  1. Nella console di Cloud Internet Services (CIS), accedere alla sezione Sicurezza > Limitazione della frequenza.
  2. Nella tabella delle regole di limitazione della velocità, individuare la regola che si desidera eliminare.
  3. Fare clic sul menu Azioni della regola, quindi selezionare Elimina.
  4. Controlla il messaggio di conferma e clicca su " Elimina " per confermare.

Configurazione della risposta

Seleziona dalle azioni elencate e specifica il periodo di timeout. In questo caso, il timeout fa riferimento al periodo di divieto in cui si verifica l'azione. Un timeout di 60 secondi significa che l'azione viene applicata per 60 secondi.

Azioni per la limitazione del tasso
Azione Descrizione
Blocca Emette un errore 429 quando viene superata la soglia
Challenge Prima di procedere, l'utente deve superare una sfida reCAPTCHA su Google. In caso di successo, la richiesta viene accettata. In caso contrario, la richiesta viene bloccata.
JS Challenge L'utente deve superare una verifica " JavaScript " prima di poter proseguire. In caso di successo, la richiesta viene accettata. In caso contrario, la richiesta viene bloccata.
Simulate Puoi utilizzare questa opzione per verificare la tua regola prima di applicare una qualsiasi delle altre opzioni nel tuo ambiente reale.

Ottenere il punto di ingresso della regola di limitazione della velocità per l'API

Tutte le operazioni API relative alle regole di limitazione della velocità richiedono un RULESET_ID del set di regole del punto di ingresso per la fase delle regole di limitazione della velocità. Questo set di regole di entrypoint potrebbe già esistere oppure potrebbe essere necessario crearlo se non è presente.

Segui questi passaggi per ottenere il set di regole dell'entrypoint della regola di limitazione della velocità:

  1. Impostare l'ambiente API con le variabili corrette.

  2. Memorizzare i seguenti valori in variabili da utilizzare nel comando API:

    CRN: Il nome completo della risorsa cloud (CRN) codificato da URL dell'istanza del servizio.

    ZONE_ID: L'ID del dominio.

  3. Quando tutte le variabili sono state inizializzate, ottieni il set di regole dell'entrypoint:

    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"
    

    L'ID del ruleset si trova nella risposta della richiesta andata a buon fine. Se la chiamata precedente restituisce una risposta 404 Not Found, utilizzare la seguente API per creare il set di regole entrypoint per la fase delle regole di limitazione della velocità:

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

Creare una regola di limitazione della velocità con l'API

Per creare una regola di limitazione della velocità con l'API, procedere come segue:

  1. Impostare l'ambiente API con le variabili corrette.

  2. Memorizzare i seguenti valori in variabili da utilizzare nel comando API:

    CRN: Il nome completo della risorsa cloud (CRN) codificato da URL dell'istanza del servizio.

    ZONE_ID: L'ID del dominio.

    RULESET_ID: L'ID del set di regole entrypoint della regola di limitazione della velocità.

  3. Quando tutte le variabili sono state inizializzate, creare la regola di limitazione della velocità:

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

Aggiornamento di una regola di limitazione della velocità con l'API

Per aggiornare una regola di limitazione della velocità esistente con l'API, procedere come segue:

  1. Impostare l'ambiente API con le variabili corrette.

  2. Memorizzare i seguenti valori in variabili da utilizzare nel comando API:

    CRN: Il nome completo della risorsa cloud (CRN) codificato da URL dell'istanza del servizio.

    ZONE_ID: L'ID del dominio.

    RULESET_ID: L'ID del set di regole entrypoint della regola di limitazione della velocità.

    RULE_ID: L'ID della regola di limitazione della velocità da modificare.

  3. Quando tutte le variabili sono inizializzate, aggiornare la regola di limitazione della velocità:

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

Eliminazione di una regola di limitazione della velocità con l'API

Procedere come segue per eliminare una regola di limitazione della velocità esistente con l'API:

  1. Impostare l'ambiente API con le variabili corrette.

  2. Memorizzare i seguenti valori in variabili da utilizzare nel comando API:

    CRN: Il nome completo della risorsa cloud (CRN) codificato da URL dell'istanza del servizio.

    ZONE_ID: L'ID del dominio.

    RULESET_ID: L'ID del set di regole entrypoint della regola di limitazione della velocità.

    RULE_ID: L'ID della regola di limitazione della velocità da modificare.

  3. Quando tutte le variabili sono inizializzate, eliminare la regola di limitazione della velocità:

    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"
    

Verifica delle regole di limitazione della velocità e della coerenza della risposta utilizzando HTTP status

Quando si applicano regole di limitazione della velocità a un indirizzo web o a un servizio, è importante verificare che le regole siano applicate correttamente. Un semplice test conferma che il sistema risponde con i seguenti codici di stato HTTP:

  • 200 OK o 404 Not Found per le richieste consentite
  • 429 Too Many Requests quando vengono superati i limiti di velocità.

Per verificare le regole di limitazione della velocità e la coerenza della risposta, eseguire il seguente comando:

for i in {1..N}; do curl -s -o /dev/null -w "%{http_code}\n" <your-target-url>; done

Opzioni comando

N
Numero di richieste che si desidera inviare.
your-target-url
URL del servizio o dell'endpoint da testare.

Questo comando fornisce l'output del codice di stato HTTP per ogni richiesta e consente di osservare quando viene raggiunta la soglia del limite di velocità.

Creazione di una regola di limitazione della velocità tramite la CLI

Per creare una regola di limitazione della velocità tramite la CLI, procedere come segue:

  1. Configura il tuo ambiente CLI.

  2. Accedi al tuo account dalla CLI. Dopo aver inserito la password, il sistema richiede di specificare l'account e la regione che si desidera utilizzare:

    ibmcloud login --sso
    
  3. Esegui il seguente comando per creare una regola di limitazione della frequenza:

    ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID --url URL [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]
    

    È inoltre possibile creare una regola di limitazione della frequenza fornendo direttamente un file JSON o una stringa JSON:

    ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]
    

Opzioni comando

DNS_DOMAIN_ID
L'ID del dominio DNS. Obbligatorio.
--json
Il file JSON o la stringa JSON utilizzati per descrivere una regola di limitazione della frequenza.
  • I campi obbligatori nei dati JSON sono match, threshold, period e action:
    • match: Determina quale traffico viene conteggiato dalla regola di limitazione della velocità ai fini del raggiungimento della soglia.
      • request: Corrisponde alle richieste di tipo " HTTP ".
        • methods: HTTP I metodi possono essere un sottoinsieme di [POST,PUT] oppure tutti quelli presenti su [_ALL_]. Questo campo non è obbligatorio per creare una regola di limite di frequenza. I valori validi sono GET, POST, PUT, DELETE, PATCH, HEAD, _ALL_.
        • schemes: HTTP Schemi: può trattarsi di uno solo [HTTPS], di entrambi [HTTP e HTTPS] oppure di tutti e tre [_ALL_]. Questo campo non è obbligatorio.
        • url: Il modello " URL " da abbinare, composto dall'host e dal percorso, ad esempio example.org/path. I caratteri jolly vengono espansi per corrispondere al traffico applicabile, le stringhe di query non hanno una corrispondenza. Utilizza * per tutto il traffico verso la tua zona. La lunghezza massima è 1024.
      • response: Individua le risposte di tipo " HTTP " prima che vengano restituite al client. Se questo valore è definito, l'intero conteggio del traffico avviene in questa fase.
        • status: HTTP Codici di stato: è possibile specificarne uno solo [403], più codici [401,403] oppure indicare tutti i codici omettendo questo valore. Questo campo non è obbligatorio. Il valore minimo è 100 e quello massimo è 999.
        • headers: Array di intestazioni di risposta da confrontare. Se una risposta non soddisfa i criteri relativi all'intestazione, la richiesta non viene conteggiata ai fini della regola di limitazione della frequenza. I criteri di corrispondenza dell'intestazione includono le seguenti proprietà.
          • name: Il nome dell'intestazione della risposta da cercare.
          • op: L'operatore utilizzato nella ricerca; "eq" significa "uguale a", "ne" significa "non uguale a". I valori validi sono eq e ne.
          • value: Il valore dell'intestazione, che corrisponde esattamente.
    • threshold: La soglia che attiva le misure di mitigazione del limite di velocità, associate a un periodo di tempo. Ad esempio, la soglia per periodo. Il valore minimo è 2 e quello massimo è 1000000.
    • period: Il tempo, in secondi, necessario per contare il traffico corrispondente. Se il conteggio supera la soglia entro tale periodo, l'azione viene eseguita. Il valore minimo è 10 e quello massimo è 86400.
    • action: L'azione eseguita quando viene superata la soglia del traffico corrispondente entro il periodo definito.
      • mode: Il tipo di azione eseguita. I valori validi sono: simulate, ban, challenge, js_challenge.
      • timeout: Il tempo, espresso in secondi e come numero intero, necessario per eseguire l'azione di mitigazione. Il timeout può essere uguale o superiore al periodo. Questo campo è valido solo quando la modalità è “ simulate ” o “ ban ”. Il valore minimo è 10 e quello massimo è 86400.
      • response: Tipo di contenuto e corpo personalizzati da restituire. Questo sovrascrive l'errore personalizzato per la zona. Questo campo non è obbligatorio. L'omissione risulta nella pagina di errore HTML predefinita. Questo campo è valido solo quando la modalità è simulate o ban.
        • content_type: Il tipo di contenuto del corpo del messaggio, che deve essere uno dei seguenti: text/plain, text/xml, application/json.
        • body: Il corpo che tornerà. Il contenuto qui fornito deve essere conforme a content_type. La lunghezza massima è 10240.
  • I campi facoltativi sono id, disabled, description, correlate e bypass:
    • id: Identificatore della regola limitante la velocità.
    • disabled: Se questa regola di limitazione della velocità è attualmente disattivata.
    • description: Una nota che puoi utilizzare per descrivere il motivo alla base di una regola di limitazione della velocità.
    • correlate: Se abilitare la limitazione della velocità basata su NAT.
      • by: Il valore valido è nat.
    • bypass: Criteri che consentono di aggirare il limite di velocità. Ad esempio, per indicare che non si deve applicare un limite di frequenza a una serie di URL.
      • name: Il valore valido è url.
      • value: L'URL da bypassare.

Dati JSON di esempio:

{
   "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
Il nome o l'ID dell'istanza. Se il nome o l'ID dell'istanza non sono specificati, viene utilizzata l'istanza di contesto indicata da ibmcloud cis instance-set INSTANCE.
--output
Il formato di output. Attualmente, " json " è l'unico valore supportato.

Aggiornamento di una regola di limitazione della velocità tramite la CLI

Eseguire il seguente comando per aggiornare una regola di limitazione della velocità dalla CLI:

ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID [--url URL] [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]

È inoltre possibile aggiornare una regola di limitazione della frequenza fornendo direttamente un file JSON o una stringa JSON:

ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID  (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]

Opzioni comando

DNS_DOMAIN_ID
L'ID del dominio DNS. Obbligatorio.
RATELIMIT_RULE_ID
L'ID della regola di limitazione della velocità. Obbligatorio.
--json
Il file JSON o la stringa JSON utilizzata per descrivere una regola di limitazione della velocità.
  • I campi obbligatori nei dati JSON sono match, threshold, period e action:
    • match: Determina quale traffico viene conteggiato dalla regola di limitazione della velocità ai fini del raggiungimento della soglia.
      • request: Corrisponde alle richieste di tipo " HTTP ".
        • methods: HTTP I metodi possono essere un sottoinsieme di [POST,PUT] oppure tutti quelli presenti su [ALL]. Questo campo non è obbligatorio per creare una regola di limite di frequenza. I valori validi sono GET, POST, PUT, DELETE, PATCH, HEAD, ALL.
        • schemes: HTTP Schemi: può essere uno solo [HTTPS], entrambi [HTTP,HTTPS] oppure tutti [_ALL_]. Questo campo non è obbligatorio.
        • url: Il modello “ URL ” da abbinare era composto dall’host e dal percorso, ad esempio example.org/path. I caratteri jolly vengono espansi per corrispondere al traffico applicabile, le stringhe di query non hanno una corrispondenza. Utilizza * per tutto il traffico verso la tua zona. La lunghezza massima è 1024.
      • response: Individua le risposte di tipo " HTTP " prima che vengano restituite al client. Se questo campo è definito, il conteggio completo del traffico avviene in questa fase.
        • status: HTTP Codici di stato: è possibile specificarne uno solo [403], più codici [401,403] oppure indicare tutti i codici omettendo questo valore. Questo campo non è obbligatorio. Il valore minimo è 100 e quello massimo è 999.
        • headers: Array di intestazioni di risposta da confrontare. Se una risposta non soddisfa i criteri relativi all'intestazione, la richiesta non viene conteggiata ai fini della regola di limitazione della frequenza. Una serie di criteri di corrispondenza delle intestazioni comprende le seguenti proprietà.
          • name: Il nome dell'intestazione della risposta da cercare.
          • op: L'operatore utilizzato nella ricerca; "eq" significa "uguale a", "ne" significa "non uguale a". I valori validi sono eq e ne.
          • value: Il valore dell'intestazione, che corrisponde esattamente.
    • threshold: La soglia che attiva le misure di mitigazione del limite di velocità, che vengono combinate con il periodo. Ad esempio, la soglia per periodo. Il valore minimo è 2 e quello massimo è 1000000.
    • period: Il tempo, in secondi, necessario per contare il traffico corrispondente. Se il conteggio supera la soglia entro tale periodo, l'azione viene eseguita. Il valore minimo è 1 e quello massimo è 3600.
    • action: L'azione viene eseguita quando viene superata la soglia del traffico corrispondente entro il periodo definito.
      • mode: Il tipo di azione eseguita. I valori validi sono simulate, ban, challenge, js_challenge.
      • timeout: Il tempo, in secondi, espresso come numero intero, necessario per eseguire l'azione di mitigazione. Il timeout è uguale o superiore al periodo. Questo campo è valido solo quando la modalità è simulate o ban. Il valore minimo è 10 e quello massimo è 86400.
      • response: Tipo di contenuto e corpo personalizzati da restituire. Questo sovrascrive l'errore personalizzato per la zona. Questo campo non è obbligatorio. L'omissione risulta nella pagina di errore HTML predefinita. Questo campo è valido solo quando la modalità è simulate o ban.
        • content_type: Il tipo di contenuto del corpo del messaggio, che deve essere uno dei seguenti: text/plain, text/xml, application/json.
        • body: Il corpo che tornerà. Il contenuto qui fornito deve essere conforme a content_type. La lunghezza massima è 10240.
  • I campi facoltativi sono disabled, description, correlate e bypass:
    • disabled: Se questa regola di limitazione della velocità è attualmente disattivata.
    • description: Una nota che puoi utilizzare per descrivere il motivo alla base di una regola di limitazione della velocità.
    • correlate: Se abilitare la limitazione della velocità basata su NAT.
      • by: Il valore valido è nat.
    • bypass: Criteri che consentono di aggirare il limite di velocità. Ad esempio, per indicare che non si deve applicare un limite di frequenza a una serie di URL.
      • name: Il valore valido è url.
      • value: L'URL da bypassare.

Dati JSON di esempio:

{
   "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
Il nome o l'ID dell'istanza. Se non viene specificato, viene utilizzata l'istanza di contesto indicata da ibmcloud cis instance-set INSTANCE.
--output
Specificare il formato di output; è supportato solo il formato " JSON ".

Eliminazione di una regola di limitazione della velocità dalla CLI

Eseguire il seguente comando per eliminare una regola di limitazione della velocità dalla CLI:

ibmcloud cis ratelimit-rule-delete DNS_DOMAIN_ID RATELIMIT_RULE_ID [--instance INSTANCE]

Opzioni comando

DNS_DOMAIN_ID
L'ID del dominio DNS. Obbligatorio.
RATELIMIT_RULE_ID
L'ID della regola di limitazione della frequenza. Obbligatorio.
-i, --instance
Il nome o l'ID dell'istanza. Se non viene specificato, viene utilizzata l'istanza di contesto indicata da ibmcloud cis instance-set INSTANCE.

Per ulteriori informazioni, consultare la sezione " Limitazione della velocità tramite CLI ".

Creazione di una regola di limitazione della velocità personalizzata con Terraform

Per creare un set di regole di limitazione della velocità, è necessario creare prima un punto di ingresso, quindi creare il set di regole di limitazione della velocità. A tale scopo, attieniti alla seguente procedura:

  1. Per creare un set di regole di entrypoint, eseguire il seguente comando:

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

    Utilizza un lifecycle blocco per impedire a Terraform di aggiornare il set di regole dell'entrypoint. Alcuni parametri di entrypoint vengono aggiornati durante ogni terraform apply, il che può introdurre modifiche di configurazione indesiderate. Il lifecycle blocco ti aiuta a ignorare questi aggiornamenti e a mantenere la stabilità delle risorse.

  2. Per creare un insieme di regole di limitazione della velocità, eseguire il seguente comando:

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

L'esempio seguente mostra come creare un punto di ingresso e una regola di limitazione della velocità con 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
      }
    }
  }