Présentation de la journalisation des règles de pare-feu

La journalisation des règles de pare-feu vous permet de réaliser des audits, des vérifications et des analyses sur les effets de vos règles de pare-feu. Par exemple, vous pouvez déterminer si une règle de pare-feu conçue pour refuser le trafic fonctionne comme prévu. La journalisation des règles de pare-feu est également utile si vous devez déterminer le nombre de connexions affectées par une règle de pare-feu donnée.

Vous activez la journalisation des règles de pare-feu individuellement pour chaque règle de pare-feu dont vous souhaitez journaliser les connexions. Cette option est disponible pour toute règle de pare-feu, indépendamment de l'action de la règle (autorisation (allow) ou refus (deny)) et de la direction du trafic visé (entrée ou sortie).

Lorsque vous activez la journalisation pour une règle de pare-feu, Google Cloud crée une entrée appelée enregistrement de connexion chaque fois que la règle autorise ou refuse du trafic. Vous pouvez exporter ces enregistrements de connexion vers Cloud Logging, Pub/Sub ou BigQuery pour les analyser.

Chaque enregistrement de connexion contient les adresses IP source et de destination, le protocole et les ports, la date et l'heure, ainsi qu'une référence à la règle de pare-feu appliquée au trafic.

Pour en savoir plus sur l'affichage des journaux, reportez-vous à la page Utiliser la journalisation des règles de pare-feu.

Spécifications

La journalisation des règles de pare-feu obéit aux spécifications suivantes :

Limites de journalisation des connexions

Le nombre maximal de connexions pouvant être consignées par instance de VM dépend de son type de machine. Les limites de journalisation des connexions sont exprimées en nombre maximal de connexions pouvant être enregistrées dans un intervalle de cinq secondes.

Type de machine de l'instance Nombre maximal de connexions enregistrées dans un intervalle de 5 secondes
f1-micro 100 connexions
g1-small 250 connexions
Types de machines comportant de 1 à 8 processeurs virtuels 500 connexions par processeur virtuel
Types de machines ayant plus de 8 processeurs virtuels 4 000 (500×8) connexions

Exemples de journalisation

Une entrée de journal est générée à chaque application d'une règle de pare-feu pour laquelle la journalisation est activée. D'un point de vue global, un flux de paquets donné peut générer plusieurs entrées de journal. Cependant, du point de vue d'une VM donnée, une seule entrée de journal au plus peut être générée si la journalisation est activée pour la règle de pare-feu applicable à ce flux.

Les exemples suivants illustrent le fonctionnement des journaux de pare-feu.

Exemple avec refus de trafic sortant

Dans cet exemple :

  • On considère le trafic entre les instances de VM du réseau VPC example-net hébergé dans le projet example-proj.
  • Les deux instances de VM sont les suivantes :
    • VM1 située dans la zone us-west1-a, ayant l'adresse IP 10.10.0.99 dans le sous-réseau west-subnet (région us-west1).
    • VM2 située dans la zone us-east1-a, ayant l'adresse IP 10.20.0.99 dans le sous-réseau east-subnet (région us-east1).
  • Règle A : une règle de pare-feu refusant le trafic sortant cible toutes les instances du réseau, pour le trafic à destination de 10.20.0.99 (VM2) et circulant sur le port TCP 80.
    • La journalisation est activée pour cette règle.
  • Règle B : une règle de pare-feu autorisant le trafic entrant cible toutes les instances du réseau, pour le trafic en provenance de 10.10.0.99 (VM1) et circulant sur le port TCP 80.
    • La journalisation est également activée pour cette règle.

Vous pouvez utiliser les commandes gcloud suivantes pour créer les règles de pare-feu :

  • Règle A : règle de refus du trafic sortant du port TCP 80, applicable à toutes les instances, à destination de 10.20.0.99 :

        gcloud compute firewall-rules create rule-a \
            --network example-net \
            --action deny \
            --direction egress \
            --rules tcp:80 \
            --destination-ranges 10.20.0.99/32 \
            --priority 10 \
            --enable-logging
        
  • Règle B : règle d'autorisation du trafic entrant sur le port TCP 80, applicable à toutes les instances, en provenance de 10.10.0.99 :

        gcloud compute firewall-rules create rule-b \
            --network example-net \
            --action allow \
            --direction ingress \
            --rules tcp:80 \
            --source-ranges 10.10.0.99/32 \
            --priority 10 \
            --enable-logging
        
