Ratenbegrenzung konfigurieren

Zum Schutz Ihrer Dienste vor Denial-of-Service-Angriffen (DoS) und Webangriffen können Sie Google Cloud Armor-Sicherheitsrichtlinien konfigurieren, um Ratenlimits pro Client zu erzwingen. Auf dieser Seite wird beschrieben, wie Sie Drosselungs- oder ratenbasierte Aktionen konfigurieren, mit denen Sie die Rate steuern können, mit der Clients Anfragen senden, um Missbrauch zu verhindern und eine faire Ressourcenzuweisung zu gewährleisten. Bevor Sie die Ratenbegrenzung konfigurieren, lesen Sie die Übersicht zur Ratenbegrenzung.

Hinweis

In den folgenden Abschnitten werden alle IAM-Rollen (Identity and Access Management) und -Berechtigungen erläutert, die zum Konfigurieren von 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 Cloud Armor-Sicherheitsrichtlinien einrichten

Für die folgenden Vorgänge ist die Rolle „Compute Security Admin“ für Identity and Access Management (IAM) (roles/compute.securityAdmin) erforderlich:

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

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

  • Cloud Armor-Sicherheitsrichtlinie für einen Backend-Dienst einrichten
  • Mit den folgenden API-Methoden:
    • BackendServices setSecurityPolicy
    • BackendServices list (nur gcloud)

Nutzer mit der Rolle „Security Admin“ (roles/iam.securityAdmin) und der Rolle „Compute Network Admin“ (roles/compute.networkAdmin) können sich Cloud Armor-Sicherheits richtlinien 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, die zugehörigen API-Methoden und die Rollen aufgeführt, die diese Berechtigung gewähren.

IAM-Berechtigung API-Methoden Rollen
compute.securityPolicies.create SecurityPolicies insert Compute Security Admin (roles/compute.securityAdmin)
compute.securityPolicies.delete SecurityPolicies delete Compute Security Admin (roles/compute.securityAdmin)
compute.securityPolicies.get SecurityPolicies get
SecurityPolicies getRule
Security Admin (roles/iam.securityAdmin)
compute.securityPolicies.list SecurityPolicies list Security Admin (roles/iam.securityAdmin)
Beide der folgenden:
  • compute.securityPolicies.use
  • compute.backendServices.
    setSecurityPolicy
BackendServices
setSecurityPolicy
Compute Network Admin (roles/compute.networkAdmin)
compute.securityPolicies.update SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
Compute Security Admin (roles/compute.securityAdmin)

Regeln für ratenbasierte Drosselung

Regeln für die ratenbasierte 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 gcloud CLI-Befehl wird beispielsweise eine throttle-Regel mit der Priorität 105 und einer Ratenbegrenzung von 100 Anfragen pro 60 Sekunden für jede IP-Adresse in 1.2.3.0/24 erstellt. Anfragen, die das Drosselungslimit überschreiten, geben den Statuscode 429 Too Many Requests zurück.

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 gcloud CLI-Befehl wird beispielsweise eine throttle-Regel mit der Priorität 110 und einer Ratenbegrenzung von 10 Anfragen pro 60 Sekunden für jeden eindeutigen Wert des HTTP-Headers User-Agent für alle Anfragen erstellt, die von IP-Adressen in 1.2.3.0/24 stammen. Anfragen, die das Drosselungslimit überschreiten, geben den Statuscode 429 Too Many Requests 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'

Schließlich können Sie ratenbasierte Sperrungen für Nutzer ausgeben, die ein gültiges reCAPTCHA-Ausnahme-Cookie haben. Mit dem folgenden gcloud CLI-Befehl wird beispielsweise eine throttle-Regel mit der Priorität 115 und einem Ratenlimit von 20 Anfragen pro 5 Minuten für jedes einzelne reCAPTCHA-Ausnahme-Cookie für alle Anfragen erstellt, die ein gültiges reCAPTCHA-Ausnahme-Cookie haben. Anfragen, die das Drosselungslimit überschreiten, werden zur reCAPTCHA-Bewertung weitergeleitet. Weitere Informationen zu Ausnahme-Cookies und der reCAPTCHA Bewertung finden Sie in der Übersicht zur Bot-Verwaltung in Cloud Armor.

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 basierend auf JA4- und JA3-Fingerabdrücken

