Utiliser des règles de pare-feu

Cette page décrit les commandes permettant d'utiliser les règles de pare-feu, et propose plusieurs exemples d'utilisation.

Avant de commencer

Pour en savoir plus sur les règles de pare-feu, telles que les règles implicites et les règles générées par le système pour les réseaux par défaut, consultez la page Présentation des règles de pare-feu.

Avant de configurer les règles de pare-feu, consultez la section Composants des règles de pare-feu pour vous familiariser avec les composants des pare-feu, tels qu'ils sont utilisés dans Google Cloud.

Créer des règles de pare-feu

Les règles sont définies au niveau du réseau et s'appliquent seulement au réseau sur lequel elles ont été créées. Cependant, le nom que vous sélectionnez pour chacune d'elles doit être unique au projet.

Console

  1. Accédez à la page "Règles de pare-feu" de Google Cloud Console.
    Accéder à la page "Règles de pare-feu"
  2. Cliquez sur Créer une règle de pare-feu.
  3. Entrez un nom pour la règle de pare-feu.
    Ce nom doit être unique au projet.
  4. (Facultatif) Vous pouvez activer la journalisation des règles de pare-feu en procédant comme suit :
    • Cliquez sur Journaux > Activé.
    • Cliquez sur Activer.
  5. Spécifiez le réseau sur lequel la règle de pare-feu sera mise en œuvre.
  6. Spécifiez la priorité de la règle.
    Plus la valeur est faible, plus la priorité est élevée.
  7. Sélectionnez "Entrée" ou "Sortie" pour l'option Sens du trafic.
  8. Sélectionnez Autoriser ou Refuser pour l'option Action en cas de correspondance.
  9. Spécifiez les cibles de la règle.
    • Si vous souhaitez que la règle s'applique à toutes les instances du réseau, sélectionnez All instances in the network (Toutes les instances du réseau).
    • Si vous souhaitez que la règle s'applique à des instances spécifiques en fonction de tags réseau (cibles), sélectionnez Specified target tags (Tags cibles spécifiés), puis saisissez les tags auxquels la règle doit s'appliquer dans le champ Tags cibles.
    • Si vous souhaitez que la règle s'applique à des instances spécifiques en fonction du compte de service associé, sélectionnez Specified service account (Compte de service spécifié), et indiquez si le compte de service se trouve dans le projet en cours ou dans un autre projet dans le champ Champ d'application du compte de service. Choisissez ou saisissez ensuite le nom du compte de service dans le champ Compte de service cible.
  10. Pour une règle d'entrée, spécifiez le filtre source :
    • Sélectionnez IP ranges (Plages d'adresses IP), puis saisissez les blocs CIDR dans le champ Plages d'adresses IP sources pour définir la source du trafic entrant par plages d'adresses IP. Sélectionnez 0.0.0.0/0 pour autoriser les sources de n'importe quel réseau.
    • Pour limiter la source par tag de réseau, sélectionnez Source tags (Tags sources), puis saisissez les tags réseau dans le champ Tags sources. Pour connaître le nombre maximal de tags sources, consultez la section Quotas et limites des VPC. Le filtrage par tag source n'est disponible que si la cible n'est pas spécifiée par compte de service. Pour en savoir plus, consultez la section Filtrer par compte de service ou par tag réseau.
    • Pour limiter la source par compte de service, sélectionnez Service account (Compte de service), puis indiquez si le compte de service se trouve dans le projet en cours ou dans un autre projet dans le champ Champ d'application du compte de service. Choisissez ou saisissez ensuite le nom du compte de service dans le champ Compte de service source. Le filtrage par compte de service source n'est disponible que si la cible n'est pas spécifiée par tag réseau. Pour plus d'informations, consultez la section Filtrer par compte de service ou par tag réseau.
    • Si vous le souhaitez, définissez un Deuxième filtre source. Ces types de filtre ne peuvent pas utiliser les mêmes critères de filtrage que les filtres principaux.
  11. Pour une règle de sortie, spécifiez le filtre de destination :
    • Sélectionnez IP ranges (Plages d'adresses IP), puis saisissez les blocs CIDR dans le champ Plages d'adresses IP de destination pour définir la destination du trafic sortant en fonction des plages d'adresses IP. Utilisez 0.0.0.0/0 pour l'appliquer partout.
  12. Définissez les protocoles et ports auxquels la règle va s'appliquer :

    • Sélectionnez Allow all (Tout autoriser) ou Deny all (Tout refuser) selon l'action à exécuter, pour que la règle s'applique à tous les protocoles et ports.

    • Définissez des protocoles et des ports spécifiques :

      • Sélectionnez tcp pour inclure le protocole TCP et les ports. Saisissez all ou une liste de ports délimités par des virgules, tels que 20-22, 80, 8080.
      • Sélectionnez udp pour inclure le protocole UDP et les ports. Saisissez all ou une liste de ports délimités par des virgules, tels que 67-69, 123.
      • Sélectionnez Autres protocoles pour inclure des protocoles tels que icmp ou sctp.
  13. (Facultatif) Vous pouvez créer la règle de pare-feu sans l'activer en définissant son état d'application sur Désactivée. Cliquez sur Désactiver la règle, puis sélectionnez Désactivée.

  14. Cliquez sur Créer.

gcloud

La commande gcloud permettant de créer des règles de pare-feu est la suivante :

    gcloud compute firewall-rules create NAME \
        [--network NETWORK; default="default"] \
        [--priority PRIORITY;default=1000] \
        [--direction (ingress|egress|in|out); default="ingress"] \
        [--action (deny | allow )] \
        [--target-tags TAG,TAG,...] \
        [--target-service-accounts=IAM Service Account,IAM Service Account,...] \
        [--source-ranges CIDR-RANGE,CIDR-RANGE...] \
        [--source-tags TAG,TAG,...] \
        [--source-service-accounts=IAM Service Account,IAM Service Account,...] \
        [--destination-ranges CIDR-RANGE,CIDR-RANGE...] \
        [--rules (PROTOCOL[:PORT[-PORT]],[PROTOCOL[:PORT[-PORT]],...]] | all ) \
        [--disabled | --no-disabled]
        [--enable-logging | --no-enable-logging]
    

Utilisez les paramètres en fonction des explications ci-dessous. Des informations plus détaillées sur chacun des paramètres sont disponibles dans la documentation de référence du SDK.

  • Le paramètre --network indique dans quel réseau la règle sera créée. S'il n'est pas renseigné, la règle sera créée dans le réseau par défaut (default). Si vous n'avez pas de réseau par défaut ou si vous souhaitez créer la règle dans un réseau spécifique, vous devez utiliser ce champ.
  • Le paramètre --priority est une valeur numérique indiquant la priorité de la règle. Plus la valeur est faible, plus la priorité est élevée.
  • Le paramètre --direction indique le sens du trafic. Il peut être défini sur ingress (entrée) ou egress (sortie).
  • Le paramètre --action indique l'action en cas de correspondance. Il peut être défini sur allow (autoriser) ou deny (refuser), et doit être utilisé avec l'option --rules (règles).
  • Vous pouvez spécifier une cible de trois manières différentes :
    • Ne renseignez pas les options --target-tags (tags cibles) et --target-service-accounts (comptes de service cibles) si la règle doit s'appliquer à toutes les cibles du réseau.
    • Utilisez l'option --target-tags (tags cibles) pour définir des cibles par tags réseau.
    • Utilisez l'option --target-service-accounts (comptes de service cibles) pour définir des cibles par comptes de service associés.
  • Pour une règle d'entrée, spécifiez une source :
    • Ne renseignez pas les options --source-ranges (plages sources), source-tags (tags sources) et --source-service-accounts (comptes de service sources) si toutes les sources d'entrées doivent être acceptées (0.0.0.0/0).
    • Utilisez l'option --source-ranges (plages sources) pour spécifier des plages d'adresses IP sources au format CIDR.
    • Utilisez l'option --source-tags (tags sources) pour spécifier les instances sources par tags réseau. Le filtrage par tag source n'est disponible que si la cible n'est pas spécifiée par compte de service. Pour en savoir plus, consultez la section Filtrer par compte de service ou par tag réseau.
    • Les options --source-ranges (plages sources) et --source-tags (tags sources) peuvent être utilisées conjointement. Si les deux options sont spécifiées, l'ensemble de sources utilisé correspond à la combinaison de la plage d'adresses IP source et des instances identifiées à l'aide des tags réseau, même si les instances avec tag ne disposent pas d'adresses IP dans leurs plages sources.
    • Utilisez l'option --source-service-accounts (comptes de service sources) pour spécifier des instances en fonction des comptes de service qu'elles utilisent. Le filtrage par compte de service source n'est disponible que si la cible n'est pas spécifiée par tag réseau. Pour en savoir plus, consultez la section Filtrer par compte de service ou par tag réseau.
  • Pour une règle de sortie, spécifiez une destination :
    • Ne renseignez pas l'option --destination-ranges (plages de destination) si toutes les destinations de sortie doivent être acceptées (0.0.0.0/0).
    • Utilisez l'option --destination-ranges pour spécifier les plages d'adresses IP de destination au format CIDR.
  • Le paramètre --rules (règles) correspond à une liste des protocoles et ports auxquels la règle s'applique. Sélectionnez all (tous) pour appliquer la règle à tous les protocoles et à tous les ports. Ce paramètre nécessite l'option --action.
  • Par défaut, les règles de pare-feu sont créées et appliquées automatiquement. Cependant, vous pouvez modifier ce comportement.
    • Si les options --disabled (désactivée) et --no-disabled (non désactivée) ne sont pas sélectionnées, la règle de pare-feu est créée et appliquée.
    • Ajoutez l'option --disabled (désactivée) pour créer la règle de pare-feu sans l'appliquer. La règle de pare-feu est désactivée jusqu'à la mise à jour de la règle de pare-feu, qui permet de l'activer.
    • Ajoutez l'option --no-disabled (non désactivée) si vous souhaitez appliquer la règle de pare-feu.
  • Vous pouvez activer la journalisation des règles de pare-feu lors de la création ou de la mise à jour d'une règle. 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. Pour en savoir plus, consultez la section Journalisation des règles de pare-feu.

API

Créez une règle de pare-feu.

    POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
      "name": "FIREWALL_NAME",
      "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
      ... other fields
    }
    

Remplacez les espaces réservés par des valeurs valides :

  • PROJECT_ID est l'ID du projet dans lequel se trouve le réseau VPC.
  • NETWORK_NAME est le réseau VPC sur lequel la règle de pare-feu est créée.
  • FIREWALL_NAME est le nom de la règle de pare-feu.

  • Pour une règle de pare-feu d'entrée, définissez la source d'entrée à l'aide des champs suivants : sourceRanges, sourceTags ou sourceServiceAccounts. Ne spécifiez pas la plage 0.0.0.0/0 pour ces champs. Vous ne pouvez pas utiliser conjointement les champs sourceTags et sourceServiceAccounts. Cependant, vous pouvez associer sourceRanges avec sourceTags ou sourceServiceAccounts. Dans ce cas, la connexion doit simplement correspondre à l'un ou l'autre des champs pour que la règle de pare-feu s'applique.

    Pour les champs cibles, vous ne pouvez pas utiliser le champ targetServiceAccounts si vous utilisez le champ sourceTags. Vous devez utiliser le champ targetTags ou aucun champ cible. De même, si vous spécifiez le champ sourceServiceAccounts, vous ne pouvez pas utiliser le champ targetTags. Si vous ne spécifiez pas de champ cible, la règle s'applique à toutes les cibles du réseau.

  • Pour une règle de pare-feu de sortie, définissez la destination à l'aide du champ destinationRanges. Si vous ne spécifiez pas de destination, Google Cloud utilise 0.0.0.0/0. Définissez le champ targetTags ou targetServiceAccounts pour spécifier les cibles auxquelles la règle s'applique. Si vous ne spécifiez pas de champ cible, la règle s'applique à toutes les cibles du réseau.

Pour obtenir plus d'informations et la description de chaque champ, reportez-vous à la méthode firewalls.insert.

Mettre à jour des règles de pare-feu

Vous pouvez modifier certains composants d'une règle de pare-feu, tels que les protocoles et ports spécifiés pour la condition de correspondance. Néanmoins, vous ne pouvez pas modifier son nom, son réseau, l'action en cas de correspondance et le sens du trafic.

Si vous devez modifier le nom, le réseau, l'action ou le sens, vous devez supprimer la règle et en créer une autre.

Console

  1. Accédez à la page "Règles de pare-feu" de Google Cloud Console.
    Accéder à la page "Règles de pare-feu"
  2. Cliquez sur la règle que vous souhaitez modifier.
  3. Cliquez sur Modifier.
  4. Modifiez l'un des composants modifiables selon vos besoins.

    Dans le champ Protocoles et ports spécifiés, utilisez une liste délimitée par des points-virgules pour spécifier plusieurs protocoles.

  5. Cliquez sur Enregistrer.

gcloud

La commande gcloud permettant de mettre à jour des règles de pare-feu est la suivante :

    gcloud compute firewall-rules update NAME \
        [--priority=PRIORITY] \
        [--description=DESCRIPTION] \
        [--target-tags=TAG,...] \
        [--target-service-accounts=IAM Service Account, ...] \
        [ --source-ranges=CIDR_RANGE, ...] \
        [--source-tags=TAG,...] \
        [--source-service-accounts=IAM Service Account, ...] \
        [--destination-ranges=CIDR_RANGE, ...] \
        [--rules=[PROTOCOL[:PORT[-PORT]],…]] \
        [--disabled | --no-disabled]
        [--enable-logging | --no-enable-logging]
    

Les descriptions de chaque option sont identiques à celles utilisées pour créer des règles de pare-feu. Vous trouverez plus d'informations sur chacune d'elles dans la documentation de référence du SDK.

API

Envoyez une requête PATCH pour mettre à jour les champs suivants : allowed, description, sourceRanges, sourceTags ou targetTags. Envoyez une requête PUT ou POST pour tous les autres champs.

    (PATCH|(POST|PUT)) https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/FIREWALL_NAME
    {
      "name": "FIREWALL_NAME",
      "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
      ... other fields
    }
    

Remplacez les espaces réservés par des valeurs valides :

  • PROJECT_ID est l'ID du projet dans lequel se trouve le réseau VPC.
  • NETWORK_NAME est le réseau VPC sur lequel se trouve la règle de pare-feu.
  • FIREWALL_NAME est le nom de la règle de pare-feu à mettre à jour.

Pour obtenir plus d'informations et la description de chaque champ, reportez-vous à la méthode firewalls.patch ou firewalls.update.

Répertorier les règles de pare-feu pour un réseau VPC

Console

Pour afficher toutes les règles de pare-feu pour l'ensemble des réseaux de votre projet, procédez comme suit :

Pour afficher les règles de pare-feu sur un réseau particulier, procédez comme suit :

  1. Accédez à la page Réseaux VPC dans Google Cloud Console.
    Accéder à la page des réseaux VPC
  2. Cliquez sur le nom d'un réseau VPC pour accéder à sa page de détails.
  3. Sur la page de détails du réseau, cliquez sur l'onglet Règles de pare-feu.

gcloud

La commande suivante génère une liste triée des règles de pare-feu pour un réseau donné ([NETWORK_NAME]).

    gcloud compute firewall-rules list --filter network=NETWORK_NAME \
        --sort-by priority \
        --format="table(
            name,
            network,
            direction,
            priority,
            sourceRanges.list():label=SRC_RANGES,
            destinationRanges.list():label=DEST_RANGES,
            allowed[].map().firewall_rule().list():label=ALLOW,
            denied[].map().firewall_rule().list():label=DENY,
            sourceTags.list():label=SRC_TAGS,
            targetTags.list():label=TARGET_TAGS
            )"
    

