Utiliser la journalisation des requêtes

Les journaux par requête Google Cloud Armor concernant le nom de la stratégie de sécurité, la priorité de la règle de correspondance, l'action associée et les informations connexes sont consignés dans le cadre de la journalisation de l'équilibrage de charge HTTP(S). La journalisation des nouveaux services de backend est désactivée par défaut. Vous devez donc activer la journalisation de l'équilibrage de charge HTTP(S) pour enregistrer les informations de journalisation complètes concernant Google Cloud Armor.

Les journaux Google Cloud Armor faisant partie des journaux Cloud Load Balancing, la génération de journaux Google Cloud Armor est soumise au taux d'échantillonnage des journaux configuré pour l'équilibrage de charge HTTP(S). Si vous réduisez le taux d'échantillonnage de votre équilibreur de charge HTTP(S) externe, vos journaux de requêtes Google Cloud Armor sont échantillonnés à ce taux réduit.

À l'aide de la journalisation, vous pouvez afficher chaque requête évaluée par une stratégie de sécurité Google Cloud Armor ainsi que le résultat ou l'action entreprise. Par exemple, pour afficher les requêtes refusées, vous pouvez utiliser des filtres tels que jsonPayload.enforcedSecurityPolicy.outcome="DENY" ou jsonPayload.statusDetails="denied_by_security_policy".

Pour activer la journalisation, consultez la section Journalisation et surveillance de l'équilibrage de charge HTTP(S).

En outre, vous pouvez définir différents niveaux de journalisation pour vous aider à déterminer si vos stratégies de sécurité et leurs règles fonctionnent comme prévu. Pour en savoir plus, consultez la section Journalisation détaillée.

Entrées de journal des stratégies de sécurité

Les entrées de journal suivantes dans la visionneuse de journaux concernent la journalisation des règles et stratégies de sécurité Google Cloud Armor. Les entrées incluent la structure suivante dans jsonPayload. Les détails de la requête HTTP apparaissent dans le message httpRequest.

  • statusDetails (chaîne) : description textuelle du code de réponse
    • redirected_by_security_policy : la requête a été redirigée par une règle de redirection, GOOGLE_RECAPTCHA ou EXTERNAL_302
    • throttled_by_security_policy : la requête a été bloquée par une règle de limitation
    • rate_based_banned_by_security_policy : la requête a été interdite par une règle d'exclusion basée sur le taux.
    • denied_by_security_policy : une requête a été refusée par l'équilibreur de charge en raison d'une stratégie de sécurité Google Cloud Armor.
    • body_denied_by_security_policy : un corps de requête a été refusé par l'équilibreur de charge en raison d'une stratégie de sécurité Google Cloud Armor.
  • enforcedSecurityPolicy : règle de la stratégie de sécurité qui a été appliquée
    • name (chaîne) : nom de la stratégie de sécurité
    • priority (numéro) : priorité de la règle de correspondance dans la règle de sécurité
    • configuredAction (chaîne) : nom de l'action configurée dans la règle de correspondance, par exemple, ALLOW ,DENY ,GOOGLE_RECAPTCHA, EXTERNAL_302, THROTTLE (pour une règle de limitation) ou RATE_BASED_BAN (pour une règle d'interdiction basée sur le taux)
    • outcome (chaîne) : résultat de l'exécution de l'action configurée, par exemple ACCEPT, DENY, REDIRECT, THROTTLE ou RATE_BASED_BAN
    • preconfiguredExprIds (chaîne) : ID de toutes les expressions de règles WAF préconfigurées qui ont déclenché la règle
  • previewSecurityPolicy : renseigné si la requête a appelé une règle configurée pour l'aperçu (présent seulement lorsqu'une règle d'aperçu est prioritaire sur la règle appliquée)
    • name (chaîne) : nom de la stratégie de sécurité
    • priority (numéro) : priorité de la règle de correspondance dans la règle de sécurité
    • configuredAction (chaîne) : nom de l'action configurée dans la règle de correspondance, par exemple, ALLOW ,DENY ,GOOGLE_RECAPTCHA, EXTERNAL_302, THROTTLE (pour une règle de limitation) ou RATE_BASED_BAN (pour une règle d'interdiction basée sur le taux)
    • outcome (chaîne) : résultat de l'exécution de l'action configurée, par exemple ACCEPT, DENY, REDIRECT, THROTTLE ou RATE_BASED_BAN
    • preconfiguredExprIds (chaîne) : ID de toutes les expressions de règles WAF préconfigurées qui ont déclenché la règle
  • enforcedEdgeSecurityPolicy (aperçu) : règle de la stratégie de sécurité qui a été appliquée
    • name (chaîne) : nom de la stratégie de sécurité
    • priority (numéro) : priorité de la règle de correspondance dans la règle de sécurité
    • configuredAction (chaîne) : nom de l'action configurée dans la règle de correspondance (par exemple, ALLOW, DENY)
    • outcome (chaîne) : résultat de l'exécution de l'action configurée, par exemple ACCEPT ou DENY
  • previewEdgeSecurityPolicy (aperçu) : renseigné si une requête correspond à une règle de stratégie de sécurité configurée pour l'aperçu (présent seulement lorsqu'une règle d'aperçu est prioritaire sur la règle appliquée)
    • name (chaîne) : nom de la stratégie de sécurité
    • priority (numéro) : priorité de la règle de correspondance dans la règle de sécurité
    • configuredAction (chaîne) : nom de l'action configurée dans la règle de correspondance (par exemple, ALLOW, DENY)
    • outcome (chaîne) : résultat de l'exécution de l'action configurée, par exemple ACCEPT ou DENY

