Configurer la limitation du débit

Cette page contient des informations sur la configuration des règles de Google Cloud Armor de manière à appliquer des limites de débit par client en configurant une action de limitation de débit ou d'exclusion basée sur le taux. Avant de configurer la limitation du débit, assurez-vous de connaître les informations de la présentation de la limitation de débit.

Avant de commencer

Les sections suivantes expliquent tous les rôles et autorisations Identity and Access Management (IAM) requis pour configurer les stratégies de sécurité Google Cloud Armor. Pour les cas d'utilisation de ce document, vous n'avez besoin que de l'autorisation compute.securityPolicies.create.

Configurer les autorisations IAM pour les stratégies de sécurité Google Cloud Armor

Les opérations suivantes nécessitent le rôle IAM Administrateur de sécurité Identity and Access Management (roles/compute.securityAdmin):

  • Configurer, modifier, mettre à jour et supprimer une stratégie de sécurité Google Cloud Armor
  • À l'aide des méthodes d'API suivantes :
    • SecurityPolicies insert
    • SecurityPolicies delete
    • SecurityPolicies patch
    • SecurityPolicies addRule
    • SecurityPolicies patchRule
    • SecurityPolicies removeRule

Un utilisateur disposant du rôle Administrateur de réseau Compute (roles/compute.networkAdmin) peut effectuer les opérations suivantes:

  • Définir une stratégie de sécurité Google Cloud Armor pour un service de backend
  • À l'aide des méthodes d'API suivantes :
    • BackendServices setSecurityPolicy
    • BackendServices list (gcloud uniquement)

Les utilisateurs disposant du rôle Administrateur de sécurité (roles/iam.securityAdmin) et du rôle Administrateur de réseau Compute peuvent afficher les stratégies de sécurité Google Cloud Armor à l'aide des méthodes d'API SecurityPolicies get, list et getRule.

Configurer les autorisations IAM pour les rôles personnalisés

Le tableau suivant répertorie les autorisations standards des rôles IAM, ainsi que les méthodes d'API associées.

Autorisation IAM Méthodes d'API
compute.securityPolicies.create SecurityPolicies insert
compute.securityPolicies.delete SecurityPolicies delete
compute.securityPolicies.get SecurityPolicies get
SecurityPolicies getRule
compute.securityPolicies.list SecurityPolicies list
compute.securityPolicies.use BackendServices setSecurityPolicy
compute.securityPolicies.update SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
compute.backendServices.setSecurityPolicy BackendServices setSecurityPolicy

Règles de limitation du débit

Les règles de limitation du débit ont le format suivant dans la Google Cloud CLI:

gcloud compute security-policies rules create PRIORITY \
    --security-policy=SECURITY_POLICY \
    {--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE} \
    --action "throttle" \
    --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \
    --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \
    --conform-action=[allow] \
    --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] \
    --exceed-redirect-type=[google-recaptcha|external-302] \
    --exceed-redirect-target=REDIRECT_URL \
    --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] \
    --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]

Limiter le débit sur des clés uniques

Par exemple, la commande gcloud CLI suivante crée une règle throttle au niveau de priorité 105 avec une limite de débit de 100 requêtes toutes les 60 secondes pour chaque adresse IP dans 1.2.3.0/24. Les requêtes qui dépassent la limite de débit renvoient un code d'erreur 429.

gcloud compute security-policies rules create 105 \
    --security-policy SECURITY_POLICY \
    --src-ip-ranges="1.2.3.0/24" \
    --action=throttle \
    --rate-limit-threshold-count=100 \
    --rate-limit-threshold-interval-sec=60 \
    --conform-action=allow \
    --exceed-action=deny-429 \
    --enforce-on-key=IP

Par exemple, la commande gcloud CLI suivante crée une règle throttle au niveau de priorité 110 avec une limite de débit de 10 requêtes toutes les 60 secondes pour chaque valeur unique de l'en-tête HTTP User-Agent sur toutes les requêtes provenant d'adresses IP dans 1.2.3.0/24. Les requêtes qui dépassent la limite de débit renvoient un code d'erreur 429.