API

Répertoriez toutes les règles de pare-feu pour un réseau donné.

    GET https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/?filter=network="NETWORK_NAME
    

Remplacez les espaces réservés par des valeurs valides :

  • PROJECT_ID est l'ID du projet dans lequel se trouve le réseau VPC.
  • NETWORK_NAME est le nom du réseau VPC contenant les règles de pare-feu à répertorier.

Pour plus d'informations, reportez-vous à la méthode firewalls.list.

Répertorier les règles de pare-feu pour l'interface réseau d'une instance de VM

Pour chaque interface réseau, Cloud Console répertorie les règles de pare-feu qui s'appliquent à l'interface et les règles qui sont réellement utilisées par celle-ci. Les règles de pare-feu peuvent masquer d'autres règles. Il est donc possible que toutes les règles qui s'appliquent à une interface ne soient pas réellement utilisées par cette dernière.

Les règles de pare-feu sont associées et appliquées à des instances de VM à l'aide du paramètre cible d'une règle. En affichant toutes les règles appliquées, vous pouvez vérifier si une règle particulière est réellement appliquée à une interface.

Pour afficher toutes les règles de pare-feu qui s'appliquent à une interface réseau spécifique d'une instance de VM, procédez comme suit :

  1. Accédez à la page "Instances de VM" de Google Cloud Console et cherchez l'instance à afficher.
    Accéder à la page "Instances de VM"
  2. Dans le menu Autres actions de l'instance (), sélectionnez Afficher les détails du réseau.
  3. Si une instance comporte plusieurs interfaces réseau, sélectionnez celle qui doit être affichée dans la section Informations sur l'interface réseau.
  4. Cliquez sur l'onglet Règles de pare-feu pour afficher toutes les règles qui s'appliquent à l'interface réseau, triées par nom de règle.

