Configuración de limitación de velocidad
La versión anterior de las reglas de limitación de velocidad ha quedado obsoleta. Las reglas activas de la versión anterior dejarán de funcionar.
La limitación de velocidad (solo plan de Empresa) protege contra ataques de denegación de servicio, intentos de inicio de sesión de fuerza bruta y otros tipos de comportamiento abusivo que apunten a la capa de aplicación.
Creación de una regla de limitación de tasa personalizada en la consola
Para crear una regla de limitación de tasa personalizada, sigue estos pasos:
- En la consola de Cloud Internet Services (CIS), ve a Seguridad > Limitación de velocidad y, a continuación, haz clic en « Crear regla ».
- Escriba un nombre para la regla.
- Define la condición de coincidencia para la regla:
- Selecciona un campo de la solicitud (por ejemplo, la ruta URI, el método HTTP o un encabezado).
- Selecciona un operador (por ejemplo, «igual a», «contiene» o «coincide»).
- Introduce o selecciona un valor.
- Opcional: Utiliza el generador de expresiones para crear una expresión personalizada que permita aplicar una lógica de coincidencia más compleja.
- Opcional: Combina varias condiciones utilizando los operadores «Y» y «O» para crear reglas compuestas.
- Opcional: Desactiva el estado de caché si deseas que la regla de limitación de tasa tenga en cuenta únicamente las solicitudes que llegan al servidor de origen. Por defecto, las solicitudes almacenadas en caché se incluyen en el cálculo de la tasa.
- En «Con las mismas características», seleccione la característica que utiliza Cloud Internet Services (CIS) para identificar las solicitudes coincidentes. Entre las opciones más habituales se encuentran la dirección IP, la IP con compatibilidad con NAT, la sesión, los encabezados, las cookies, la cadena de consulta o la huella digital de « JA3 ».
- Opcional: Para definir una expresión de recuento personalizada:
- Activa la opción « Usar expresión de recuento personalizada ».
- Introduce la expresión de recuento. Por defecto, la expresión de recuento coincide con la expresión de la regla. Una expresión de recuento personalizada te permite contar las solicitudes de forma diferente a como se comparan.
- En « Cuando se supere la tasa », configura el umbral de solicitud:
- Introduce el número máximo de solicitudes permitidas.
- Selecciona el intervalo de tiempo que utiliza Cloud Internet Services (CIS) para evaluar la frecuencia de las solicitudes (por ejemplo, 10 segundos, 1 minuto o 1 hora).
- En « A continuación, realizar una acción », selecciona la acción que se aplicará cuando se supere el umbral. Las opciones incluyen «Bloquear» (rechazar solicitudes), «Desafío» (presentar un CAPTCHA ), «Desafío JS» (presentar un JavaScript ), «Registrar» (registrar sin realizar ninguna acción) o «Desafío gestionado» (presentar un desafío adecuado en función de las características del cliente). Por ejemplo, al seleccionar «Bloquear», « Cloud Internet Services (CIS) » rechaza las solicitudes que superen el límite de frecuencia configurado.
- En « Con el siguiente comportamiento », selecciona el comportamiento de mitigación:
- Selecciona un tiempo de espera de mitigación para bloquear las solicitudes durante un periodo de tiempo determinado una vez superado el umbral (por ejemplo, 1 minuto, 10 minutos o 1 hora).
- Los clientes Enterprise que dispongan del complemento de limitación de tasa pueden seleccionar la opción «Limitar las solicitudes que superen la tasa máxima configurada» para restringir las solicitudes, en lugar de aplicar la acción configurada.
- En «En lugar de», selecciona el orden de las reglas. Las reglas se evalúan por orden, así que coloca las reglas más específicas antes que las generales.
- Pulse Desplegar.
Se ha creado e implementado la regla de limitación de velocidad. La regla entra en vigor de inmediato y comienza a supervisar el tráfico según tu configuración.
Actualización de una regla de limitación de velocidad en la consola
Para actualizar una regla de limitación de velocidad, sigue estos pasos:
- En la consola de Cloud Internet Services (CIS), ve a Seguridad > Limitación de tasa.
- En la tabla de conjuntos de reglas de limitación de velocidad, busca la regla que quieras modificar.
- Haz clic en el menú «Acciones» situado a la derecha de la fila y, a continuación, selecciona « Editar ».
- Modifica la configuración de la regla según sea necesario.
- Haz clic en « Guardar » para actualizar la regla.
Cómo eliminar una regla de limitación de velocidad en la consola
Para eliminar una regla de limitación de velocidad en la consola, sigue estos pasos:
- En la consola de Cloud Internet Services (CIS), ve a Seguridad > Limitación de tasa.
- En la tabla de reglas de limitación de velocidad, busca la regla que quieras eliminar.
- Haz clic en el menú «Acciones» de la regla y, a continuación, selecciona « Eliminar ».
- Revisa el mensaje de confirmación y haz clic en «Eliminar» para confirmar.
Configuración de la respuesta
Seleccione entre las acciones de la lista y especifique el periodo de tiempo de espera. En este caso, el tiempo de espera hace referencia al periodo en que se realiza la acción. Un tiempo de espera de 60 segundos significa que la acción se aplica durante 60 segundos.
| Acción | Descripción |
|---|---|
| Bloquear | Emite un error 429 cuando se sobrepasa el umbral |
| Solicitar | El usuario debe superar un desafío reCAPTCHA de Google antes de continuar. Si es satisfactoria, se acepta la solicitud. De lo contrario, se bloquea la solicitud. |
| Desafío JS | El usuario debe superar un desafío de « JavaScript » antes de continuar. Si es satisfactoria, se acepta la solicitud. De lo contrario, se bloquea la solicitud. |
| Simular | Puede utilizar esta opción para probar la regla antes de aplicar cualquiera de las otras opciones en el entorno activo. |
Obtener el punto de entrada de la regla de limitación de velocidad para la API
Todas las operaciones de la API de reglas de limitación de velocidad requieren un RULESET_ID del conjunto de reglas del punto de entrada para la fase de reglas de limitación de velocidad. Este conjunto de reglas de punto de entrada
puede que ya exista o que haya que crearlo si no existe.
Siga estos pasos para obtener el conjunto de reglas de punto de entrada de la regla de limitación de velocidad:
-
Configure el entorno de la API con las variables correctas.
-
Almacene los valores siguientes en variables que se utilizarán en el mandato de la API:
CRN: El nombre completo del recurso en la nube (CRN) codificado en URL de la instancia de servicio.ZONE_ID: el ID de dominio. -
Una vez inicializadas todas las variables, obtén el conjunto de reglas del punto de entrada:
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"El ID del conjunto de reglas se encuentra en la respuesta de la solicitud correcta. Si la llamada anterior devuelve una respuesta 404 Not Found, utilice la siguiente API para crear el conjunto de reglas de punto de entrada para la fase de reglas de limitación de velocidad:
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" }'
Creación de una regla de limitación de frecuencia con la API
Siga estos pasos para crear una regla de limitación de velocidad con la API:
-
Configure el entorno de la API con las variables correctas.
-
Almacene los valores siguientes en variables que se utilizarán en el mandato de la API:
CRN: El nombre completo del recurso en la nube (CRN) codificado en URL de la instancia de servicio.ZONE_ID: el ID de dominio.RULESET_ID: El ID del conjunto de reglas del punto de entrada de la regla de limitación de velocidad. -
Una vez inicializadas todas las variables, crea la regla de limitación de velocidad:
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 } }'
Actualización de una regla de limitación de velocidad con la API
Siga estos pasos para actualizar una regla de limitación de velocidad existente con la API:
-
Configure el entorno de la API con las variables correctas.
-
Almacene los valores siguientes en variables que se utilizarán en el mandato de la API:
CRN: El nombre completo del recurso en la nube (CRN) codificado en URL de la instancia de servicio.ZONE_ID: el ID de dominio.RULESET_ID: El ID del conjunto de reglas del punto de entrada de la regla de limitación de velocidad.RULE_ID: El ID de la regla de limitación de velocidad que se va a modificar. -
Una vez inicializadas todas las variables, actualiza la regla limitadora de velocidad:
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" }'
Eliminación de una regla de limitación de velocidad con la API
Siga estos pasos para eliminar una regla de limitación de velocidad existente con la API:
-
Configure el entorno de la API con las variables correctas.
-
Almacene los valores siguientes en variables que se utilizarán en el mandato de la API:
CRN: El nombre completo del recurso en la nube (CRN) codificado en URL de la instancia de servicio.ZONE_ID: el ID de dominio.RULESET_ID: El ID del conjunto de reglas del punto de entrada de la regla de limitación de velocidad.RULE_ID: El ID de la regla de limitación de velocidad que se va a modificar. -
Cuando se hayan inicializado todas las variables, elimina la regla limitadora de velocidad:
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"
Verificación de las reglas de limitación de velocidad y de la coherencia de la respuesta mediante HTTP status
Cuando se aplican reglas de limitación de velocidad a una dirección o servicio web, es importante confirmar que las reglas se aplican correctamente. Una simple prueba confirma que el sistema responde con los siguientes códigos de estado apropiados HTTP:
200 OKo404 Not Foundpara las solicitudes permitidas429 Too Many Requestscuando se superan los límites de tarifa.
Para verificar las reglas de limitación de velocidad y la coherencia de la respuesta, ejecute el siguiente comando :
for i in {1..N}; do curl -s -o /dev/null -w "%{http_code}\n" <your-target-url>; done
Opciones de comando
N- Número de solicitudes que desea enviar.
your-target-url- URL del servicio o punto final que desea probar.
Este comando proporciona salida al código de estado HTTP para cada solicitud y permite observar cuándo se alcanza el umbral de límite de velocidad.
Creación de una regla de limitación de tasa desde la CLI
Para crear una regla de limitación de tasa desde la CLI, sigue estos pasos:
-
Configure el entorno de la CLI.
-
Inicia sesión en tu cuenta desde la CLI. Una vez introducida la contraseña, el sistema te pedirá que selecciones la cuenta y la región que deseas utilizar:
ibmcloud login --sso -
Ejecuta el siguiente comando para crear una regla de limitación de velocidad:
ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID --url URL [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]También puedes crear una regla de limitación de frecuencia proporcionando directamente un archivo JSON o una cadena JSON:
ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]
Opciones de comando
DNS_DOMAIN_ID- El identificador del dominio DNS. Obligatorio.
--json- El archivo JSON o la cadena JSON que se utiliza para describir una regla de limitación de velocidad.
- Los campos obligatorios en los datos JSON son
match,threshold,periodyaction:match: Determina qué tráfico tiene en cuenta la regla de limitación de velocidad a la hora de calcular el umbral.request: Coincide con las solicitudes de tipo « HTTP ».methods: HTTP Los métodos pueden ser un subconjunto de[POST,PUT]o todos los de[_ALL_]. Este campo no es necesario para crear una regla de límite de velocidad. Los valores válidos sonGET,POST,PUT,DELETE,PATCH,HEAD,_ALL_.schemes: HTTP Los planes pueden ser uno[HTTPS], ambos[HTTP,HTTPS]o todos[_ALL_]. Este campo no es obligatorio.url: El patrón « URL » que debe coincidir está compuesto por el nombre de dominio y la ruta; por ejemplo,example.org/path. Los caracteres comodín se expanden para que coincidan con el tráfico aplicable, las series de consulta no se comparan. Utilice*para todo el tráfico de la zona. La longitud máxima es1024.
response: Filtra las respuestas de HTTP antes de que se envíen al cliente. Si esta opción está definida, toda la contabilización del tráfico se realiza en esta etapa.status: HTTP Códigos de estado: puede indicarse uno ([403]), varios ([401,403]) o todos (sin especificar este valor). Este campo no es obligatorio. El valor mínimo es100y el valor máximo es999.headers: Matriz de encabezados de respuesta con los que se debe realizar la coincidencia. Si una respuesta no cumple los criterios del encabezado, la solicitud no se tiene en cuenta a efectos de la regla de limitación de frecuencia. Los criterios de coincidencia de encabezados incluyen las siguientes propiedades.name: El nombre del encabezado de respuesta con el que se debe realizar la coincidencia.op: El operador en la comparación: «eq» significa «igual a» y «ne» significa «no igual a». Los valores válidos soneqyne.value: El valor del encabezado, que coincide exactamente.
threshold: El umbral que activa las medidas de mitigación del límite de frecuencia, que se combinan con un periodo. Por ejemplo, el umbral por período. El valor mínimo es2y el valor máximo es1000000.period: El tiempo, en segundos, para contabilizar el tráfico coincidente. Si el recuento supera el umbral dentro de este periodo, se lleva a cabo la acción. El valor mínimo es10y el valor máximo es86400.action: La acción que se lleva a cabo cuando se supera el umbral de tráfico coincidente dentro del periodo definido.mode: El tipo de acción realizada. Los valores válidos son:simulate,ban,challenge,js_challenge.timeout: El tiempo, en segundos, expresado como un número entero, para llevar a cabo la medida de mitigación. El tiempo de espera puede ser igual o superior al periodo. Este campo solo es válido cuando el modo es «simulate» o «ban». El valor mínimo es10y el valor máximo es86400.response: Tipo de contenido y cuerpo personalizados que se van a devolver. Este valor prevalece sobre el error personalizado correspondiente a la zona. Este campo no es obligatorio. Si no se especifica, se muestra la página de error HTML predeterminada. Este campo solo es válido si la modalidad essimulateoban.content_type: El tipo de contenido del cuerpo, que debe ser uno de los siguientes:text/plain,text/xml,application/json.body: El cuerpo que regresará. Este contenido se debe ajustar acontent_type. La longitud máxima es10240.
- Los campos opcionales son
id,disabled,descriptioncorrelateybypass:id: Identificador de la regla limitante de la velocidad.disabled: Si esta regla de limitación de velocidad está desactivada actualmente.description: Una nota que puedes utilizar para describir el motivo de una regla de limitación de velocidad.correlate: Si se desea habilitar la limitación de velocidad basada en NAT.by: El valor válido es «nat».
bypass: Criterios que permiten eludir el límite de velocidad. Por ejemplo, para indicar que no se debe aplicar un límite de frecuencia a un conjunto de URL.name: El valor válido es «url».value: La URL que se quiere omitir.
- Los campos obligatorios en los datos JSON son
Datos JSON de ejemplo:
{
"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- Nombre o ID de instancia. Si no se ha establecido el nombre o el ID de la instancia, se utilizará la instancia de contexto especificada en
ibmcloud cis instance-set INSTANCE. --output- El formato de salida. Actualmente, «
json» es el único valor admitido.
Actualización de una regla de limitación de velocidad desde la CLI
Ejecuta el siguiente comando para actualizar una regla de limitación de tasa desde la CLI:
ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID [--url URL] [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]
También puedes actualizar una regla de limitación de tasa proporcionando directamente un archivo JSON o una cadena JSON:
ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]
Opciones de comando
DNS_DOMAIN_ID- El identificador del dominio DNS. Obligatorio.
RATELIMIT_RULE_ID- El identificador de la regla limitadora de velocidad. Obligatorio.
--json- El archivo JSON o la cadena JSON que se utiliza para describir una regla de limitación de velocidad.
- Los campos obligatorios en los datos JSON son
match,threshold,periodyaction:match: Determina qué tráfico tiene en cuenta la regla de limitación de velocidad a la hora de calcular el umbral.request: Coincide con las solicitudes de tipo « HTTP ».methods: HTTP Los métodos pueden ser un subconjunto de[POST,PUT]o todos los de[ALL]. Este campo no es necesario para crear una regla de límite de velocidad. Los valores válidos sonGET,POST,PUT,DELETE,PATCH,HEAD,ALL.schemes: HTTP. Puede ser uno[HTTPS], ambos[HTTP,HTTPS]o todos[_ALL_]. Este campo no es obligatorio.url: El patrón « URL » que debía coincidir estaba formado por el servidor y la ruta, por ejemplo,example.org/path. Los caracteres comodín se expanden para que coincidan con el tráfico aplicable, las series de consulta no se comparan. Utilice*para todo el tráfico de la zona. La longitud máxima es1024.
response: Filtra las respuestas de HTTP antes de que se envíen al cliente. Si se define este campo, el recuento completo del tráfico se realiza en esta fase.status: HTTP Códigos de estado: puede indicarse uno ([403]), varios ([401,403]) o todos (sin especificar este valor). Este campo no es obligatorio. El valor mínimo es100y el valor máximo es999.headers: Matriz de encabezados de respuesta con los que se debe realizar la coincidencia. Si una respuesta no cumple los criterios del encabezado, la solicitud no se tiene en cuenta a efectos de la regla de limitación de frecuencia. Entre los diversos criterios de coincidencia de encabezados se incluyen las siguientes propiedades.name: El nombre del encabezado de respuesta con el que se debe realizar la coincidencia.op: El operador en la comparación: «eq» significa «igual a» y «ne» significa «no igual a». Los valores válidos soneqyne.value: El valor del encabezado, que coincide exactamente.
threshold: El umbral que activa las medidas de mitigación del límite de tasa, que se combinan con el periodo. Por ejemplo, el umbral por período. El valor mínimo es2y el valor máximo es1000000.period: El tiempo, en segundos, para contabilizar el tráfico coincidente. Si el recuento supera el umbral dentro de este periodo, se lleva a cabo la acción. El valor mínimo es1y el valor máximo es3600.action: La acción se lleva a cabo cuando se supera el umbral de tráfico coincidente dentro del periodo definido.mode: El tipo de acción realizada. Los valores válidos sonsimulate,ban,challengeyjs_challenge.timeout: El tiempo, en segundos, expresado como un número entero, para llevar a cabo la medida de mitigación. El tiempo de espera es igual o superior al periodo. Este campo solo es válido si la modalidad essimulateoban. El valor mínimo es10y el valor máximo es86400.response: Tipo de contenido y cuerpo personalizados que se van a devolver. Este valor prevalece sobre el error personalizado correspondiente a la zona. Este campo no es obligatorio. Si no se especifica, se muestra la página de error HTML predeterminada. Este campo solo es válido si la modalidad essimulateoban.content_type: El tipo de contenido del cuerpo, que debe ser uno de los siguientes:text/plain,text/xml,application/json.body: El cuerpo que regresará. Este contenido se debe ajustar acontent_type. La longitud máxima es10240.
- Los campos opcionales son
disabled,descriptioncorrelateybypass:disabled: Si esta regla de limitación de velocidad está desactivada actualmente.description: Una nota que puedes utilizar para describir el motivo de una regla de limitación de velocidad.correlate: Si se desea habilitar la limitación de velocidad basada en NAT.by: El valor válido es «nat».
bypass: Criterios que permiten eludir el límite de velocidad. Por ejemplo, para indicar que no se debe aplicar un límite de frecuencia a un conjunto de URL.name: El valor válido es «url».value: La URL que se quiere omitir.
- Los campos obligatorios en los datos JSON son
Datos JSON de ejemplo:
{
"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- Nombre o ID de instancia. Si no se especifica, se utiliza la instancia de contexto indicada en «
ibmcloud cis instance-set INSTANCE». --output- Especifica el formato de salida; solo se admite «
JSON».
Eliminación de una regla de limitación de velocidad desde la CLI
Ejecuta el siguiente comando para eliminar una regla de limitación de velocidad desde la CLI:
ibmcloud cis ratelimit-rule-delete DNS_DOMAIN_ID RATELIMIT_RULE_ID [--instance INSTANCE]
Opciones de comando
DNS_DOMAIN_ID- El identificador del dominio DNS. Obligatorio.
RATELIMIT_RULE_ID- El identificador de la regla de limitación de frecuencia. Obligatorio.
-i, --instance- Nombre o ID de instancia. Si no se especifica, se utiliza la instancia de contexto indicada en «
ibmcloud cis instance-set INSTANCE».
Para obtener más información, consulta la sección sobre limitación de velocidad de la CLI.
Creación de una regla de limitación de velocidad personalizada con Terraform
Para crear un conjunto de reglas de limitación de velocidad, primero debe crear un punto de entrada y, a continuación, crear el conjunto de reglas de limitación de velocidad. Para hacerlo, siga estos pasos:
-
Para crear un conjunto de reglas de punto de entrada, ejecuta el siguiente 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 ] } }Utiliza un
lifecyclebloque para evitar que Terraform actualice el conjunto de reglas del punto de entrada. Algunos parámetros de punto de entrada se actualizan durante cadaterraform apply, lo que puede introducir cambios de configuración no deseados. Ellifecyclebloque te ayuda a ignorar estas actualizaciones y mantener la estabilidad de los recursos. -
Para crear un conjunto de reglas de limitación de velocidad, ejecuta el siguiente 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 } } }
El siguiente ejemplo muestra cómo crear un punto de entrada y una regla de limitación de velocidad 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
}
}
}