Ratenbegrenzung konfigurieren

Diese Seite enthält Informationen zum Konfigurieren von Google Cloud Armor-Regeln, um Ratenbegrenzungen pro Client durch Konfigurieren einer drosselnden oder ratenbasierten Sperraktion zu erzwingen. Bevor Sie die Ratenbegrenzung konfigurieren, sollten Sie sich mit den Informationen unter Ratenbegrenzung – Übersicht vertraut machen.

Hinweise

In den folgenden Abschnitten werden alle IAM-Rollen und -Berechtigungen (Identity and Access Management) erläutert, die zum Konfigurieren von Google Cloud Armor-Sicherheitsrichtlinien erforderlich sind. Für die Anwendungsfälle in diesem Dokument benötigen Sie nur die Berechtigung compute.securityPolicies.create.

IAM-Berechtigungen für Google Cloud Armor-Sicherheitsrichtlinien einrichten

Für die folgenden Vorgänge ist die IAM-Rolle Compute Security Admin (roles/compute.securityAdmin) erforderlich:

  • Google Cloud Armor-Sicherheitsrichtlinie konfigurieren, ändern, aktualisieren und löschen
  • Mithilfe der folgenden API-Methoden:
    • SecurityPolicies insert
    • SecurityPolicies delete
    • SecurityPolicies patch
    • SecurityPolicies addRule
    • SecurityPolicies patchRule
    • SecurityPolicies removeRule

Ein Nutzer mit der Rolle „Compute-Netzwerkadministrator“ (roles/compute.networkAdmin) kann die folgenden Vorgänge ausführen:

  • Google Cloud Armor-Sicherheitsrichtlinie für einen Back-End-Dienst festlegen
  • Mithilfe der folgenden API-Methoden:
    • BackendServices setSecurityPolicy
    • BackendServices list (nur gcloud)

Nutzer mit der Rolle „Sicherheitsadministrator“ (roles/iam.securityAdmin) und der Rolle „Compute-Netzwerkadministrator“ können Google Cloud Armor-Sicherheitsrichtlinien mithilfe der SecurityPolicies API-Methoden get, list und getRule ansehen.

IAM-Berechtigungen für benutzerdefinierte Rollen einrichten

In der folgenden Tabelle sind die grundlegenden Berechtigungen der IAM-Rollen und die zugehörigen API-Methoden aufgeführt.

IAM-Berechtigung API-Methoden
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

Regeln für ratenbasierte Drosselung

Regeln für die preisbasierte Drosselung haben in der Google Cloud CLI das folgende Format:

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]

Ratenbegrenzung für einzelne Schlüssel

Mit dem folgenden Befehl der gcloud CLI wird beispielsweise eine throttle-Regel mit der Priorität 105 mit einer Ratenbegrenzung von 100 Anfragen pro 60 Sekunden für jede IP-Adresse in 1.2.3.0/24 erstellt. Bei Anfragen, die das Drosselungslimit überschreiten, wird der Fehlercode 429 zurückgegeben.

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

Mit dem folgenden Befehl der gcloud CLI wird beispielsweise eine throttle-Regel mit der Priorität 110 mit einer Ratenbegrenzung von 10 Anfragen pro 60 Sekunden für jeden eindeutigen Wert des HTTP-Headers User-Agent für alle Anfragen von IP-Adressen in 1.2.3.0/24 erstellt. Anfragen, die das Drosselungslimit überschreiten, geben den Fehlercode 429 zurück.

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'

Außerdem können Sie ratenbasierte Sperren für Nutzer mit einem gültigen reCAPTCHA-Ausnahme-Cookie festlegen. Mit dem folgenden gcloud CLI-Befehl wird beispielsweise eine throttle-Regel mit der Priorität 115 mit einer Ratenbegrenzung von 20 Anfragen pro 5 Minuten für jedes eindeutige reCAPTCHA-Ausnahmecookie für alle Anfragen erstellt, die ein gültiges reCAPTCHA-Ausnahmecookie haben. Anfragen, die das Drosselungslimit überschreiten, werden zur reCAPTCHA-Bewertung weitergeleitet. Weitere Informationen zu Ausnahmecookies und der reCAPTCHA-Bewertung finden Sie in der Übersicht zur Botverwaltung.

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"