Parmi les règles qui s'appliquent à une interface réseau, certaines ne seront pas utilisées. Certaines règles peuvent être remplacées par une règle avec une plage plus spécifique ou une priorité plus élevée. En affichant les règles utilisées, vous pouvez rapidement vérifier quelles plages d'adresses IP, protocoles et ports sont ouverts ou fermés pour l'instance.

Pour afficher les règles utilisées par une interface réseau spécifique d'une instance de VM, procédez comme suit :

  1. Accédez à la page "Instances de VM" de Google Cloud Console et cherchez l'instance à afficher.
    Accéder à la page "Instances de VM"
  2. Dans le menu Autres actions de l'instance (), sélectionnez Afficher les détails du réseau.
  3. Si une instance comporte plusieurs interfaces réseau, sélectionnez celle qui doit être affichée dans la section Informations sur l'interface réseau.
  4. Dans la section Analyse des données sur les réseaux, sélectionnez l'onglet Analyse des entrées ou Analyse des sorties.
  5. Affichez la table, triée de la plage d'adresses IP la plus spécifique à la moins spécifique, pour déterminer si le trafic en provenance ou à destination d'une adresse IP spécifique est autorisé.

Afficher les détails des règles de pare-feu

Vous pouvez inspecter une règle de pare-feu pour voir son nom, son réseau et ses composants, et vérifier si la règle est activée ou désactivée.