Journalisation détaillée

Il peut être difficile de déterminer pourquoi une règle WAF préconfigurée a été déclenchée par une requête particulière. Les journaux d'événements par défaut de Google Cloud Armor contiennent la règle déclenchée, ainsi que la sous-signature. Toutefois, vous devrez peut-être identifier les détails de la requête entrante ayant déclenché la règle à des fins de dépannage, de validation ou d'ajustement des règles.

Vous pouvez modifier le niveau de détail consigné pour une stratégie à l'aide de l'option --log-level. Cette option peut avoir les valeurs NORMAL ou VERBOSE :

--log-level=[NORMAL | VERBOSE]

Exemple :

gcloud compute security-policies update ca-policy-1 \
    --log-level=VERBOSE

Nous vous recommandons d'activer la journalisation détaillée dès lors que vous créez, modifiez ou dépannez une stratégie.

Valeurs consignées lorsque la journalisation détaillée est activée

Lorsque la journalisation détaillée est activée, des informations supplémentaires sont consignées dans le journal des requêtes d'équilibrage de charge HTTP(S) envoyé à Cloud Logging. Les champs supplémentaires suivants apparaissent dans le journal de requêtes lorsque la journalisation détaillée est activée :

  • matchedFieldType (chaîne) : type de champ à l'origine de la correspondance.

    • ARG_NAMES
    • ARG_VALUES
    • BODY

      • Lorsque le champ BODY se trouve dans le journal, cela signifie que l'intégralité du corps du message POST correspond à une règle.
    • COOKIE_VALUES

    • COOKIE_NAMES

    • FILENAME

    • HEADER_VALUES

    • RAW_URI

    • REFERER

    • REQUEST_LINE

    • URI

    • USER_AGENT

    • HEADER_NAMES

    • ARGS_GET

    • X_FILENAME

    • ARG_NAME_COUNT

    • TRANSFER_ENCODING

    • REQUEST_METHOD

  • matchedFieldName (chaîne) : s'il correspond à la partie valeur d'une paire clé-valeur, la valeur de clé est stockée dans ce champ. Sinon, il est vide.

  • matchedFieldValue (chaîne) : préfixe de 16 octets maximum pour la partie du champ à l'origine de la correspondance.

  • matchedFieldLength (entier) : longueur totale du champ.

  • matchedOffset (entier) : décalage de début dans le champ à l'origine de la correspondance.

  • matchedLength (entier) : longueur de la correspondance.

