Résoudre les problèmes liés à Google Cloud Armor

Suivez ces instructions pour résoudre les problèmes liés à vos stratégies de sécurité Google Cloud Armor.

Problèmes d'ordre général

Le trafic est autorisé malgré la configuration d'une règle de refus dans la stratégie de sécurité Google Cloud Armor

Pour régler ce problème, procédez comme suit :

  1. Assurez-vous que la stratégie de sécurité Google Cloud Armor est associée à un service de backend cible. Par exemple, la commande suivante décrit toutes les données associées au service de backend BACKEND. Les résultats renvoyés doivent inclure le nom de la stratégie de sécurité Google Cloud Armor associée à ce service de backend.

    gcloud compute backend-services describe BACKEND
    
  2. Consultez les journaux HTTP(S) pour déterminer la stratégie et la règle correspondant à votre trafic ainsi que l'action associée. Pour afficher les journaux, utilisez Cloud Logging.

    Vous trouverez ci-dessous un exemple de journal d'une requête autorisée avec les champs intéressants mis en surbrillance. Vérifiez les champs suivants et assurez-vous qu'ils correspondent à la règle que vous avez configurée pour refuser le trafic :

    • configuredAction doit correspondre à l'action configurée dans la règle.
    • name doit correspondre au nom de la stratégie de sécurité Google Cloud Armor associée à ce service de backend.
    • outcome doit correspondre à configuredAction.
    • priority doit correspondre au numéro de priorité de la règle.
      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: BACKEND_SERVICE_NAME
             forwarding_rule_name: FORWARDING_RULE_NAME
             project_id: PROJECT_ID
             target_proxy_name: TARGET_HTTP_PROXY_NAME
             url_map_name: URL_MAP_NAME
             zone: global
           type: http_load_balancer
         severity: INFO
         timestamp: '2017-04-18T18:57:05.845960288Z'
    
  3. Passez en revue la hiérarchie des règles pour vous assurer que la bonne règle est mise en correspondance. Il est possible qu'une règle d'une priorité plus élevée avec une action d'autorisation corresponde à votre trafic. Exécutez la commande describe sur security-policies dans l'outil de ligne de commande gcloud pour afficher le contenu de la stratégie de sécurité Google Cloud Armor.

    Ainsi, l'exemple suivant montre comment une règle d'autorisation d'une priorité plus élevée (de priorité 100) correspond au trafic provenant de l'adresse IP 1.2.3.4, ce qui empêche la règle de refus d'une priorité inférieure (de priorité 200) de se déclencher et de bloquer le trafic.

    gcloud compute security-policies describe POLICY_NAME
    

    Sortie :

      creationTimestamp: '2017-04-18T14:47:58.045-07:00
      description: ''
      fingerprint: Yu5spBjdoC0=
      id: '2560355463394441057'
      kind: compute#securityPolicy
      name: POLICY_NAME
      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
    

La règle préconfigurée renvoie des faux positifs

La détection des attaques XSS et SQLi est basée sur la correspondance de signature statique sur les en-têtes de requête HTTP et d'autres paramètres L7. Ces modèles d'expression régulière sont sujets aux faux positifs. Vous pouvez utiliser la règle préconfigurée pour la détection XSS et SQLi en mode aperçu, puis rechercher d'éventuels faux positifs dans le journal.

Si vous en trouvez un, vous pouvez comparer le contenu du trafic avec les règles ModSecurity CRS. Si la règle n'est pas valide ou n'est pas pertinente, désactivez-la à l'aide de l'expression evaluatePreconfiguredExpr et spécifiez l'ID de la règle dans l'argument exclude ID list.

Après avoir examiné les journaux et supprimé tous les faux positifs, désactivez le mode aperçu.

Pour ajouter une règle préconfigurée en mode aperçu :

  1. Créez une stratégie de sécurité avec l'ensemble d'expressions préconfiguré en mode aperçu :

    gcloud compute security-policies rules create 1000
       --security-policy POLICY_NAME
       --expression "evaluatePreconfiguredExpr('xss-stable')"
       --action deny-403
       --preview
    
  2. Dans les journaux HTTP(S), recherchez des champs de requête HTTP tels que url et cookie. Par exemple, le champ requestUrl se compare positivement à l'ID de règle ModSecurity CRS 941180 :

    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: POLICY_NAME
        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: BACKEND_SERVICE
        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. Excluez l'ID de règle ModSecurity CRS 941180 en mettant à jour la règle dans la stratégie de sécurité Google Cloud Armor :

    gcloud compute security-policies rules update 1000 \
        --security-policy POLICY_NAME \
        --expression "evaluatePreconfiguredExpr('xss-stable', ['owasp-crs-v030001-id941180-xss'])" \
        --action deny-403 \
        --preview
    
  4. Passez en revue les journaux, puis désactivez le mode aperçu pour mettre en œuvre la règle.

Les clients avec des signatures refusées ne sont ni bloqués, ni refusés