Console

  1. Répertoriez vos règles de pare-feu. Vous pouvez afficher une liste de toutes les règles ou uniquement celles d'un réseau donné.
  2. Cliquez sur la règle pour l'afficher.

gcloud

La commande suivante décrit une règle de pare-feu individuelle. Remplacez [FIREWALL_RULE_NAME] par le nom de la règle de pare-feu. Les noms de règles de pare-feu étant uniques à chaque projet, vous n'avez pas besoin de spécifier un réseau pour décrire une règle existante.

    gcloud compute firewall-rules describe [FIREWALL_RULE_NAME]
    

API

Décrivez une règle de pare-feu donnée.

    GET https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/FIREWALL_NAME
    

Remplacez les espaces réservés par des valeurs valides :

  • PROJECT_ID est l'ID du projet dans lequel se trouve la règle de pare-feu.
  • FIREWALL_NAME est le nom de la règle de pare-feu à décrire.

Pour plus d'informations, reportez-vous à la méthode firewalls.get.

Supprimer des règles de pare-feu

Console

  1. Répertoriez vos règles de pare-feu. Vous pouvez afficher une liste de toutes les règles ou uniquement celles d'un réseau donné.
  2. Cliquez sur la règle à supprimer.
  3. Cliquez sur Supprimer.
  4. Cliquez à nouveau sur Supprimer pour confirmer votre choix.

