Fehlerbehebung bei Problemen mit Google Cloud Armor

Verwenden Sie diese Anweisungen zur Fehlerbehebung bei Problemen mit Ihren Sicherheitsrichtlinien für Google Cloud Armor.

Traffic ist trotz einer in der Google Cloud Armor-Sicherheitsrichtlinie konfigurierten "deny"-Regel zulässig

  1. Prüfen Sie, ob die Sicherheitsrichtlinie von Google Cloud Armor an einen Ziel-Back-End-Dienst angehängt ist. Der folgende Befehl beschreibt beispielsweise alle Daten, die dem Back-End-Dienst my-backend zugeordnet sind. Die zurückgegebenen Ergebnisse sollten den Namen der Google Cloud Armor-Sicherheitsrichtlinie enthalten, die diesem Back-End-Dienst zugeordnet ist.

    gcloud compute backend-services describe my-backend
    
  2. Prüfen Sie die HTTP(S)-Protokolle, um herauszufinden, welche Richtlinie und Regel für Ihren Traffic zusammen mit der zugehörigen Aktion übereinstimmen. Verwenden Sie Logging, um die Logs aufzurufen.

    Hier ist ein Beispiellog einer zulässigen Anfrage, wobei die Felder von Interesse in Fettschrift dargestellt sind. Prüfen Sie die folgenden Felder und sorgen Sie dafür, dass sie mit der Regel übereinstimmen, die Sie konfiguriert haben, um den Traffic abzulehnen:

    • configuredAction sollte der in der Regel konfigurierten Aktion entsprechen
    • outcome sollte mit configuredAction oben übereinstimmen
    • priority sollte der Prioritätsnummer der Regel entsprechen
    • name sollte mit dem Namen der Google Cloud Armor-Sicherheitsrichtlinie übereinstimmen, die diesem Back-End-Dienst zugeordnet ist
    httpRequest:
     remoteIp: 104.133.0.95
     requestMethod: GET
     requestSize: '801'
     requestUrl: http://74.125.67.38/
     responseSize: '246'
     serverIp: 10.132.0.4
     status: 200
     userAgent: curl/7.35.0
       insertId: ajvis5ev4i60
       internalId:
         projectNumber: '895280006100'
       jsonPayload:
         '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
         **enforcedSecurityPolicy:
           configuredAction: ACCEPT
           name: mydev-policy-log-test1
           outcome: ACCEPT
           priority: 2147483647**
         statusDetails: response_sent_by_backend
       logName: projects/mydev-staging/logs/requests
       resource:
         labels:
           backend_service_name: ''
           forwarding_rule_name: mydev-forwarding-rule
           project_id: mydev-staging
           target_proxy_name: mydev-target-http-proxy
           url_map_name: mydev-url-map
           zone: global
         type: http_load_balancer
       severity: INFO
       timestamp: '2017-04-18T18:57:05.845960288Z'
    
  3. Kontrollieren Sie die Hierarchie der Regeln, damit die richtige Regel auch bestimmt gefunden wird. Es kann sein, dass eine Regel höherer Priorität mit einer "allow"-Aktion Ihrem Traffic entspricht. Verwenden Sie zum Einsehen des Inhalts der Google Cloud Armor-Sicherheitsrichtlinie den Befehl describe für die Sicherheitsrichtlinien im gcloud-Befehlszeilentool.

    Das folgende Beispiel zeigt beispielsweise, wie eine "allow"-Regel mit höherer Priorität (bei Priorität 100) mit dem Traffic von der IP-Adresse 1.2.3.4 übereinstimmt. Hierdurch wird verhindert, dass die "deny"-Regel mit niedrigerer Priorität (bei Priorität 200) den Verkehr auslöst und blockiert.

    gcloud compute security-policies describe my-policy
    
    creationTimestamp: '2017-04-18T14:47:58.045-07:00
    description: ''
    fingerprint: Yu5spBjdoC0=
    id: '2560355463394441057'
    kind: compute#securityPolicy
    name: my-policy
    rules:
    - action: allow
      description: allow high priority rule
      kind: compute#securityPolicyRule
      match:
        srcIpRanges:
        - '1.2.3.4/32'
      preview: false
      priority: 100
    - action: deny
      description: deny lower priority rule
      kind: compute#securityPolicyRule
      match:
        srcIpRanges:
        - '1.2.3.0/24
      preview: false
      priority: 200
    - action: deny
      description: default rule
      kind: compute#securityPolicyRule
      match:
        srcIpRanges:
        - '*'
      preview: false
      priority: 2147483647
      selfLink: http://www.googleapis.com/compute/v1/projects/bigclustertestdev0-devconsole/global/securityPolicies/sp
    