gcloud compute security-policies rules create 110 \
    --security-policy SECURITY_POLICY \
    --src-ip-ranges="1.2.3.0/24" \
    --action=throttle \
    --rate-limit-threshold-count=10 \
    --rate-limit-threshold-interval-sec=60 \
    --conform-action=allow \
    --exceed-action=deny-429 \
    --enforce-on-key=HTTP-HEADER \
    --enforce-on-key-name='User-Agent'

Enfin, vous pouvez appliquer des mesures d'exclusion basées sur le débit pour les utilisateurs disposant d'un cookie d'exception reCAPTCHA valide. Par exemple, la commande gcloud CLI suivante crée une règle throttle au niveau de priorité 115 avec une limite de débit de 20 requêtes par tranche de 5 minutes pour chaque cookie d'exception reCAPTCHA unique parmi toutes les requêtes ayant un cookie d'exception reCAPTCHA valide. Les requêtes qui dépassent la limite de débit sont redirigées vers l'évaluation reCAPTCHA. Pour en savoir plus sur les cookies d'exception et l'évaluation reCAPTCHA, consultez la présentation de la gestion des bots.

gcloud compute security-policies rules create 115 \
    --security-policy SECURITY_POLICY \
    --expression="token.recaptcha_exemption.valid" \
    --action=throttle \
    --rate-limit-threshold-count=20 \
    --rate-limit-threshold-interval-sec=300 \
    --conform-action=allow \
    --exceed-action=redirect \
    --exceed-redirect-type=google-recaptcha \
    --enforce-on-key=HTTP-COOKIE \
    --enforce-on-key-name="recaptcha-ca-e"

Limitation du débit en fonction des empreintes JA3

Vous pouvez utiliser des empreintes JA3 comme clé de limitation du débit. L'exemple suivant crée une règle throttle au niveau de priorité 1000 avec une limite de débit de 20 requêtes par tranche de 5 minutes qui correspond aux requêtes avec le chemin /login, en fonction de l'empreinte JA3 du client. Les requêtes qui dépassent la limite de débit sont refusées.

gcloud compute security-policies rules create 1000 \
    --security-policy SECURITY_POLICY \
    --expression "request.path.matches('/login')" \
    --action throttle \
    --rate-limit-threshold-count 20 \
    --rate-limit-threshold-interval-sec 300 \
    --conform-action allow \
    --exceed-action deny-429 \
    --enforce-on-key-configs tls-ja3-fingerprint

Limiter le débit en fonction de l'adresse IP de l'utilisateur

Lorsque vous recevez des requêtes via un proxy en amont, vous pouvez appliquer une limitation du débit en fonction de l'adresse IP du client d'origine. L'exemple suivant crée une règle throttle au niveau de priorité 1000 avec une limite de débit de 20 requêtes toutes les 5 minutes qui correspond aux requêtes avec le chemin /login, en fonction de l'adresse IP du client d'origine. Les requêtes qui dépassent la limite de limitation sont refusées.

gcloud compute security-policies rules create 1000 \
    --security-policy SECURITY_POLICY
    --expression "request.path.matches('/login')"
    --action throttle
    --rate-limit-threshold-count 20
    --rate-limit-threshold-interval-sec 300
    --conform-action allow
    --exceed-action deny-429
    --enforce-on-key-configs user-ip

Pour en savoir plus sur la prise en charge des adresses IP des utilisateurs, consultez la documentation de référence sur le langage des règles.

Limiter le débit en fonction de plusieurs clés

Vous pouvez également limiter le trafic en fonction de plusieurs clés de limitation du débit à l'aide de l'option enforce-on-key-configs. Cet indicateur remplace à la fois l'indicateur enforce-on-key et l'indicateur enforce-on-key-name. L'indicateur enforce-on-key-configs nécessite une liste de paires KEY=NAME séparées par une virgule. Toutefois, vous n'avez pas besoin de fournir de nom pour certaines clés.

L'exemple suivant crée une règle throttle pour la stratégie POLICY_NAME au niveau de priorité 105 avec une limite de débit de 100 requêtes toutes les 60 secondes pour chaque combinaison de HTTP-PATH et site_id sur toutes les requêtes provenant d'adresses IP dans 1.2.3.0/24. Les requêtes qui dépassent la limite de débit renvoient un code d'erreur 429.