gcloud

La commande suivante supprime une règle de pare-feu. Remplacez [FIREWALL_RULE_NAME] par le nom de la règle à supprimer.

    gcloud compute firewall-rules delete [FIREWALL_RULE_NAME]
    

API

Supprimez une règle de pare-feu.

    DELETE https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/FIREWALL_NAME
    

Remplacez les espaces réservés par des valeurs valides :

  • PROJECT_ID est l'ID du projet dans lequel se trouve la règle de pare-feu.
  • FIREWALL_NAME est le nom de la règle de pare-feu à supprimer.

Pour plus d'informations, reportez-vous à la méthode firewalls.delete.

Surveiller des règles de pare-feu

Vous pouvez activer la journalisation des règles de pare-feu pour afficher les règles ayant autorisé ou bloqué le trafic. Pour savoir comment procéder, consultez la page Utiliser la journalisation des règles de pare-feu.

Exemples de configuration

Le diagramme ci-dessous illustre un exemple de configuration de pare-feu. Le scénario implique un réseau my-network contenant les éléments suivants :

  • Un sous-réseau subnet1 avec une plage d'adresses IP de 10.240.10.0/24
  • Un sous-réseau subnet2 avec une plage d'adresses IP de 192.168.1.0/24
  • Une instance vm1 dans le sous-réseau subnet2 avec le tag webserver et l'adresse IP interne 192.168.1.2
  • Une instance vm2 dans le sous-réseau subnet2 avec le tag database et l'adresse IP interne 192.168.1.3