Vorkonfigurierte Regel gibt falsch-positive Ergebnisse zurück

Die XSS- und SQLi-Erkennung basiert auf einem statischen Signaturabgleich mit HTTP-Anfrageheadern und anderen L7-Parametern. Diese Muster für reguläre Ausdrücke sind anfällig für falsch-positive Ergebnisse. Sie können die vorkonfigurierte Regel für die XSS- und SQLi-Erkennung im Vorschaumodus verwenden und dann das Log auf falsch-positive Werte prüfen.

Wenn Sie ein falsch-positives Ergebnis finden, können Sie den Inhalt des Traffics mit den ModSecurity-CRS-Regeln vergleichen. Wenn die Regel ungültig oder nicht relevant ist, deaktivieren Sie diese mit dem Ausdruck evaluatePreconfiguredExpr und geben Sie die Regel-ID im Argument exclude ID list an.

Deaktivieren Sie den Vorschaumodus, nachdem Sie die Logs überprüft und alle falsche positiven Ergebnisse entfernt haben.

So fügen Sie eine vorkonfigurierte Regel im Vorschaumodus hinzu:

  1. Erstellen Sie eine Sicherheitsrichtlinie mit dem vorkonfigurierten Ausdruck, der im Vorschaumodus festgelegt ist:

    gcloud compute security-policies rules create 1000
       --security-policy my-policy
       --expression "evaluatePreconfiguredExpr('xss-stable')"
       --action deny-403
       --preview
    
  2. Prüfen Sie die HTTP(S)-Logs auf HTTP-Anfragefelder wie url und cookie. Beispielsweise ist der Vergleich von requestUrl mit der ModSecurity CRS-Regel ID 941180 positiv:

    httpRequest:
      remoteIp: 104.133.0.95
      requestMethod: GET
      requestSize: '801'
      requestUrl: http://74.125.67.38/foo?document.cookie=1010"
      responseSize: '246'
      serverIp: 10.132.0.4
      status: 200
      userAgent: curl/7.35.0
    insertId: ajvis5ev4i60
    internalId:
      projectNumber: '895280006100'
    jsonPayload:
      '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
      enforcedSecurityPolicy:
        configuredAction: ACCEPT
        name: my-policy
        outcome: ACCEPT
        priority: 2147483647
        preconfiguredExprIds: [ 'owasp-crs-v030001-id941180-xss' ]
      statusDetails: response_sent_by_backend
    logName: projects/mydev-staging/logs/requests
    resource:
      labels:
        backend_service_name: ''
        forwarding_rule_name: mydev-forwarding-rule
        project_id: mydev-staging
        target_proxy_name: mydev-target-http-proxy
        url_map_name: mydev-url-map
        zone: global
      type: http_load_balancer
    severity: INFO
    timestamp: '2017-04-18T18:57:05.845960288Z'
    
  3. Schließen Sie die ModSecurity CRS-Regel ID 941180 aus. Aktualisieren Sie hierzu die Regel in der Google Cloud Armor-Sicherheitsrichtlinie.

    gcloud compute security-policies rules update 1000 \
       --security-policy my-policy \
       --expression "evaluatePreconfiguredExpr('xss-stable', ['owasp-crs-v030001-id941180-xss'])" \
       --action deny-403 \
       --preview
    
  4. Kontrollieren Sie die Protokolle noch einmal und deaktivieren Sie dann den Vorschaumodus, um die Regel zu implementieren.