Par exemple, vous pouvez envoyer cette requête à un projet dans lequel les règles WAF d'injection SQL sont activées :

curl http://IP_ADDR/?sql_table=abc%20pg_catalog%20xyz

L'entrée de l'explorateur de journaux ressemblerait à ceci :

enforcedSecurityPolicy: {
 name: "user-staging-sec-policy"
 priority: 100
 configuredAction: "DENY"
 outcome: "DENY
 preconfiguredExprIds: [
   0: "owasp-crs-v030001-id942140-sqli"
  ]
matchedFieldType: "ARG_VALUES"
matchedFieldName: "sql_table"
matchedFieldValue: "pg_catalog"
matchedFieldLength: 18
matchedOffset: 4
matchedLength: 10
}

Maintenir la confidentialité lorsque la journalisation détaillée est activée

Lorsque vous utilisez la journalisation détaillée, Google Cloud Armor consigne des extraits des éléments des requêtes entrantes qui ont déclenché une règle WAF préconfigurée spécifique. Ces extraits peuvent contenir des fragments d'en-têtes de requête, de paramètres de requête ou d'éléments du corps POST. Il est possible qu'un extrait contienne des données sensibles telles qu'une adresse IP ou d'autres données sensibles issues de la requête entrante, en fonction des éléments figurant dans le corps ou les en-têtes de la requête, et en fonction des éléments déclenchant la règle WAF.

En activant la journalisation détaillée, sachez qu'il existe un risque d'accumulation de données potentiellement sensibles dans vos journaux dans Logging. Nous vous recommandons de n'activer la journalisation détaillée que lors de la création et de la validation de la règle, ou pour le dépannage. En fonctionnement normal, nous vous recommandons de laisser la journalisation détaillée désactivée.

Afficher les journaux

Vous ne pouvez afficher les journaux d'une stratégie de sécurité Google Cloud Armor que dans Google Cloud Console.

Console

  1. Dans Google Cloud Console, accédez à la page Sécurité du réseau.

    Accéder à la page "Sécurité du réseau"

  2. À la page Stratégies de sécurité, sur la ligne d'une stratégie de sécurité, cliquez sur le Menu pour afficher la stratégie dont vous souhaitez consulter les journaux.

  3. Sélectionnez Afficher les journaux.

Gestion des robots

Pour plus de visibilité sur la manière dont Google Cloud Armor évalue les jetons reCAPTCHA Enterprise, jsonPayload inclut le champ supplémentaire suivant :

  • securityPolicyRequestData : données relatives à la requête pendant le traitement par une règle de sécurité, quelle que soit la règle mise en correspondance
    • recaptchaToken : données liées à un jeton reCAPTCHA Enterprise (jeton d'action ou jeton de session)
      • score (float) : score de légitimité de l'utilisateur intégré dans un jeton reCAPTCHA Enterprise. Présent uniquement lorsqu'un jeton reCAPTCHA Enterprise est associé à la requête et que le jeton est décodé correctement. Google Cloud Armor n'essaie de décoder le jeton que s'il existe une règle basée sur le jeton reCAPTCHA Enterprise. Pour en savoir plus, consultez la page Appliquer l'évaluation reCAPTCHA Enterprise.

Exemples de journaux

Voici un exemple de détails de journal pour une règle de limitation qui bloque une requête :

jsonPayload: {
 enforcedSecurityPolicy: {
  priority: 100
  name: "sample-prod-policy"
  configuredAction: "THROTTLE"
  outcome: "THROTTLE"
 }
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 statusDetails: "throttled_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:16:48.185763Z"

Voici un exemple de détails de journal pour une règle d'interdiction basée sur le taux qui bloque une requête :

jsonPayload: {
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 enforcedSecurityPolicy: {
  priority: 150
  name: "sample-prod-policy"
  outcome: "RATE_BASED_BAN"
  configuredAction: "RATE_BASED_BAN"
 }
 statusDetails: "rate_based_banned_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:27:17.393244Z"

Étape suivante

Découvrez comment résoudre les problèmes liés à Google Cloud Armor.