Exemple de configuration réseau (cliquez pour agrandir)
Exemple de configuration réseau (cliquez pour agrandir)

Exemple 1 : Refuser toutes les connexions TCP entrantes, sauf celles à destination du port 80 depuis le sous-réseau subnet1

Cet exemple crée un ensemble de règles de pare-feu qui refuse toutes les connexions TCP entrantes, à l'exception de celles destinées au port 80 depuis le sous-réseau subnet1.

  1. Créez une règle de pare-feu pour refuser tout le trafic TCP entrant sur les instances avec le tag webserver.

        gcloud compute firewall-rules create deny-subnet1-webserver-access \
            --network my-network \
            --action deny \
            --direction ingress \
            --rules tcp \
            --source-ranges 0.0.0.0/0 \
            --priority 1000 \
            --target-tags webserver
        
  2. Créez une règle de pare-feu pour autoriser toutes les adresses IP du sous-réseau subnet1 (10.240.10.0/24) à accéder au port TCP 80 sur les instances avec le tag webserver.

        gcloud compute firewall-rules create vm1-allow-ingress-tcp-port80-from-subnet1 \
            --network my-network \
            --action allow \
            --direction ingress \
            --rules tcp:80 \
            --source-ranges 10.240.10.0/24 \
            --priority 50 \
            --target-tags webserver
        

Exemple 2 : Refuser toutes les connexions TCP sortantes, sauf celles à destination du port 80 de vm1

  1. Créez une règle de pare-feu pour refuser tout le trafic TCP sortant.

        gcloud compute firewall-rules create deny-all-access \
            --network my-network \
            --action deny \
            --direction egress \
            --rules tcp \
            --destination-ranges 0.0.0.0/0 \
            --priority 1000
        
  2. Créez une règle de pare-feu pour autoriser le trafic TCP destiné au port 80 de vm1.

        gcloud compute firewall-rules create vm1-allow-egress-tcp-port80-to-vm1 \
            --network my-network \
            --action allow \
            --direction egress \
            --rules tcp:80 \
            --destination-ranges 192.168.10.2/32 \
            --priority 60
        

Exemple 3 : Autoriser les connexions TCP sortantes à destination du port 443 d'un hôte externe

Créez une règle de pare-feu permettant aux instances avec le tag webserver d'envoyer le trafic TCP sortant vers le port 443 d'une adresse IP externe (192.0.2.5).

    gcloud compute firewall-rules create vm1-allow-egress-tcp-port443-to-192-0-2-5 \
        --network my-network \
        --action allow \
        --direction egress \
        --rules tcp:443 \
        --destination-ranges 192.0.2.5/32 \
        --priority 70 \
        --target-tags webserver
    

Exemple 4 : Autoriser les connexions SSH de vm2 à vm1

Créez une règle de pare-feu qui permet au trafic SSH provenant d'instances avec le tag database (vm2) d'atteindre des instances avec le tag webserver (vm1).

    gcloud compute firewall-rules create vm1-allow-ingress-tcp-ssh-from-vm2 \
        --network my-network \
        --action allow \
        --direction ingress \
        --rules tcp:22 \
        --source-tags database \
        --priority 80 \
        --target-tags webserver
    

Exemple 5 : Autoriser le trafic TCP:1443 depuis le serveur Web vers la base de données à l'aide des comptes de service

Pour obtenir plus d'informations sur les comptes de service et les rôles, consultez la page Attribuer des rôles aux comptes de service.

"Reprenons le schéma ci-dessous, dans lequel deux applications sont mises à l'échelle automatiquement, une application de serveur Web my-sa-web et une application de base de données" "my-sa-db" "." Un administrateur de sécurité souhaite autoriser les flux TCP sur le port 1443 depuis my-sa-web vers my-sa-db.

Utiliser des règles de pare-feu avec les comptes de service (cliquez pour agrandir)
Utiliser des règles de pare-feu avec les comptes de service (cliquez pour agrandir)