Clients mit abgelehnten Signaturen werden nicht blockiert oder abgelehnt

Wenn Sie Google Cloud Armor mit Cloud CDN verwenden, werden Sicherheitsrichtlinien nur für Anfragen für dynamischen Inhalt, Cache-Fehler oder andere Anfragen durchgesetzt, die für den CDN-Ursprungsserver bestimmt sind. Cache-Treffer werden auch dann bereitgestellt, wenn die nachgelagerte Google Cloud Armor-Sicherheitsrichtlinie verhindern würde, dass die Anfrage den CDN-Ursprungsserver erreicht.

Probleme mit benannten IP-Adresslisten

Dieser Abschnitt enthält Informationen zum Beheben von Problemen mit benannten IP-Adresslisten.

IP-Adressen in einer benannten IP-Adressliste

Die IP-Adressen in den Listen entsprechen immer den IP-Adressen der Anbieter-Websites, die im Leitfaden Google Cloud Armor mit benannten IP-Adresslisten aufgeführt sind. Wenn Sie Fragen zu den Listen haben, wenden Sie sich an das Cloud-Supportteam.

IP-Adressen in einer Liste benannter IP-Adressen sind in Google Cloud Armor veraltet

Google Cloud Armor synchronisiert seine Listen täglich mit Anbietern von IP-Adressenlisten. Es ist möglich, dass veraltete Daten vorliegen, die ein paar Stunden oder einen Tag Verzug gegenüber den Daten bei einem Anbieter aufweisen. Wenn Sie jedoch der Ansicht sind, dass die veralteten Daten länger als erwartet zurückliegen, z. B. mehr als eine Woche, wenden Sie sich an das Cloud-Supportteam.

Schwierigkeiten beim Erstellen einer Sicherheitsrichtlinie, die auf eine benannte IP-Adressliste verweist

Wenn Sie versuchen, eine Sicherheitsrichtlinie zu erstellen, die auf eine benannte IP-Liste verweist, und der Befehl fehlschlägt, sieht der angezeigte Fehler in etwa so aus:

gcloud beta compute security-policies rules create 750 \
    --security-policy my \
    --expression "evaluatePreconfiguredExpr('sourceiplist-abc')" \
    --action "allow"
ERROR: (gcloud.beta.compute.security-policies.rules.create) Could not fetch resource:
 - Invalid value for field 'resource.match.expr': '{  "expression": "evaluatePreconfiguredExpr(\u0027sourceiplist-abc\u0027)"}'. Error parsing Cloud Armor rule matcher expression: sourceiplist-abc is not a valid preconfigured expression set.

Prüfen Sie, ob der Anbieter unterstützt wird und der Name der IP-Adressliste korrekt angegeben ist. Sie können dies kontrollieren, indem Sie die aktuellen vorkonfigurierten Ausdruckssätze mit dem folgenden gcloud-Befehl auflisten:

gcloud beta compute security-policies list-preconfigured-expression-sets

Der Traffic wird trotz einer vorkonfigurierten Regel für eine Liste mit zulässigen IP-Adressen blockiert

Möglicherweise wird der Traffic von einer IP-Adresse blockiert, die sich in einer benannten IP-Adressliste befindet. Kontrollieren Sie, ob der Traffic von einer IP-Adresse kommt, die sich auf einer Liste der zugelassenen Namen von IP-Adressen befindet. Zweitens sollten Sie prüfen, ob andere Sicherheitsregeln mit einer höheren Priorität den Traffic blockieren können. Wenden Sie sich an das Cloud-Supportteam, wenn das Problem weiterhin auftritt.

