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 ces règles. 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).
La journalisation des règles de pare-feu consigne le trafic vers et depuis les instances de machine virtuelle (VM) Compute Engine. Cela inclut les produits Google Cloud basés sur des VM Compute Engine, tels que les clusters Google Kubernetes Engine (GKE) et les instances de l'environnement flexible App Engine.
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 consulter ces enregistrements dans Cloud Logging et exporter les journaux vers n'importe quelle destination compatible avec l'exportation Cloud Logging.
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.
La journalisation des règles de pare-feu est disponible pour les règles de pare-feu VPC et les stratégies de pare-feu hiérarchiques.
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 :
- Vous ne pouvez activer la journalisation des règles de pare-feu que pour les règles appliquées au sein d'un réseau de cloud privé virtuel (VPC). Les anciens réseaux ne sont pas compatibles.
- La journalisation des règles de pare-feu n'enregistre que les connexions TCP et UDP. Bien que vous puissiez créer une règle de pare-feu applicable à d'autres protocoles, vous ne pouvez pas consigner les connexions correspondantes. Si vous souhaitez également consigner d'autres protocoles, envisagez d'utiliser le mise en miroir de paquets.
- Vous ne pouvez pas activer la journalisation des règles de pare-feu pour les règles implicites de refus de trafic entrant et d'autorisation du trafic sortant.
- Les entrées de journal sont écrites du point de vue des VM. Elles ne sont créées que si la journalisation est activée pour la règle de pare-feu et si cette règle s'applique au trafic envoyé à la VM ou émis par celle-ci. Les entrées sont créées en fonction des limites de journalisation des connexions, suivant un principe d'optimisation.
- Le nombre de connexions pouvant être journalisées dans un intervalle donné est basé sur le type de machine.
- Vous pouvez consulter les modifications apportées aux règles de pare-feu dans les journaux d'audit VPC.
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 projetexample-proj
. - Les deux instances de VM sont les suivantes :
- VM1 située dans la zone
us-west1-a
, ayant l'adresse IP10.10.0.99
dans le sous-réseauwest-subnet
(régionus-west1
). - VM2 située dans la zone
us-east1-b
, ayant l'adresse IP10.20.0.99
dans le sous-réseaueast-subnet
(régionus-east1
).
- VM1 située dans la zone
- 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
Supposons que la VM1 tente de se connecter à la VM2 sur le port TCP 80. Les règles de pare-feu suivantes sont enregistré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 |
---|---|
connexion | src_ip=10.10.0.99 src_port=[EPHEMERAL_PORT] dest_ip=10.20.0.99 dest_port=80 protocol=6 |
disposition | REFUSÉ |
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-b |
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 projetexample-proj
. - Les deux instances de VM sont les suivantes :
- VM1 située dans la zone
us-west1-a
, ayant l'adresse IP10.10.0.99
dans le sous-réseauwest-subnet
(régionus-west1
). - VM2 située dans la zone
us-east1-b
, ayant l'adresse IP10.20.0.99
dans le sous-réseaueast-subnet
(régionus-east1
).
- VM1 située dans la zone
- 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
Supposons que la VM1 tente de se connecter à la VM2 sur le port TCP 80. Les règles de pare-feu suivantes sont enregistré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 |
---|---|
connexion | src_ip=10.10.0.99 src_port=[EPHEMERAL_PORT] dest_ip=10.20.0.99 dest_port=80 protocol=6 |
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-b |
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 |
---|---|
connexion | src_ip=10.10.0.99 src_port=[EPHEMERAL_PORT] dest_ip=10.20.0.99 dest_port=80 protocol=6 |
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-b |
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 projetexample-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 IP10.10.0.99
dans le sous-réseauwest-subnet
(régionus-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
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 |
---|---|
connexion | src_ip=203.0.113.114 src_port=[EPHEMERAL_PORT] dest_ip=10.10.0.99 dest_port=80 protocol=6 |
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 enregistrements de journal sont inclus dans le champ de charge utile JSON d'un objet Logging LogEntry.
Les enregistrements de journal contiennent des champs de base, qui constituent les principaux champs de chaque enregistrement de journal, ainsi que des champs de métadonnées qui ajoutent des informations supplémentaires. Vous pouvez déterminer si les champs de métadonnées sont inclus. Si vous les omettez, vous pouvez économiser sur les coûts de stockage.
Certains champs de journal acceptent des valeurs qui sont également des champs. Ces champs peuvent contenir plusieurs données dans un champ donné. Par exemple, le champ connection
est au format IpConnection
, qui contient l'adresse IP et les ports sources et de destination ainsi que le protocole, dans un seul champ. Ces champs sont décrits dans les tableaux ci-dessous.
Champ | Description | Type de champ : métadonnées de base ou facultatives |
---|---|---|
connexion | 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. |
Base |
disposition | string Indique si la connexion a été autorisée ( ALLOWED ) ou refusée (DENIED ). |
Base |
rule_details | RuleDetails Détails de la règle appliquée à cette connexion. |
|
Champ rule_details.reference |
Base | |
Autres champs de détails de la règle | Métadonnées | |
instance | InstanceDetails Détails de l'instance de VM. Dans une configuration de VPC partagé, project_id correspond à l'identifiant du projet de service. |
Métadonnées |
vpc | VpcDetails Détails du réseau VPC. Dans une configuration de VPC partagé, project_id correspond à l'ID du projet hôte. |
Métadonnées |
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 de l'instance de VM. |
Métadonnées |
remote_vpc | VpcDetails Si le point de terminaison distant de la connexion était une VM hébergée sur un réseau VPC, ce champ contient les détails du réseau. |
Métadonnées |
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. |
Métadonnées |
IpConnection
Champ | Type | Description |
---|---|---|
src_ip | chaîne | Adresse IP source. Si la source est une VM Compute Engine, src_ip est l'adresse IP interne principale ou une adresse dans une plage d'adresses IP d'alias de l'interface réseau de la VM. L'adresse IP externe n'est pas affichée. 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 | entier | Port source |
dest_ip | chaîne | Adresse IP de destination. Si la destination est une VM Google Cloud, dest_ip est l'adresse IP interne principale ou une adresse dans une plage d'adresses IP d'alias de l'interface réseau de la VM. L'adresse IP externe ne s'affiche pas, même si elle a été utilisée pour établir la connexion. |
dest_port | entier | Port de destination |
protocol | entier | Protocole IP de la connexion. |
RuleDetails
Champ | Type | Description |
---|---|---|
référence | chaîne | Référence à la règle de pare-feu, au format :"network:{network name}/firewall:{firewall_name}" |
priorité | entier | Priorité de la règle de pare-feu. |
action | chaîne | ALLOW ou DENY. |
source_range[ ] | chaîne | Liste des plages d'adresses sources auxquelles la règle de pare-feu s'applique. |
destination_range[ ] | chaîne | 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 applicables pour les règles. |
direction | chaîne | Direction dans laquelle la règle de pare-feu s'applique (entrée ou sortie). |
source_tag[ ] | chaîne | Liste de tous les tags sources auxquels la règle de pare-feu s'applique. |
target_tag[ ] | chaîne | Liste de tous les tags cibles auxquels la règle de pare-feu s'applique. |
source_service_account[ ] | chaîne | Liste de tous les comptes de service sources auxquels la règle de pare-feu s'applique. |
target_service_account[ ] | chaîne | Liste de tous les comptes de service cibles auxquels la règle de pare-feu s'applique. |
source_region_code[ ] | chaîne | Liste de tous les codes pays sources auxquels la règle de pare-feu s'applique. |
destination_region_code[ ] | chaîne | Liste de tous les codes pays de destination auxquels la règle de pare-feu s'applique. |
source_fqdn[ ] | chaîne | Liste de tous les noms de domaine sources auxquels la règle de pare-feu s'applique. |
destination_fqdn[ ] | chaîne | Liste de tous les noms de domaine de destination auxquels la règle de pare-feu s'applique. |
source_threat_intelligence[ ] | chaîne | Liste de tous les noms de liste Threat Intelligence sources auxquels la règle de pare-feu s'applique. |
destination_threat_intelligence[ ] | chaîne | Liste de tous les noms de liste Threat Intelligence de destination auxquels la règle de pare-feu s'applique. |
source_address_groups[ ] | chaîne | Liste de tous les groupes d'adresses sources auxquels la règle de pare-feu s'applique. |
destination_address_groups[ ] | chaîne | Liste de tous les groupes d'adresses de destination auxquels la règle de pare-feu s'applique. |
IpPortDetails
Champ | Type | Description |
---|---|---|
ip_protocol | chaîne | Protocole IP auquel la règle de pare-feu s'applique. Valeur "ALL" si la règle s'applique à tous les protocoles. |
port_range[ ] | chaîne | Liste des plages de ports auxquels les règles doivent s'appliquer, par exemple 8080-9090 . |
InstanceDetails
Champ | Type | Description |
---|---|---|
project_id | chaîne | ID du projet contenant la VM |
vm_name | chaîne | Nom d'instance de la VM |
région | chaîne | Région de la VM |
zone | chaîne | Zone de la VM |
VpcDetails
Champ | Type | Description |
---|---|---|
project_id | chaîne | ID du projet hébergeant le réseau. |
vpc_name | chaîne | Réseau sur lequel opère la VM. |
subnetwork_name | chaîne | Sous-réseau sur lequel opère la VM. |
GeographicDetails
Champ | Type | Description |
---|---|---|
continent | chaîne | Continent des points de terminaison externes |
pays | chaîne | Pays des points de terminaison externes |
région | chaîne | Région des points de terminaison externes |
ville | chaîne | Ville des points de terminaison externes |
Étapes suivantes
- Consultez la page Utiliser la journalisation des règles de pare-feu pour découvrir comment configurer la journalisation et afficher les journaux.
- Pour obtenir des insights sur l'utilisation de vos règles de pare-feu, consultez Firewall Insights.
- Consultez la page consacrée à Cloud Logging pour découvrir comment stocker, interroger, analyser, surveiller les événements et les données de journalisation, et créer des alertes les concernant.
- Consultez la page Configurer et gérer les récepteurs pour découvrir comment acheminer des entrées de journal.