gcloud compute security-policies rules create 105 \
    --security-policy=POLICY_NAME \
    --src-ip-ranges="1.2.3.0/24" \
    --action=throttle \
    --rate-limit-threshold-count=100 \
    --rate-limit-threshold-interval-sec=60 \
    --conform-action=allow \
    --exceed-action=deny-429 \
    --enforce-on-key-configs="HTTP-PATH,HTTP-COOKIE=site_id"

Règles pour les exclusions basées sur le taux

Les règles d'exclusion basées sur le taux ont le format suivant dans gcloud CLI :

gcloud compute security-policies rules create PRIORITY \
    --security-policy=SECURITY_POLICY \
    {--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE} \
    --action "rate-based-ban" \
    --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \
    --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \
    --ban-duration-sec=BAN_DURATION_SEC \
    --ban-threshold-count=BAN_THRESHOLD_COUNT \
    --ban-threshold-interval-sec=BAN_THRESHOLD_INTERVAL_SEC \
    --conform-action=[allow] \
    --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] \
    --exceed-redirect-type=[google-recaptcha|external-302] \
    --exceed-redirect-target=REDIRECT_URL \
    --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] \
    --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]

Par exemple, la commande gcloud CLI suivante crée, pour chaque adresse IP dont les requêtes correspondent à un en-tête fish dont la valeur est tuna, une règle d'exclusion basée sur le taux avec une priorité de 100 qui bannit l'adresse pendant 300 secondes lorsque le débit dépasse 50 requêtes toutes les 120 secondes. Les requêtes envoyées par des adresses bannies renvoient un code d'erreur 404.

gcloud compute security-policies rules create 100 \
    --security-policy=sec-policy \
    --expression="request.headers['fish'] == 'tuna'" \
    --action=rate-based-ban \
    --rate-limit-threshold-count=50 \
    --rate-limit-threshold-interval-sec=120 \
    --ban-duration-sec=300 \
    --conform-action=allow \
    --exceed-action=deny-404 \
    --enforce-on-key=IP

Par exemple, la commande gcloud CLI suivante crée une règle d'exclusion basée sur le taux au niveau de priorité 101 afin de limiter toutes les requêtes dont le code de région correspond à US, à raison de 10 requêtes toutes les 60 secondes. La règle bannit également les requêtes provenant de la région US pendant 300 secondes lorsque le débit dépasse la limite de 1 000 requêtes pour 600 secondes. Les requêtes envoyées par des adresses bannies renvoient un code d'erreur 403.

gcloud compute security-policies rules create 101 \
    --security-policy sec-policy \
    --expression "origin.region_code == 'US'" \
    --action rate-based-ban \
    --rate-limit-threshold-count 10 \
    --rate-limit-threshold-interval-sec 60 \
    --ban-duration-sec 300 \
    --ban-threshold-count 1000 \
    --ban-threshold-interval-sec 600 \
    --conform-action allow \
    --exceed-action deny-403 \
    --enforce-on-key ALL

Par exemple, la commande gcloud CLI suivante crée une règle d'exclusion basée sur le taux au niveau de priorité 102 pour limiter toutes les requêtes provenant de n'importe quelle plage d'adresses IP source à raison de 20 requêtes toutes les 60 secondes. La règle bannit également les requêtes de toute plage d'adresses IP sources pendant 600 secondes lorsque le débit des requêtes dépasse la limite de 500 requêtes pour 400 secondes. Les requêtes envoyées par des adresses bannies renvoient un code d'erreur 429.

gcloud compute security-policies rules create 102 \
    --security-policy sec-policy \
    --src-ip-ranges="*" \
    --action rate-based-ban \
    --rate-limit-threshold-count 20 \
    --rate-limit-threshold-interval-sec 60 \
    --ban-duration-sec 600 \
    --ban-threshold-count 500 \
    --ban-threshold-interval-sec 400 \
    --conform-action allow \
    --exceed-action deny-429 \
    --enforce-on-key ALL

Modifier une règle de limitation en règle d'exclusion basée sur le taux

Vous pouvez utiliser la commande suivante pour remplacer une action de limitation par une action d'interdiction basée sur le débit pour une règle existante.

gcloud compute security-policies rules update 105 \
--action=rate-based-ban \
--security-policy=sec-policy \
--ban-duration-sec=600

Vous ne pouvez pas modifier l'action d'une règle existante d'une action d'exclusion basée sur le taux à une action de limitation.

Étape suivante