Connexion de la VM1 vers la VM2 (cliquez pour agrandir)
Connexion de la VM1 vers la VM2 (cliquez pour agrandir)

Supposons que la VM1 tente de se connecter à la VM2 sur le port TCP 80. Les règles de pare-feu suivantes sont consignées dans le journal :

  • Une entrée de journal pour la règle A, observée du point de vue de la VM1, est générée lorsque la VM1 tente de se connecter à 10.20.0.99 (VM2).
  • Étant donné que la règle A bloque le trafic, la règle B n'est jamais prise en compte. Par conséquent, aucune entrée de journal n'est consignée pour la règle B du point de vue de la VM2.

L'enregistrement de journal de pare-feu est généré dans l'exemple suivant.

Champ Valeurs
connection src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocol=tcp
disposition DENIED
rule_details reference = "network:example-net/firewall:rule-a"
priority = 10
action = DENY
destination_range = 10.20.0.99/32
ip_port_info = tcp:80
direction = egress
instance project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_instance project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-a
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
remote_location Aucune information Ce champ n'est utilisé que si la destination se situe en dehors de votre réseau VPC.

Exemple avec autorisation du trafic sortant et autorisation du trafic entrant

Dans cet exemple :

  • On considère le trafic entre les instances de VM du réseau VPC example-net hébergé dans le projet example-proj.
  • Les deux instances de VM sont les suivantes :
    • VM1 située dans la zone us-west1-a, ayant l'adresse IP 10.10.0.99 dans le sous-réseau west-subnet (région us-west1).
    • VM2 située dans la zone us-east1-a, ayant l'adresse IP 10.20.0.99 dans le sous-réseau east-subnet (région us-east1).
  • Règle A : une règle de pare-feu autorisant le trafic sortant cible toutes les instances du réseau, pour le trafic à destination de 10.20.0.99 (VM2) et circulant sur le port TCP 80.
    • La journalisation est activée pour cette règle.
  • Règle B : une règle de pare-feu autorisant le trafic entrant cible toutes les instances du réseau, pour le trafic en provenance de 10.10.0.99 (VM1) et circulant sur le port TCP 80.
    • La journalisation est également activée pour cette règle.

Vous pouvez utiliser les commandes gcloud suivantes pour créer les deux règles de pare-feu :

  • Règle A : règle d'autorisation du trafic sortant du port TCP 80, applicable à toutes les instances, à destination de 10.20.0.99 (VM2) :

        gcloud compute firewall-rules create rule-a \
            --network example-net \
            --action allow \
            --direction egress \
            --rules tcp:80 \
            --destination-ranges 10.20.0.99/32 \
            --priority 10 \
            --enable-logging
        
  • Règle B : règle d'autorisation du trafic entrant sur le port TCP 80, applicable à toutes les instances, en provenance de 10.10.0.99 (VM1) :

        gcloud compute firewall-rules create rule-b \
            --network example-net \
            --action allow \
            --direction ingress \
            --rules tcp:80 \
            --source-ranges 10.10.0.99/32 \
            --priority 10 \
            --enable-logging
        
Connexion de la VM1 vers la VM2 (cliquez pour agrandir)
Connexion de la VM1 vers la VM2 (cliquez pour agrandir)

Supposons que la VM1 tente de se connecter à la VM2 sur le port TCP 80. Les règles de pare-feu suivantes sont consignées dans le journal :

  • Une entrée de journal pour la règle A, observée du point de vue de la VM1, est générée lorsque la VM1 tente de se connecter à 10.20.0.99 (VM2).
  • Une entrée de journal pour la règle B, observée du point de vue de la VM2, est générée car la VM2 autorise les connexions entrantes en provenance de 10.10.0.99 (VM1).

L'enregistrement de journal de pare-feu rapporté par la VM1 est généré dans l'exemple suivant.