Ratenbegrenzung auf Basis von JA3-Fingerabdrücken

Sie können JA3-Fingerabdrücke als Ratenbegrenzungsschlüssel verwenden. Im folgenden Beispiel wird eine throttle-Regel mit der Priorität 1000 mit einem Ratenlimit von 20 Anfragen pro 5 Minuten erstellt, die auf dem JA3-Fingerabdruck des Clients basiert und für Anfragen mit dem Pfad /login übereinstimmt. Anfragen, die das Drosselungslimit überschreiten, werden abgelehnt.

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

Ratenbegrenzung basierend auf der IP-Adresse des Nutzers

Wenn Sie Anfragen erhalten, die über einen Upstream-Proxy eingehen, können Sie eine Ratenbegrenzung basierend auf der IP-Adresse des ursprünglichen Clients anwenden. Im folgenden Beispiel wird eine throttle-Regel mit der Priorität 1000 mit einer Ratenbegrenzung von 20 Anfragen pro 5 Minuten erstellt, die auf der IP-Adresse des ursprünglichen Clients basiert, die mit dem Pfad /login übereinstimmt. Anfragen, die das Drosselungslimit überschreiten, werden abgelehnt.

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

Weitere Informationen zur Unterstützung von Nutzer-IP-Adressen finden Sie in der Referenz zur Regelsprache.

Ratenbegrenzung basierend auf mehreren Schlüsseln

Sie können den Traffic auch anhand mehrerer Ratenbegrenzungsschlüssel drosseln, indem Sie das Flag enforce-on-key-configs verwenden. Dieses Flag ersetzt sowohl das Flag enforce-on-key als auch das Flag enforce-on-key-name. Das Flag enforce-on-key-configs erfordert eine durch Kommas getrennte Liste von KEY=NAME-Paaren. Allerdings müssen Sie für einige Schlüssel keinen Namen angeben.

Im folgenden Beispiel wird eine throttle-Regel für die Richtlinie POLICY_NAME mit der Priorität 105 mit einer Ratenbegrenzung von 100 Anfragen pro 60 Sekunden für jede Kombination aus HTTP-PATH und site_id für alle Anfragen erstellt, die von IP-Adressen in 1.2.3.0/24 stammen. Anfragen, die das Drosselungslimit überschreiten, geben den Fehlercode 429 zurück.

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"

Regeln für ratenbasierte Sperren

Regeln für ratenbasierte Sperren haben in der gcloud CLI folgendes Format:

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]

Mit dem folgenden Befehl der gcloud CLI wird beispielsweise für jede IP-Adresse, deren Anfragen mit dem Header fish mit dem Wert tuna übereinstimmen, eine ratenbasierte Sperrregel mit der Priorität 100 erstellt. Sie wird 300 Sekunden lang gesperrt, wenn die Rate das Limit von 50 Anfragen pro 120 Sekunden überschreitet. Bei gesperrten Anfragen wird der Fehlercode 404 zurückgegeben.

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

Mit dem folgenden gcloud CLI-Befehl wird beispielsweise eine preisbasierte Sperrregel mit der Priorität 101 erstellt, um alle Anfragen mit dem Regionscode US auf 10 Anfragen pro 60 Sekunden zu begrenzen. Die Regel blockiert außerdem Anfragen aus der Region US für 300 Sekunden, wenn ihre Rate das Limit von 1.000 Anfragen pro 600 Sekunden überschreitet. Gesperrte Anfragen geben den Fehlercode 403 zurück.

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

Mit dem folgenden Befehl der gcloud CLI wird beispielsweise eine ratenbasierte Sperrregel mit der Priorität 102 erstellt, um alle Anfragen aus beliebigen Quell-IP-Adressbereichen auf 20 Anfragen pro 60 Sekunden zu begrenzen. Die Regel blockiert außerdem Anfragen aus beliebigen Quell-IP-Adressbereichen für 600 Sekunden, wenn die Anfragerate das Limit von 500 Anfragen pro 400 Sekunden überschreitet. Bei gesperrten Anfragen wird der Fehlercode 429 zurückgegeben.

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

Nächste Schritte