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:
- Nella console di Cloud Internet Services (CIS), accedere alla sezione Sicurezza > Limitazione della frequenza, quindi fare clic su Crea regola.
- Inserisci un nome per la regola.
- Definire la condizione di corrispondenza per la regola:
- Selezionare un campo della richiesta (ad esempio, percorso URI, HTTP metodo o intestazione).
- Selezionare un operatore (ad esempio, uguale a, contiene o corrisponde a).
- Inserisci o seleziona un valore.
- Facoltativo: utilizzare l'Expression Builder per creare un'espressione personalizzata per una logica di corrispondenza più complessa.
- Facoltativo: combinare più condizioni utilizzando gli operatori "And " e "Or " per creare regole composte.
- 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.
- 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.
- Facoltativo: per definire un'espressione di conteggio personalizzata:
- Abilita l'opzione " Usa espressione di conteggio personalizzata ".
- 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.
- In "Quando il tasso supera ", configurare la soglia di richiesta:
- Inserisci il numero massimo di richieste consentite.
- 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).
- 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.
- Nella sezione " Con il seguente comportamento ", selezionare il comportamento di mitigazione:
- 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).
- 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.
- In "Posizione", selezionare l'ordine delle regole. Le regole vengono valutate in ordine, quindi inserisci le regole più specifiche prima di quelle generali.
- 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:
- Nella console di Cloud Internet Services (CIS), accedere alla sezione Sicurezza > Limitazione della frequenza.
- Nella tabella delle regole di limitazione della velocità, individuare la regola che si desidera modificare.
- Fai clic sul menu Azioni a destra della riga, quindi seleziona Modifica.
- Modifica le impostazioni della regola secondo necessità.
- 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:
- Nella console di Cloud Internet Services (CIS), accedere alla sezione Sicurezza > Limitazione della frequenza.
- Nella tabella delle regole di limitazione della velocità, individuare la regola che si desidera eliminare.
- Fare clic sul menu Azioni della regola, quindi selezionare Elimina.
- 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.
| 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à:
-
Impostare l'ambiente API con le variabili corrette.
-
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. -
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:
-
Impostare l'ambiente API con le variabili corrette.
-
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à. -
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:
-
Impostare l'ambiente API con le variabili corrette.
-
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. -
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:
-
Impostare l'ambiente API con le variabili corrette.
-
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. -
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 OKo404 Not Foundper le richieste consentite429 Too Many Requestsquando 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:
-
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 -
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,periodeaction: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 sonoGET,POST,PUT,DELETE,PATCH,HEAD,_ALL_.schemes: HTTP Schemi: può trattarsi di uno solo[HTTPS], di entrambi[HTTPeHTTPS]oppure di tutti e tre[_ALL_]. Questo campo non è obbligatorio.url: Il modello " URL " da abbinare, composto dall'host e dal percorso, ad esempioexample.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 è100e 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 sonoeqene.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 è2e 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 è10e 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 è10e 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à èsimulateoban.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 acontent_type. La lunghezza massima è10240.
- I campi facoltativi sono
id,disabled,description,correlateebypass: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.
- I campi obbligatori nei dati JSON sono
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,periodeaction: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 sonoGET,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 esempioexample.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 è100e 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 sonoeqene.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 è2e 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 è1e 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 sonosimulate,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à èsimulateoban. Il valore minimo è10e 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à èsimulateoban.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 acontent_type. La lunghezza massima è10240.
- I campi facoltativi sono
disabled,description,correlateebypass: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.
- I campi obbligatori nei dati JSON sono
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:
-
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
lifecycleblocco per impedire a Terraform di aggiornare il set di regole dell'entrypoint. Alcuni parametri di entrypoint vengono aggiornati durante ogniterraform apply, il che può introdurre modifiche di configurazione indesiderate. Illifecycleblocco ti aiuta a ignorare questi aggiornamenti e a mantenere la stabilità delle risorse. -
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
}
}
}