Champ Valeurs
connection src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocol=tcp
disposition ALLOWED
rule_details reference = "network:example-net/firewall:rule-a"
priority = 10
action = ALLOW
destination_range = 10.20.0.99/32
ip_port_info = tcp:80
direction = egress
instance project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_instance project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-a
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
remote_location Aucune information Ce champ n'est utilisé que si la destination se situe en dehors de votre réseau VPC.

L'enregistrement de journal de pare-feu rapporté par la VM2 est généré dans l'exemple suivant.

Champ Valeurs
connection src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocol=tcp
disposition ALLOWED
rule_details reference = "network:example-net/firewall:rule-b"
priority = 10
action = ALLOW
source_range = 10.10.0.99/32
ip_port_info = tcp:80
direction = ingress
instance project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-a
vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
remote_instance project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_location Aucune information Ce champ n'est utilisé que si la destination se situe en dehors de votre réseau VPC.

Exemple de trafic entrant depuis Internet

Dans cet exemple :

  • On considère le trafic provenant d'un système situé en dehors du réseau VPC example-net, à destination d'une instance de VM sur ce réseau. Ce réseau est hébergé dans le projet example-proj.
  • Le système situé sur Internet possède l'adresse IP 203.0.113.114.
  • La VM1 située dans la zone us-west1-a possède l'adresse IP 10.10.0.99 dans le sous-réseau west-subnet (région us-west1).
  • Règle C : une règle de pare-feu autorisant le trafic entrant cible toutes les instances du réseau, pour le trafic en provenance de n'importe quelle adresse IP (0.0.0.0/0) et circulant sur le port TCP 80.
    • La journalisation est activée pour cette règle.
  • Règle D : une règle de pare-feu refusant le trafic sortant cible toutes les instances du réseau, pour le trafic à destination de n'importe quelle adresse IP (0.0.0.0/0), quel que soit le protocole.
    • La journalisation est également activée pour cette règle.

Vous pouvez utiliser les commandes gcloud suivantes pour créer les règles de pare-feu :

  • Règle C : règle d'autorisation du trafic entrant sur le port TCP 80, applicable à toutes les instances, en provenance de n'importe quelle source :

        gcloud compute firewall-rules create rule-c \
            --network example-net \
            --action allow \
            --direction ingress \
            --rules tcp:80 \
            --source-ranges 0.0.0.0/0 \
            --priority 10 \
            --enable-logging
        
  • Règle D : règle de refus du trafic sortant, quel que soit le protocole, applicable à toutes les instances, quelle que soit la destination :

        gcloud compute firewall-rules create rule-d \
            --network example-net \
            --action deny \
            --direction egress \
            --rules all \
            --destination-ranges 0.0.0.0/0 \
            --priority 10 \
            --enable-logging
        
Connexion depuis Internet vers la VM (cliquez pour agrandir)
Connexion depuis Internet vers la VM (cliquez pour agrandir)

Supposons que le système ayant l'adresse IP 203.0.113.114 tente de se connecter à la VM1 sur le port TCP 80. Cela déclenche les événements suivants :

  • Une entrée de journal pour la règle C, observée du point de vue de la VM1, est générée lorsque la VM1 accepte du trafic en provenance de 203.0.113.114.
  • Malgré la règle D, la VM1 est autorisée à répondre à la requête entrante car le pare-feu est configuré avec des règles Google Cloud avec état. Si une requête entrante est autorisée, aucune règle de sortie ne peut bloquer les réponses établies.
  • Comme la règle D ne s'applique pas, elle n'est jamais prise en compte et ne fait donc l'objet d'aucune entrée de journal.

L'enregistrement de journal de pare-feu est généré dans l'exemple suivant.

Champ Valeurs
connection src_ip=203.0.113.114
src_port=[EPHEMERAL_PORT]
dest_ip=10.10.0.99
dest_port=80
protocol=tcp
disposition ALLOWED
rule_details reference = "network:my-vpc/firewall:rule-c"
priority = 10
action = ALLOW
source_range = 0.0.0.0/0
ip_port_info = tcp:80
direction = ingress
instance project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_location continent
country
region
city

Format des journaux de pare-feu

Conformément aux spécifications, une entrée de journal est créée dans Cloud Logging pour chaque règle de pare-feu pour laquelle la journalisation est activée, du moment que cette règle s'applique au trafic entrant ou sortant d'une instance de VM.