Kontrollieren Sie zuerst einmal, ob die Sicherheitsrichtlinie mit dem richtigen Back-End-Dienst verknüpft ist:

gcloud compute backend-services describe my-backend-service

Prüfen Sie als Nächstes die Regeln in der Sicherheitsrichtlinie. Beispiel:

 gcloud compute security-policies describe my-policy
---
…
name: my-policy
rules:
- action: allow
  description: allow fastly ip addresses
  kind: compute#securityPolicyRule
  match:
    expr:
      expression: evaluatePreconfiguredExpr('sourceiplist-fastly')
  preview: false
  priority: 100
- action: deny(403)
  description: Default rule, higher priority overrides it
  kind: compute#securityPolicyRule
  match:
    config:
      srcIpRanges:
      - '*'
    versionedExpr: SRC_IPS_V1
  preview: false
  priority: 2147483647
- action: deny(404)
  description: deny xyz referer
  kind: compute#securityPolicyRule
  match:
    expr:
      expression: request.headers['Referer'].contains('xyz')
  preview: false
  priority: 50
…

Die obige Sicherheitsrichtlinie enthält drei Regeln: eine standardmäßige "deny"-Regel, eine "allow"-Regel zum Zulassen von IP-Adressen von Fastly und eine "deny"-Regel für eine Referenz, die "xyz" enthält. Die jeweiligen Prioritäten sind ebenfalls aufgeführt.

Prüfen Sie als Nächstes die Logs, um festzustellen, welche Regel mit Ihrem Traffic und der zugehörigen Aktion übereinstimmt. Informationen zum Logging finden Sie unter Logs ansehen (Classic).

Das folgende Beispiel zeigt ein Protokoll:

 httpRequest: {
    referer: "http://www.xyz.com/"
    remoteIp: "23.230.32.10"
    requestMethod: "HEAD"
    requestSize: "79"
    requestUrl: "http://www.abc.com/"
    responseSize: "258"
    status: 404
    userAgent: "Mozilla/5.0"
  }
  …
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
    enforcedSecurityPolicy: {
      configuredAction: "DENY"
      name: "my-policy"
      outcome: "DENY"
      priority: 50
    }
    statusDetails: "denied_by_security_policy"
  }
  …

Aus dem obigen Log stammt die Anfrage von 23.230.32.10, die von der öffentlichen IP-Adressliste von Fastly unter https://api.fastly.com/public-ip-list abgedeckt wird. Die Anfrage wird jedoch mit einer "deny"-Regel mit einer höheren Priorität von 50 abgeglichen. Beim Vergleich mit dem Inhalt der Sicherheitsrichtlinie entspricht die Regel der "deny"-Regel für einen Referer, der xyz enthält. Da die Anfrage den Referer http://www.xyz.com/ enthält, funktioniert die Durchsetzung der Sicherheitsregel ordnungsgemäß.

Probleme mit den Ergebnissen des Security Command Centers

Die Google Cloud Armor-Karte wird nicht im Security Command Center angezeigt

Aktivieren Sie die Google Cloud Armor-Befunde in der Security Command Center-Oberfläche.

Ergebnisse aus Google Cloud Armor werden im Security Command Center nicht angezeigt

  • Wenn die Ergebnisse von Google Cloud Armor nicht im Security Command Center angezeigt werden, erfüllt der Traffic zu den Back-End-Diensten möglicherweise nicht die Kriterien dafür.
  • Prüfen Sie bei Fragen zum Trafficvolumen zu Ihren Back-Ends die Anfragestatistik in den Cloud Monitoring-Dashboards unter der Ressource Netzwerksicherheitsrichtlinie.

Die Ergebnisse sind zu ungenau

Wenden Sie sich an das Cloud-Supportteam, um Unterstützung bei diesem Problem zu erhalten.