Si vous utilisez Google Cloud Armor avec Cloud CDN, les stratégies de sécurité ne sont appliquées que pour les requêtes de contenu dynamique, les défauts de cache (miss) ou d'autres requêtes destinées au serveur d'origine du CDN. Les succès de cache (hit) sont diffusés même si la stratégie de sécurité Google Cloud Armor en aval empêche cette requête d'atteindre le serveur d'origine du CDN.

Problèmes liés aux listes d'adresses IP nommées

Cette section fournit des informations sur la résolution des problèmes liés aux listes d'adresses IP nommées.

Adresses IP dans une liste d'adresses IP nommée

Les adresses IP dans les listes correspondent toujours aux adresses IP des sites Web des fournisseurs répertoriés dans le guide sur les listes d'adresses IP nommées Google Cloud Armor. Si vous avez des questions sur les listes, contactez l'équipe d'assistance Cloud.

Les adresses IP d'une liste d'adresses IP nommée sont obsolètes dans Google Cloud Armor.

Google Cloud Armor synchronise quotidiennement ses listes avec des fournisseurs de listes d'adresses IP. Il est possible que des données non actualisées soient différées de quelques heures ou d'une journée par rapport à celles d'un fournisseur. Toutefois, si vous pensez que le temps de retard de ces données est plus long que prévu (par exemple, plus d'une semaine), contactez l'équipe d'assistance Cloud.

Difficulté à créer une stratégie de sécurité faisant référence à une liste d'adresses IP nommée

Vous pouvez tenter de créer une stratégie de sécurité référençant une liste d'adresses IP nommée, à l'aide d'une commande telle que :

gcloud compute security-policies rules create 750 \
    --security-policy my \
    --expression "evaluatePreconfiguredExpr('sourceiplist-abc')" \
    --action "allow"

Si la commande échoue, l'erreur qui s'affiche ressemble à ceci :

ERROR: (gcloud.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.

Assurez-vous que le fournisseur en question est accepté et que le nom de la liste d'adresses IP est correctement renseigné. Vous pouvez le vérifier à l'aide de la commande gcloud suivante afin de répertorier les ensembles d'expressions préconfigurés actuels :

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

Le trafic est bloqué malgré une règle préconfigurée pour une liste d'autorisation d'adresses IP nommée.

Il se peut que le trafic soit bloqué à partir d'une adresse IP figurant sur une liste d'adresses IP nommée :

  1. Assurez-vous que le trafic provient d'une adresse IP figurant sur une liste d'autorisation d'adresses IP nommée.

  2. Vérifiez si d'autres règles de sécurité avec une priorité plus élevée peuvent bloquer le trafic. Si le problème persiste, contactez l'équipe d'assistance Cloud.

  3. Assurez-vous que la stratégie de sécurité est associée au service de backend approprié :

    gcloud compute backend-services describe BACKEND_SERVICE
    
  4. Vérifiez les règles figurant dans la stratégie de sécurité. Exemple :

     gcloud compute security-policies describe POLICY_NAME
    

    La commande renvoie des informations semblables à ce qui suit :

    ---
    …
    name: POLICY_NAME
    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
    …
    

    La stratégie de sécurité ci-dessus contient trois règles : une règle de refus par défaut, une règle d'autorisation pour les adresses IP de Fastly et une règle de refus pour une URL de provenance contenant xyz. Leurs priorités respectives sont également répertoriées.

  5. Examinez les journaux pour déterminer quelle règle est mise en correspondance avec votre trafic et l'action associée. Pour plus d'informations sur la journalisation, consultez la page Afficher les journaux dans l'ancienne visionneuse de journaux pour l'API Cloud Logging.

    Voici un exemple de journal :

     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: "POLICY_NAME"
          outcome: "DENY"
          priority: 50
        }
        statusDetails: "denied_by_security_policy"
      }
      …
    

    D'après le journal précédent, la requête provient de 23.230.32.10, qui est couvert par la liste d'adresses IP publiques de Fastly. Cependant, la requête est associée à une règle de refus dont la priorité est supérieure à 50. Si l'on compare cette valeur à celle figurant dans la stratégie de sécurité, la règle correspond à la règle de refus d'une URL de provenance contenant xyz. Comme la requête contient une URL de provenance http://www.xyz.com/, l'application des règles de sécurité fonctionne correctement.

Problèmes liés aux résultats générés par Security Command Center

La fiche Google Cloud Armor n'apparaît pas dans Security Command Center

Activez les résultats de Google Cloud Armor dans l'interface Security Command Center.

Les résultats de Google Cloud Armor n'apparaissent pas dans Security Command Center

Si les résultats de Google Cloud Armor n'apparaissent pas dans Security Command Center, le trafic vers les services de backend peut ne pas répondre aux critères d'obtention d'un résultat.

Pour toute question concernant le volume de trafic vers vos backends, consultez les statistiques des requêtes dans les tableaux de bord Cloud Monitoring sous Stratégies de sécurité réseau.

Les résultats sont trop bruyants

Pour obtenir de l'aide concernant ce problème, contactez l'équipe d'assistance Cloud.

Étape suivante