Les règles de pare-feu respectent le format indiqué dans le tableau suivant.

Les champs de charge utile JSON d'un objet Logging LogEntry contiennent des messages organisés suivant le format ci-dessous.

Champ Description
connection IpConnection
Hachage à cinq tuples décrivant les adresses IP source et de destination, les ports source et de destination, ainsi que le protocole IP de cette connexion.
disposition string
Indique si la connexion a été autorisée (ALLOWED) ou refusée (DENIED).
rule_details RuleDetails
Détails relatifs à la règle appliquée à cette connexion.
instance InstanceDetails
Détails de l'instance de VM. Dans une configuration de VPC partagé, project_id correspond à l'identifiant du projet de service.
vpc VpcDetails
Détails du réseau VPC. Dans une configuration de VPC partagé, project_id correspond à l'identifiant du projet hôte.
remote_instance InstanceDetails
Si le point de terminaison distant de la connexion était une VM hébergée dans Compute Engine, ce champ contient les détails relatifs à l'instance de VM.
remote_vpc VpcDetails
Si le point de terminaison distant de la connexion était une VM sur le réseau VPC, ce champ contient les détails relatifs au réseau VPC.
remote_location GeographicDetails
Si le point de terminaison distant de la connexion était externe au réseau VPC, ce champ contient les métadonnées disponibles concernant son emplacement.

IpConnection

Champ Type Description
src_ip string Adresse IP source. Si la source est une VM Compute Engine, src_ip représente l'adresse IP interne de l'interface. L'adresse IP publique externe n'apparaît pas. La journalisation affiche l'adresse IP de la VM telle qu'elle est vue par la VM dans l'en-tête du paquet, de la même manière que si vous réalisiez un vidage TCP sur la VM.
src_port integer Port source.
dest_ip string Adresse IP de destination. Si la destination est une VM Google Cloud, dest_ip correspond à l'adresse IP interne privée de l'interface. L'adresse IP publique externe n'apparaît pas, même si elle a été utilisée pour établir la connexion.
dest_port integer Port de destination.
protocol integer Protocole IP de la connexion.

RuleDetails

Champ Type Description
reference string Référence à la règle de pare-feu, au format :
"network:{network name}/firewall:{firewall_name}"
priority integer Priorité de la règle de pare-feu.
action string ALLOW ou DENY.
source_range[ ] string Liste des plages d'adresses sources auxquelles la règle de pare-feu s'applique.
destination_range[ ] string Liste des plages d'adresses de destination auxquelles la règle de pare-feu s'applique.
ip_port_info[ ] IpPortDetails Liste des protocoles IP et des plages de ports auxquels les règles doivent s'appliquer.
direction string Direction dans laquelle la règle de pare-feu s'applique (entrée ou sortie).
source_tag[ ] string Liste de tous les tags sources auxquels la règle de pare-feu s'applique.
target_tag[ ] string Liste de tous les tags cibles auxquels la règle de pare-feu s'applique.
source_service_account[ ] string Liste de tous les comptes de service sources auxquels la règle de pare-feu s'applique.
target_service_account[ ] string Liste de tous les comptes de service cibles auxquels la règle de pare-feu s'applique.

IpPortDetails

Champ Type Description
ip_protocol string Protocole IP auquel la règle de pare-feu s'applique. Valeur "ALL" si la règle s'applique à tous les protocoles.
port_range[ ] string Liste des plages de ports auxquels les règles doivent s'appliquer, par exemple 8080-9090.

InstanceDetails

Champ Type Description
project_id string ID du projet contenant la VM
vm_name string Nom d'instance de la VM
region string Région de la VM
zone string Zone de la VM

VpcDetails

Champ Type Description
project_id string ID du projet hébergeant le réseau.
vpc_name string Réseau sur lequel opère la VM.
subnetwork_name string Sous-réseau sur lequel opère la VM.

GeographicDetails

Champ Type Description
continent string Continent des points de terminaison externes
country string Pays des points de terminaison externes
region string Région des points de terminaison externes
city string Ville des points de terminaison externes

Étapes suivantes