Configuration de la limitation de débit
La version précédente des règles de limitation de débit est obsolète. Les règles actives de la version précédente ne fonctionneront plus.
La limitation de débit (plan Enterprise uniquement) protège contre les attaques par déni de service, les tentatives d'intrusions illicites et tout autre type de comportement abusif visant la couche application.
Création d'une règle de limitation de débit personnalisée dans la console
Pour créer une règle de limitation de débit personnalisée, procédez comme suit :
- Dans la console d' Cloud Internet Services (CIS), accédez à Sécurité > Limitation de débit, puis cliquez sur Créer une règle.
- Entrez un nom pour la règle.
- Définissez la condition de correspondance pour la règle :
- Sélectionnez un champ de requête (par exemple, le chemin URI, la méthode d' HTTP ou un en-tête).
- Sélectionnez un opérateur (par exemple, « est égal à », « contient » ou « correspond à »).
- Saisissez ou sélectionnez une valeur.
- Facultatif : utilisez le générateur d'expressions pour créer une expression personnalisée permettant une logique de correspondance plus complexe.
- Facultatif : combinez plusieurs conditions à l'aide des opérateurs « Et » et « Ou » pour créer des règles composées.
- Facultatif : désactivez l'option « État du cache » si vous souhaitez que la règle de limitation de débit ne prenne en compte que les requêtes qui parviennent au serveur d'origine. Par défaut, les requêtes mises en cache sont prises en compte dans le calcul du taux.
- Dans la section « Avec les mêmes caractéristiques », sélectionnez la caractéristique utilisée par Cloud Internet Services (CIS) pour identifier les demandes correspondantes. Parmi les options courantes, on trouve l'adresse IP, l'adresse IP avec prise en charge NAT, la session, les en-têtes, les cookies, la chaîne de requête ou l'empreinte « JA3 ».
- Facultatif : pour définir une expression de comptage personnalisée :
- Activer l'option « Utiliser une expression de comptage personnalisée ».
- Saisissez l'expression de calcul. Par défaut, l'expression de comptage correspond à l'expression de la règle. Une expression de comptage personnalisée vous permet de compter les requêtes selon une logique différente de celle utilisée pour leur mise en correspondance.
- Dans « Lorsque le taux dépasse », configurez le seuil de requête :
- Saisissez le nombre maximal de requêtes autorisées.
- Sélectionnez la période utilisée par Cloud Internet Services (CIS) pour évaluer la fréquence des requêtes (par exemple, 10 secondes, 1 minute ou 1 heure).
- Dans la section « Then take action », sélectionnez l'action à appliquer lorsque le seuil est dépassé. Les options disponibles sont les suivantes : « Block » (bloquer les requêtes), « Challenge » (proposer un test d' CAPTCHA ), « JS Challenge » (proposer un test d' JavaScript ), « Log » (enregistrer sans agir) ou « Managed Challenge » (proposer un test adapté en fonction des caractéristiques du client). Par exemple, si vous sélectionnez « **Block ** », « Cloud Internet Services (CIS) » rejette les requêtes qui dépassent la limite de débit configurée.
- Dans la section « Comportement suivant », sélectionnez le comportement d'atténuation :
- Sélectionnez un délai d'atténuation afin de bloquer les requêtes pendant une durée spécifiée une fois le seuil dépassé (par exemple, 1 minute, 10 minutes ou 1 heure).
- Les clients Enterprise disposant du module complémentaire de limitation de débit peuvent sélectionner l'option « Limiter les requêtes dépassant le débit maximal configuré » afin de limiter les requêtes au lieu d'appliquer l'action configurée.
- Dans la section « À l'emplacement », sélectionnez l'ordre des règles. Les règles sont évaluées dans l'ordre; veillez donc à placer les règles les plus spécifiques avant les règles générales.
- Cliquez sur Déployer.
La règle de limitation de débit a été créée et déployée. La règle entre en vigueur immédiatement et commence à surveiller le trafic conformément à votre configuration.
Mise à jour d'une règle de limitation de débit dans la console
Pour mettre à jour une règle de limitation de débit, procédez comme suit :
- Dans la console d' Cloud Internet Services (CIS), accédez à Sécurité > Limitation de débit.
- Dans le tableau des règles de limitation de débit, repérez la règle que vous souhaitez modifier.
- Cliquez sur le menu « Actions » situé à droite de la ligne, puis sélectionnez « Modifier ».
- Modifiez les paramètres de la règle selon vos besoins.
- Cliquez sur « Enregistrer » pour mettre à jour la règle.
Suppression d'une règle de limitation de débit dans la console
Pour supprimer une règle de limitation de débit dans la console, procédez comme suit :
- Dans la console d' Cloud Internet Services (CIS), accédez à Sécurité > Limitation de débit.
- Dans le tableau des règles de limitation de débit, repérez la règle que vous souhaitez supprimer.
- Cliquez sur le menu « Actions » de la règle, puis sélectionnez « Supprimer ».
- Vérifiez le message de confirmation, puis cliquez sur « Supprimer » pour confirmer.
Configuration de la réponse
Sélectionnez l'une des actions répertoriées et spécifiez le délai d'expiration. Dans ce cas, le délai d'expiration fait référence à la période d'interdiction pendant laquelle l'action a lieu. Un délai d'expiration de 60 secondes signifie que l'action est appliquée pendant 60 secondes.
| Action | Description |
|---|---|
| Bloc | Emet une erreur 429 lorsque le seuil est dépassé |
| Demande d'authentification | L'utilisateur doit réussir le défi reCAPTCHA de Google avant de pouvoir continuer. Si l'opération aboutit, la demande est acceptée. Faute de quoi, la demande est bloquée. |
| Demande d'authentification JS | L'utilisateur doit réussir un test de sécurité « JavaScript » avant de pouvoir continuer. Si l'opération aboutit, la demande est acceptée. Faute de quoi, la demande est bloquée. |
| Simuler | Vous pouvez utiliser cette option pour tester votre règle avant d'appliquer l'une des autres options de votre environnement de production. |
Obtenir le point d'entrée de la règle de limitation du débit pour l'API
Toutes les opérations API relatives aux règles de limitation de débit nécessitent un RULESET_ID du jeu de règles du point d'entrée pour la phase des règles de limitation de débit. Cet ensemble de règles d'entrée peut déjà exister
ou devra être créé s'il n'existe pas.
Suivez ces étapes pour obtenir le jeu de règles d'entrée de règle de limitation de débit :
-
Configurez l'environnement de votre API avec les variables appropriées.
-
Stockez les valeurs suivantes dans les variables destinées à être utilisées dans la commande d'API :
CRN: Le nom complet de la ressource cloud (CRN) de l'instance de service, codé sur URL.ZONE_ID: L'ID de domaine. -
Une fois toutes les variables initialisées, récupérez l'ensemble de règles du point d'entrée :
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'identifiant de l'ensemble de règles figure dans la réponse à la demande qui a abouti. Si l'appel précédent renvoie une réponse 404 Not Found, utilisez l'API suivante pour créer l'ensemble de règles d'entrée pour la phase de règles de limitation de débit :
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" }'
Création d'une règle de limitation du débit via l'API
Procédez comme suit pour créer une règle de limitation de débit à l'aide de l'API :
-
Configurez l'environnement de votre API avec les variables appropriées.
-
Stockez les valeurs suivantes dans les variables destinées à être utilisées dans la commande d'API :
CRN: Le nom complet de la ressource cloud (CRN) de l'instance de service, codé sur URL.ZONE_ID: L'ID de domaine.RULESET_ID: L'ID du jeu de règles d'entrée de la règle de limitation de débit. -
Une fois toutes les variables initialisées, créez la règle de limitation de débit :
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 } }'
Mise à jour d'une règle de limitation de débit avec l'API
Procédez comme suit pour mettre à jour une règle de limitation de débit existante à l'aide de l'API :
-
Configurez l'environnement de votre API avec les variables appropriées.
-
Stockez les valeurs suivantes dans les variables destinées à être utilisées dans la commande d'API :
CRN: Le nom complet de la ressource cloud (CRN) de l'instance de service, codé sur URL.ZONE_ID: L'ID de domaine.RULESET_ID: L'ID du jeu de règles d'entrée de la règle de limitation de débit.RULE_ID: L'ID de la règle de limitation de débit à modifier. -
Une fois toutes les variables initialisées, mettez à jour la règle de limitation de débit :
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" }'
Suppression d'une règle de limitation de débit avec l'API
Procédez comme suit pour supprimer une règle de limitation de débit existante à l'aide de l'API :
-
Configurez l'environnement de votre API avec les variables appropriées.
-
Stockez les valeurs suivantes dans les variables destinées à être utilisées dans la commande d'API :
CRN: Le nom complet de la ressource cloud (CRN) de l'instance de service, codé sur URL.ZONE_ID: L'ID de domaine.RULESET_ID: L'ID du jeu de règles d'entrée de la règle de limitation de débit.RULE_ID: L'ID de la règle de limitation de débit à modifier. -
Une fois toutes les variables initialisées, supprimez la règle de limitation de débit :
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"
Vérification des règles de limitation de débit et de la cohérence des réponses à l'aide de HTTP status
Lorsque vous appliquez des règles de limitation de débit à une adresse web ou à un service, il est important de confirmer que les règles sont appliquées correctement. Un simple test confirme que le système répond avec les codes d'état HTTP appropriés :
200 OKou404 Not Foundpour les demandes autorisées429 Too Many Requestslorsque les limites de taux sont dépassées.
Pour vérifier les règles de limitation de débit et la cohérence des réponses, exécutez la commande suivante :
for i in {1..N}; do curl -s -o /dev/null -w "%{http_code}\n" <your-target-url>; done
Options de commande
N- Nombre de demandes à envoyer.
your-target-url- URL du service ou du point de terminaison que vous souhaitez tester.
Cette commande permet d'obtenir le code d'état HTTP pour chaque demande et d'observer quand le seuil de la limite de débit est atteint.
Création d'une règle de limitation de débit à partir de l'interface CLI
Pour créer une règle de limitation de débit à partir de l'interface CLI, procédez comme suit :
-
Configurez votre environnement d'interface de ligne de commande.
-
Connectez-vous à votre compte depuis l'interface de ligne de commande (CLI). Une fois le mot de passe saisi, le système vous demande de choisir le compte et la région que vous souhaitez utiliser :
ibmcloud login --sso -
Exécutez la commande suivante pour créer une règle de limitation de débit :
ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID --url URL [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]Vous pouvez également créer une règle de limitation du débit en fournissant directement un fichier JSON ou une chaîne JSON :
ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]
Options de commande
DNS_DOMAIN_ID- L'identifiant du domaine DNS. Obligatoire.
--json- Fichier JSON ou chaîne JSON utilisé(e) pour décrire une règle de limitation de débit.
- Les champs obligatoires dans les données JSON sont les suivants :
match,threshold,periodetaction:match: Détermine quel trafic est pris en compte par la règle de limitation de débit dans le calcul du seuil.request: Correspond aux requêtes de type « HTTP ».methods: HTTP Les méthodes peuvent être un sous-ensemble de[POST,PUT]ou l'ensemble complet de[_ALL_]. Cette zone n'est pas obligatoire pour créer une règle de limitation de débit. Les valeurs valides sontGET,POST,PUT,DELETE,PATCH,HEAD,_ALL_.schemes: HTTP Les combinaisons possibles sont : soit[HTTPS], soit[HTTP, soitHTTPS], soit[_ALL_]. Cette zone n'est pas obligatoire.url: Le modèle de correspondance « URL », composé de l'hôte et du chemin d'accès, par exempleexample.org/path. Les caractères génériques s'appliquent au trafic mais non aux chaînes de requête. Utilisez*pour l'ensemble du trafic vers votre zone. La longueur maximale est de1024.
response: Permet de filtrer les réponses de type « HTTP » avant qu’elles ne soient renvoyées au client. Avec cette option, tout le comptage du trafic a lieu à ce stade.status: HTTP Codes d'état : il peut s'agir d'un seul code[403], de plusieurs codes[401,403]ou de tous les codes (en ne précisant pas cette valeur). Cette zone n'est pas obligatoire. La valeur minimale est100et la valeur maximale est999.headers: Tableau des en-têtes de réponse à comparer. Si une réponse ne répond pas aux critères d'en-tête, la requête n'est pas prise en compte dans le calcul de la règle de limitation de débit. Les critères de correspondance des en-têtes comprennent les propriétés suivantes.name: Nom de l'en-tête de réponse à rechercher.op: Opérateur utilisé lors de la comparaison : « eq » signifie « égal à » et « ne » signifie « différent de ». Les valeurs valides sonteqetne.value: La valeur de l'en-tête, qui correspond exactement.
threshold: Le seuil à partir duquel les mesures de limitation du débit sont déclenchées, associées à une durée. Par exemple, le seuil par période. La valeur minimale est2et la valeur maximale est1000000.period: Le temps, en secondes, nécessaire pour compter le trafic correspondant. Si le nombre dépasse le seuil au cours de cette période, l'action est exécutée. La valeur minimale est10et la valeur maximale est86400.action: Action déclenchée lorsque le seuil de trafic correspondant est dépassé au cours de la période définie.mode: Le type d'action effectuée. Les valeurs valides sont :simulate,ban,challenge,js_challenge.timeout: Le délai, en secondes (sous forme de nombre entier), nécessaire pour mettre en œuvre la mesure d'atténuation. Le délai d'expiration peut être identique ou supérieur à la durée. Ce champ n'est valide que lorsque le mode est «simulate» ou «ban». La valeur minimale est10et la valeur maximale est86400.response: Type de contenu et corps personnalisés à renvoyer. Remplace l'erreur personnalisée de la zone. Cette zone n'est pas obligatoire. Si elle est omise, la page d'erreur HTML par défaut est générée. Cette zone n'est valide que si le mode estsimulateouban.content_type: Le type de contenu du corps du message, qui doit être l'un des suivants :text/plain,text/xml,application/json.body: Le corps doit revenir. Le contenu ici doit être conforme au typecontent_type. La longueur maximale est de10240.
- Les zones facultatives sont
id,disabled,description,correlateetbypass:id: Identifiant de la règle limitant le débit.disabled: Indique si cette règle de limitation de débit est actuellement désactivée.description: Une note que vous pouvez utiliser pour expliquer la raison d'une règle de limitation de débit.correlate: Activer ou non la limitation de débit basée sur le NAT.by: La valeur valide est «nat».
bypass: Critères permettant de contourner la limite de débit. Par exemple, pour indiquer qu'il ne faut pas appliquer de limite de débit à un ensemble d'URL.name: La valeur valide est «url».value: L'URL à contourner.
- Les champs obligatoires dans les données JSON sont les suivants :
Exemple de données 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- Nom ou ID de l'instance. Si le nom ou l'ID de l'instance n'est pas défini, c'est l'instance de contexte spécifiée par
ibmcloud cis instance-set INSTANCEqui est utilisée. --output- Format de sortie. À l'heure actuelle, «
json» est la seule valeur prise en charge.
Mise à jour d'une règle de limitation de débit via l'interface CLI
Exécutez la commande suivante pour mettre à jour une règle de limitation de débit depuis l'interface CLI :
ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID [--url URL] [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]
Vous pouvez également mettre à jour une règle de limitation de débit en fournissant directement un fichier JSON ou une chaîne JSON :
ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]
Options de commande
DNS_DOMAIN_ID- L'identifiant du domaine DNS. Obligatoire.
RATELIMIT_RULE_ID- L'identifiant de la règle de limitation de débit. Obligatoire.
--json- Le fichier JSON ou la chaîne JSON utilisée pour décrire une règle de limitation de débit.
- Les champs obligatoires dans les données JSON sont les suivants :
match,threshold,periodetaction:match: Détermine quel trafic est pris en compte par la règle de limitation de débit dans le calcul du seuil.request: Correspond aux requêtes de type « HTTP ».methods: HTTP Les méthodes peuvent être un sous-ensemble de[POST,PUT]ou l'ensemble complet de[ALL]. Cette zone n'est pas obligatoire pour créer une règle de limitation de débit. Les valeurs valides sontGET,POST,PUT,DELETE,PATCH,HEAD,ALL.schemes: HTTP Les combinaisons possibles sont : un seul[HTTPS], les deux[HTTP,HTTPS]ou les trois[_ALL_]. Cette zone n'est pas obligatoire.url: Le modèle « URL » à faire correspondre comprenait le nom d'hôte et le chemin d'accès, par exemple :example.org/path. Les caractères génériques s'appliquent au trafic mais non aux chaînes de requête. Utilisez*pour l'ensemble du trafic vers votre zone. La longueur maximale est de1024.
response: Permet de filtrer les réponses de type « HTTP » avant qu’elles ne soient renvoyées au client. Si ce champ est défini, le comptage complet du trafic s'effectue à cette étape.status: HTTP Codes d'état : il peut s'agir d'un seul code[403], de plusieurs codes[401,403]ou de tous les codes (en ne précisant pas cette valeur). Cette zone n'est pas obligatoire. La valeur minimale est100et la valeur maximale est999.headers: Tableau des en-têtes de réponse à comparer. Si une réponse ne répond pas aux critères d'en-tête, la requête n'est pas prise en compte dans le calcul de la règle de limitation de débit. L'ensemble des critères de correspondance des en-têtes comprend les propriétés suivantes.name: Nom de l'en-tête de réponse à rechercher.op: Opérateur utilisé lors de la comparaison : « eq » signifie « égal à » et « ne » signifie « différent de ». Les valeurs valides sonteqetne.value: La valeur de l'en-tête, qui correspond exactement.
threshold: Le seuil à partir duquel les mesures de limitation du débit sont déclenchées; celles-ci sont associées à la période. Par exemple, le seuil par période. La valeur minimale est2et la valeur maximale est1000000.period: Le temps, en secondes, nécessaire pour compter le trafic correspondant. Si le nombre dépasse le seuil au cours de cette période, l'action est exécutée. La valeur minimale est1et la valeur maximale est3600.action: L'action est déclenchée lorsque le seuil de trafic correspondant est dépassé au cours de la période définie.mode: Le type d'action effectuée. Les valeurs valides sont :simulate,ban,challenge,js_challenge.timeout: Le temps, en secondes, exprimé sous forme de nombre entier, nécessaire pour mettre en œuvre la mesure d'atténuation. Le délai d'expiration est égal ou supérieur à la durée. Cette zone n'est valide que si le mode estsimulateouban. La valeur minimale est10et la valeur maximale est86400.response: Type de contenu et corps personnalisés à renvoyer. Remplace l'erreur personnalisée de la zone. Cette zone n'est pas obligatoire. Si elle est omise, la page d'erreur HTML par défaut est générée. Cette zone n'est valide que si le mode estsimulateouban.content_type: Le type de contenu du corps du message, qui doit être l'un des suivants :text/plain,text/xml,application/json.body: Le corps doit revenir. Le contenu ici doit être conforme au typecontent_type. La longueur maximale est de10240.
- Les zones facultatives sont
disabled,description,correlateetbypass:disabled: Indique si cette règle de limitation de débit est actuellement désactivée.description: Une note que vous pouvez utiliser pour expliquer la raison d'une règle de limitation de débit.correlate: Activer ou non la limitation de débit basée sur le NAT.by: La valeur valide est «nat».
bypass: Critères permettant de contourner la limite de débit. Par exemple, pour indiquer qu'il ne faut pas appliquer de limite de débit à un ensemble d'URL.name: La valeur valide est «url».value: L'URL à contourner.
- Les champs obligatoires dans les données JSON sont les suivants :
Exemple de données 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- Nom ou ID de l'instance. Si cette option n'est pas définie, l'instance de contexte spécifiée par
ibmcloud cis instance-set INSTANCEest utilisée. --output- Précisez le format de sortie; seul le format «
JSON» est pris en charge.
Suppression d'une règle de limitation de débit via l'interface CLI
Exécutez la commande suivante pour supprimer une règle de limitation de débit depuis l'interface CLI :
ibmcloud cis ratelimit-rule-delete DNS_DOMAIN_ID RATELIMIT_RULE_ID [--instance INSTANCE]
Options de commande
DNS_DOMAIN_ID- L'identifiant du domaine DNS. Obligatoire.
RATELIMIT_RULE_ID- L'identifiant de la règle de limitation de débit. Obligatoire.
-i, --instance- Nom ou ID de l'instance. Si cette option n'est pas définie, l'instance de contexte spécifiée par
ibmcloud cis instance-set INSTANCEest utilisée.
Pour plus d'informations, consultez la section « Limitation du débit via l'interface CLI ».
Création d'une règle de limitation de débit personnalisée avec Terraform
Pour créer un ensemble de règles de limitation de débit, vous devez d'abord créer un point d'entrée, puis créer l'ensemble de règles de limitation de débit. Pour ce faire, procédez comme suit :
-
Pour créer un ensemble de règles de point d'entrée, exécutez la commande suivante :
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 ] } }Utilisez un
lifecyclebloc pour empêcher Terraform de mettre à jour l'ensemble de règles d'entrée. Certains paramètres d'entrée sont mis à jour à chaque foisterraform apply, ce qui peut entraîner des modifications de configuration involontaires. Lelifecyclebloc vous aide à ignorer ces mises à jour et à maintenir la stabilité des ressources. -
Pour créer un ensemble de règles de limitation de débit, exécutez la commande suivante :
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'exemple suivant montre comment créer un point d'entrée et une règle de limitation de débit avec 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
}
}
}