Sie können JA4- und JA3-Fingerabdrücke als Schlüssel für die Ratenbegrenzung verwenden. Im folgenden Beispiel wird eine throttle-Regel mit der Priorität 1000 und einer Ratenbegrenzung von 20 Anfragen pro 5 Minuten erstellt, die auf Anfragen mit dem Pfad /login basiert und auf dem JA4-Fingerabdruck des Clients basiert. 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-ja4-fingerprint

Ratenbegrenzung basierend auf der IP-Adresse des Nutzers

Wenn Sie Anfragen erhalten, die über einen Upstream-Proxy eingehen, können Sie die Ratenbegrenzung basierend auf der IP-Adresse des ursprünglichen Clients anwenden. Im folgenden Beispiel wird eine throttle-Regel mit der Priorität 1000 und einer Ratenbegrenzung von 20 Anfragen pro 5 Minuten erstellt, die auf Anfragen mit dem Pfad /login basiert und auf der IP-Adresse des ursprünglichen Clients basiert. 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 basierend auf mehreren Schlüsseln für die Ratenbegrenzung drosseln. Verwenden Sie dazu das Flag enforce-on-key-configs. Dieses Flag ersetzt sowohl das enforce-on-key Flag als auch das enforce-on-key-name Flag. Für das Flag enforce-on-key-configs ist eine durch Kommas getrennte Liste von KEY=NAME-Paaren erforderlich. Für einige Schlüssel müssen Sie jedoch keinen Namen angeben.

Im folgenden Beispiel wird eine throttle-Regel für die Richtlinie POLICY_NAME mit der Priorität 105 und 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 Statuscode 429 Too Many Requests 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]

Der folgende gcloud CLI-Befehl erstellt beispielsweise eine ratenbasierte Sperrregel mit der Priorität 100 für jede IP-Adresse, deren Anfragen einem Header fish mit dem Wert tuna entsprechen, und sperrt sie für 300 Sekunden, wenn ihre Rate ein Limit von 50 Anfragen pro 120 Sekunden überschreitet. Gesperrte Anfragen geben den Statuscode 404 Not Found zurück.

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

Der folgende gcloud CLI-Befehl erstellt beispielsweise eine ratenbasierte Sperrregel mit der Priorität 101, um alle Anfragen mit dem Regionscode US auf 10 Anfragen pro 60 Sekunden zu begrenzen. Die Regel sperrt außerdem Anfragen aus der Region US für 300 Sekunden, wenn ihre Rate ein Limit von 1.000 Anfragen pro 600 Sekunden überschreitet. Gesperrte Anfragen geben den Statuscode 403 Forbidden 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

Der folgende gcloud CLI-Befehl erstellt beispielsweise eine ratenbasierte Sperrregel mit der Priorität 102, um alle Anfragen aus einem Quell-IP-Adressbereich auf 20 Anfragen pro 60 Sekunden zu beschränken. Die Regel sperrt auch Anfragen aus einem beliebigen Quell-IP-Adressbereich für 600 Sekunden, wenn die Rate der Anfragen ein Limit von 500 Anfragen pro 400 Sekunden überschreitet. Gesperrte Anfragen geben den Statuscode 429 Too Many Requests zurück.

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

Drosselungsregel in eine ratenbasierte Sperrregel ändern

Mit dem folgenden Befehl können Sie die Aktion einer vorhandenen Regel von einer Drosselungsaktion in eine ratenbasierte Sperraktion ändern.

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

Sie können die Aktion einer vorhandenen Regel nicht von einer ratenbasierten Sperraktion in eine Drosselungsaktion ändern.

Nächste Schritte