Voici les étapes de configuration (y compris la création des comptes de service) :

  1. Un projet EDITOR ou OWNER de projet crée les comptes de service my-sa-web et my-sa-db.

        gcloud iam service-accounts create my-sa-web \
            --display-name "webserver service account"
        
        gcloud iam service-accounts create my-sa-db \
            --display-name "database service account"
        
  2. Le propriétaire de projet attribue au développeur du serveur Web web-dev@example.com un rôle serviceAccountUser pour le compte de service my-sa-web en définissant une stratégie IAM.

        gcloud iam service-accounts add-iam-policy-binding \
           my-sa-web@my-project.iam.gserviceaccount.com \
           --member='user:web-dev@example.com' \
           --role='roles/iam.serviceAccountUser'
        
  3. Le propriétaire de projet attribue au développeur de base de données "db-dev@example.com" un rôle serviceAccountUser pour le compte de service my-sa-db en définissant une stratégie IAM.

        gcloud iam service-accounts add-iam-policy-binding \
           my-sa-db@my-project.iam.gserviceaccount.com \
           --member='user:db-dev@example.com' \
           --role='roles/iam.serviceAccountUser'
        
  4. Le développeur web-dev@example.com, qui a le rôle d'administrateur d'instance, crée un modèle d'instance de serveur Web et autorise les instances à s'exécuter en tant que compte de service my-sa-web.

        gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME]  \
            --service-account my-sa-web@my-project-123.iam.gserviceaccount.com
        
  5. Le développeur db-dev@example.com, qui a le rôle d'administrateur d'instance, crée un modèle d'instance de base de données et autorise les instances à s'exécuter en tant que compte de service my-sa-db.

        gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \
            --service-account my-sa-db@my-project-123.iam.gserviceaccount.com
        
  6. L'administrateur de sécurité crée les règles de pare-feu à l'aide des comptes de service pour autoriser le trafic TCP:1443 du compte de service my-sa-web vers le compte de service my-sa-db.

        gcloud compute firewall-rules create [NAME] \
            --network network_a \
            --allow TCP:1443 \
            --source-service-accounts my-sa-web@my-project.iam.gserviceaccount.com \
            --target-service-accounts my-sa-db@my-project.iam.gserviceaccount.com
        

Dépannage

Messages d'erreur lors de la création ou de la mise à jour d'une règle de pare-feu

Un des messages d'erreur suivants peut s'afficher :

  • Should not specify destination range for ingress direction.

    Les plages de destination ne sont pas des paramètres valides pour les règles de pare-feu d'entrée. Les règles de pare-feu sont supposées être des règles d'entrée, à moins qu'un sens de sortie (egress) soit spécifiquement défini. Si vous créez une règle qui ne spécifie pas de sens, elle sera créée en tant que règle d'entrée, sans plage de destination. En outre, les plages sources ne constituent pas des paramètres valides pour les règles de sortie.

  • Firewall direction cannot be changed once created.

    Vous ne pouvez pas modifier la direction d'une règle de pare-feu existante. Vous devez créer une règle avec les paramètres corrects, puis supprimer l'ancienne.

  • Firewall traffic control action cannot be changed once created.

    Vous ne pouvez pas modifier l'action d'une règle de pare-feu existante. Vous devez créer une règle avec les paramètres corrects, puis supprimer l'ancienne.

  • Service accounts must be valid RFC 822 email addresses.Le compte de service spécifié dans la règle de pare-feu doit être une adresse e-mail au format RFC 822.

        gcloud compute firewall-rules create bad --allow tcp --source-service-accounts invalid-email
        

        Creating firewall...failed.
        ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource:

    • Invalid value for field 'resource.sourceServiceAccounts[0]': 'invalid-email'. Service accounts must be valid RFC 822 email addresses.
  • ServiceAccounts and Tags are mutually exclusive and can't be combined in the same firewall rule.Il est impossible de spécifier des comptes de service et des tags dans la même règle.

        gcloud compute firewall-rules create bad --allow tcp --source-service-accounts test@google.com --target-tags target
        

        Creating firewall...failed.
         ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource:

    • ServiceAccounts and Tags are mutually exclusive and can't be combined in the same firewall rule.
  • Impossibilité de se connecter à l'instance de VM

    Si vous n'arrivez pas à vous connecter à une instance de VM, vérifiez vos règles de pare-feu.

    1. Si vous lancez la connexion à partir d'une autre instance de VM, répertoriez les règles de pare-feu de sortie pour cette instance.

          gcloud compute firewall-rules list --filter network=[NETWORK_NAME] \
              --filter EGRESS \
              --sort-by priority \
              --format="table(
                  name,
                  network,
                  direction,
                  priority,
                  sourceRanges.list():label=SRC_RANGES,
                  destinationRanges.list():label=DEST_RANGES,
                  allowed[].map().firewall_rule().list():label=ALLOW,
                  denied[].map().firewall_rule().list():label=DENY,
                  sourceTags.list():label=SRC_TAGS,
                  sourceServiceAccounts.list():label=SRC_SVC_ACCT,
                  targetTags.list():label=TARGET_TAGS,
                  targetServiceAccounts.list():label=TARGET_SVC_ACCT
                  )"
          
    2. Vérifiez si l'adresse IP de destination est refusée par les règles de sortie. La règle avec la priorité la plus élevée (définie par la valeur la plus faible) remplace les règles avec les priorités moins élevées. Dans le cas de deux règles avec une priorité identique, la règle de refus est prioritaire.

    3. Vérifiez la règle de pare-feu d'entrée pour le réseau qui contient l'instance de VM de destination.

          gcloud compute firewall-rules list --filter network=[NETWORK_NAME] \
              --filter INGRESS \
              --sort-by priority \
              --format="table(
                  name,
                  network,
                  direction,
                  priority,
                  sourceRanges.list():label=SRC_RANGES,
                  destinationRanges.list():label=DEST_RANGES,
                  allowed[].map().firewall_rule().list():label=ALLOW,
                  denied[].map().firewall_rule().list():label=DENY,
                  sourceTags.list():label=SRC_TAGS,
                  sourceServiceAccounts.list():label=SRC_SVC_ACCT,
                  targetTags.list():label=TARGET_TAGS,
                  targetServiceAccounts.list():label=TARGET_SVC_ACCT
                  )"
          

      Exemple de résultat. Les résultats dépendent de votre liste de règles de pare-feu.

          NAME                    NETWORK  DIRECTION  PRIORITY  SRC_RANGES    DEST_RANGES  ALLOW                         DENY  SRC_TAGS  SRC_SVC_ACCT      TARGET_TAGS  TARGET_SVC_ACCT
          default-allow-icmp      default  INGRESS    65534     0.0.0.0/0                  icmp
          default-allow-internal  default  INGRESS    65534     10.128.0.0/9               tcp:0-65535,udp:0-65535,icmp
          default-allow-rdp       default  INGRESS    65534     0.0.0.0/0                  tcp:3389
          default-allow-ssh       default  INGRESS    65534     0.0.0.0/0                  tcp:22
          firewall-with-sa        default  INGRESS    1000                                 tcp:10000                                     test1@google.com               target@google.com
          

    Ma règle de pare-feu est-elle activée ou désactivée ?

    Pour voir si une règle de pare-feu est activée ou désactivée, consultez les détails des règles de pare-feu.

    Dans Google Cloud Console, cherchez Enabled (activé) ou Disabled (désactivé) sous Application.

    Dans le résultat généré par l'outil de ligne de commande gcloud, cherchez le champ disabled (désactivé). Si disabled:false est affiché, la règle est activée et appliquée. Si disabled: true est affiché, la règle est désactivée.

    Quelle règle est appliquée sur une instance de VM ?

    Supposons que vous ajoutez une nouvelle règle de pare-feu à un réseau VPC, qui autorise le trafic vers un serveur de base de données au niveau de la destination 10.1.2.3 du port tcp:1433. Après avoir créé la règle, vous pouvez vérifier si elle est appliquée correctement sur une instance particulière. Pour plus d'informations, consultez la section Répertorier les règles de pare-feu pour l'interface réseau d'une instance de VM.

    Dans l'exemple suivant, la console affiche la règle database-access dans l'onglet Analyse des sorties pour cette instance de VM, ce qui signifie que le trafic sortant 10.1.2.3 sur le port 1433 est autorisé. Tout autre trafic sortant dans la plage 10.1.0.0/16 est bloqué en raison de la règle de pare-feu deny-database-subnet.

    Trafic sortant autorisé pour une instance de VM (cliquez pour agrandir)
    Trafic sortant autorisé pour une instance de VM (cliquez pour agrandir)

    Les règles de pare-feu contenant des tags sources ne prennent pas effet immédiatement.

    La propagation des règles de pare-feu d'entrée avec des tags sources peut prendre du temps. Pour plus d'informations, consultez les considérations relatives aux tags sources des règles de pare-feu Ingress.

    Étape suivante