Configurer un périmètre VPC Service Controls pour un réseau cloud privé virtuel

Découvrez comment configurer un périmètre de service à l'aide de VPC Service Controls. Ce tutoriel utilise les paramètres réseau tels que les pare-feu, Private Service Connect et les configurations DNS qui sont nécessaires pour utiliser efficacement un périmètre VPC Service Controls. Ce tutoriel montre ensuite comment les services sont autorisés ou refusés, et comment créer des exceptions précises pour une liste d'autorisation de services spécifiques.

Objectifs

  • Configurer un périmètre VPC Service Controls avec des contrôles réseau supplémentaires pour limiter les chemins d'exfiltration.
  • Autorisez ou refusez l'accès aux services situés à l'intérieur du périmètre pour les requêtes provenant de l'intérieur ou de l'extérieur du périmètre.
  • Autorisez ou refusez l'accès à des services situés en dehors du périmètre à partir des requêtes provenant de ce périmètre.
  • Utilisez conjointement la règle d'administration "Limiter l'utilisation des services de ressources" et VPC Service Controls.

Coûts

Ce tutoriel utilise les composants facturables Google Cloud suivants :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

Une fois que vous avez terminé ce tutoriel, évitez de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Ce tutoriel nécessite un projet appartenant à votre organisation. Si vous ne disposez pas encore d'une organisation Google Cloud, consultez la page Créer et gérer une organisation.

  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activer les API Compute Engine, Access Context Manager et Cloud DNS .

    Activer les API

  5. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

  6. Assurez-vous que vous disposez du ou des rôles suivants au niveau de l'organisation : Access Context Manager Admin, Organization Policy Administrator

    Vérifier les rôles

    1. Dans la console Google Cloud, accédez à la page IAM.

      Accéder à IAM
    2. Sélectionnez l'organisation.
    3. Dans la colonne Compte principal, recherchez la ligne qui contient votre adresse e-mail.

      Si votre adresse e-mail ne figure pas dans cette colonne, cela signifie que vous n'avez aucun rôle.

    4. Dans la colonne Rôle de la ligne contenant votre adresse e-mail, vérifiez si la liste des rôles inclut les rôles requis.

    Attribuer les rôles

    1. Dans la console Google Cloud, accédez à la page IAM.

      Accéder à IAM
    2. Sélectionnez l'organisation.
    3. Cliquez sur Accorder l'accès.
    4. Dans le champ Nouveaux comptes principaux, saisissez votre adresse e-mail.
    5. Dans la liste Sélectinoner un rôle, sélectionnez un rôle.
    6. Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.
    7. Cliquez sur Enregistrer.
  7. Assurez-vous que vous disposez du ou des rôles suivants au niveau du projet : Compute Admin, DNS Administrator, IAP-Secured Tunnel User, Service Account User, Service Directory Editor

    Vérifier les rôles

    1. Dans la console Google Cloud, accédez à la page IAM.

      Accéder à IAM
    2. Sélectionnez le projet.
    3. Dans la colonne Compte principal, recherchez la ligne qui contient votre adresse e-mail.

      Si votre adresse e-mail ne figure pas dans cette colonne, cela signifie que vous n'avez aucun rôle.

    4. Dans la colonne Rôle de la ligne contenant votre adresse e-mail, vérifiez si la liste des rôles inclut les rôles requis.

    Attribuer les rôles

    1. Dans la console Google Cloud, accédez à la page IAM.

      Accéder à IAM
    2. Sélectionnez le projet.
    3. Cliquez sur Accorder l'accès.
    4. Dans le champ Nouveaux comptes principaux, saisissez votre adresse e-mail.
    5. Dans la liste Sélectinoner un rôle, sélectionnez un rôle.
    6. Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.
    7. Cliquez sur Enregistrer.

Configurer votre périmètre VPC Service Controls

Pour mettre en œuvre un périmètre VPC Service Controls pour un réseau VPC, vous devez mettre en œuvre des contrôles réseau qui refusent le trafic vers des services externes. Les sections suivantes détaillent les configurations réseau que vous devez mettre en œuvre dans les réseaux VPC situés à l'intérieur de votre périmètre, accompagnées d'un exemple de configuration.

Préparer votre réseau VPC

Dans cette section, vous configurez une connectivité privée aux API et services Google pour votre réseau VPC afin de limiter un certain nombre de chemins de sortie réseau vers Internet.

  1. Dans Cloud Shell, définissez les variables:

    gcloud config set project PROJECT_ID
    gcloud config set compute/region REGION
    gcloud config set compute/zone ZONE
    

    Remplacez les éléments suivants :

    • PROJECT_ID: ID du projet dans lequel vous allez créer des ressources.
    • REGION: région proche de votre emplacement (par exemple, us-central1)
    • ZONE: zone proche de votre emplacement (par exemple, us-central1-a)
  2. Créez un réseau VPC et un sous-réseau avec l'accès privé à Google activé :

    gcloud compute networks create restricted-vpc --subnet-mode=custom
    gcloud compute networks subnets create restricted-subnet \
    --range=10.0.0.0/24 \
    --network=restricted-vpc \
    --enable-private-ip-google-access
    
  3. Créez un point de terminaison Private Service Connect et une règle de transfert configurée pour utiliser le bundle vpc-sc:

    gcloud compute addresses create restricted-psc-endpoint \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=10.0.1.1 \
    --network=restricted-vpc
    
    gcloud compute forwarding-rules create restrictedpsc \
    --global \
    --network=restricted-vpc \
    --address=restricted-psc-endpoint \
    --target-google-apis-bundle=vpc-sc
    
  4. Configurez la règle de serveur Cloud DNS pour rediriger les requêtes destinées aux API Google Cloud vers votre point de terminaison Private Service Connect:

    gcloud dns managed-zones create restricted-dns-zone \
      --description="Private DNS Zone to map Google API queries to the Private Service Connect endpoint for Google APIs" \
      --dns-name="googleapis.com." \
      --networks=restricted-vpc \
      --visibility=private
    
    gcloud dns record-sets create googleapis.com  \
    --rrdatas=10.0.1.1 \
    --type=A \
    --ttl=300 \
    --zone=restricted-dns-zone
    
    gcloud dns record-sets create *.googleapis.com  \
    --rrdatas="googleapis.com." \
    --type=CNAME \
    --ttl=300 \
    --zone=restricted-dns-zone
    
  5. Configurez une règle de pare-feu avec un niveau de priorité faible pour refuser tout le trafic sortant:

    gcloud compute firewall-rules create deny-all-egress \
    --priority=65534 \
    --direction=egress \
    --network=restricted-vpc \
    --action=DENY \
    --rules=all \
    --destination-ranges=0.0.0.0/0
    
  6. Configurez une règle de pare-feu avec un niveau de priorité plus élevé pour permettre au trafic d'atteindre l'adresse IP utilisée par votre point de terminaison Private Service Connect:

    gcloud compute firewall-rules create allow-psc-for-google-apis \
    --priority=1000 \
    --direction=egress \
    --network=restricted-vpc \
    --action=ALLOW \
    --rules=tcp:443 \
    --destination-ranges=10.0.1.1
    

    Ces règles de pare-feu refusent largement la sortie, avant d'autoriser de manière sélective la sortie vers le point de terminaison Private Service Connect. Cette configuration refuse le trafic sortant vers les domaines par défaut, qui sont normalement accessibles par défaut avec l'accès privé à Google et les règles de pare-feu implicites.

Créer un périmètre VPC Service Controls

Dans cette section, vous allez créer un périmètre VPC Service Controls.

  1. Dans Cloud Shell, définissez une règle d'accès comme condition préalable à la création d'un périmètre VPC Service Controls:

    gcloud access-context-manager policies create \
    --organization=ORGANIZATION_ID --title "Access policy at organization node"
    

    Le résultat ressemble à ce qui suit :

    "Create request issued
    Waiting for operation [operations/accessPolicies/123456789/create/123456789] to complete...done."
    

    Il ne peut y avoir qu'un seul conteneur de règle d'accès au niveau du nœud d'organisation. Si une règle a déjà été créée dans votre organisation, le résultat ressemble à ce qui suit:

    "ALREADY_EXISTS: Policy already exists with parent ContainerKey{containerId=organizations/123456789012, numericId=123456789012}"
    

    Si ce message s'affiche, passez à l'étape suivante.

  2. Créez un périmètre VPC Service Controls qui limite les services Cloud Storage et Compute Engine.

    export POLICY_ID=$(gcloud access-context-manager policies list \
    --organization=ORGANIZATION_ID \
    --format="value(name)")
    
    gcloud access-context-manager perimeters create demo_perimeter \
    --title="demo_perimeter" \
    --resources=projects/$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") \
    --restricted-services="storage.googleapis.com,compute.googleapis.com" \
    --enable-vpc-accessible-services \
    --policy=$POLICY_ID \
    --vpc-allowed-services="RESTRICTED-SERVICES"
    

Vérifier les services autorisés à partir du trafic extérieur à votre périmètre

Les sections suivantes expliquent comment le périmètre VPC Service Controls autorise ou refuse l'accès aux requêtes effectuées depuis l'extérieur du périmètre, et comment vous pouvez autoriser de manière sélective l'entrée aux services en configurant des niveaux d'accès et des règles d'entrée.

Pour simuler du trafic en dehors de votre périmètre, vous pouvez exécuter des commandes dans Cloud Shell. Cloud Shell est une ressource située en dehors de votre projet et de votre périmètre. Le périmètre autorise ou refuse les requêtes, même si elles disposent de droits Identity and Access Management suffisants pour aboutir.

Ce tutoriel utilise l'API Compute Engine, l'API Cloud Storage et l'API Cloud Resource Manager, mais les mêmes concepts s'appliquent également à d'autres services.

Vérifier que le périmètre refuse le trafic externe vers des services restreints

Dans cette section, vous allez vérifier que le périmètre refuse le trafic externe vers des services restreints.

Schéma de l'architecture illustrant la manière dont un périmètre VPC Service Controls refuse l'accès à des services restreints

Le schéma précédent montre comment un client autorisé se voit refuser l'accès aux services situés à l'intérieur du périmètre que vous avez configuré comme restreint, mais qu'il peut accéder à des services que vous n'avez pas configurés comme restreints.

Dans les étapes suivantes, vous allez vérifier ce concept en utilisant Cloud Shell pour tenter de créer une VM dans votre réseau VPC, ce qui échoue en raison de la configuration du périmètre VPC Service Controls.

  1. Dans Cloud Shell, exécutez la commande suivante pour créer une VM dans votre réseau VPC.

    gcloud compute instances create demo-vm \
        --machine-type=e2-micro \
        --subnet=restricted-subnet \
        --scopes=https://www.googleapis.com/auth/cloud-platform \
        --no-address
    

    Le résultat ressemble à ce qui suit :

    "ERROR: (gcloud.compute.instances.create) Could not fetch resource:
    - Request is prohibited by organization's policy."
    

    La requête échoue, car Cloud Shell est situé en dehors de votre périmètre et Compute Engine est configuré avec l'option --restricted-services.

  2. Dans Cloud Shell, exécutez la commande suivante pour accéder au service Resource Manager, qui n'est pas configuré dans l'option --restricted-services.

    gcloud projects describe PROJECT_ID
    

    Une réponse réussie renvoie les détails de votre projet. Cette réponse indique que votre périmètre autorise le trafic externe vers l'API Cloud Resource Manager.

    Vous avez démontré que le périmètre refuse le trafic externe vers les services configurés dans --restricted-services et autorise le trafic externe vers des services qui ne sont pas explicitement configurés dans --restricted-services.

Les sections suivantes introduisent des modèles d'exceptions pour atteindre des services restreints à l'intérieur du périmètre.

Vérifier qu'un niveau d'accès autorise une exception au périmètre

Dans cette section, vous allez vérifier qu'un niveau d'accès autorise une exception au périmètre. Un niveau d'accès est utile lorsque vous souhaitez créer une exception pour que le trafic externe puisse accéder à tous les services restreints dans le périmètre et que vous n'avez pas besoin d'exceptions précises pour chaque service ou pour d'autres attributs.

Schéma de l'architecture montrant comment un niveau d'accès accorde une exception à tous les services situés dans le périmètre VPC Service Controls

Le schéma précédent montre comment un niveau d'accès permet à un client autorisé d'accéder à tous les services restreints dans le périmètre.

Dans les étapes suivantes, vous allez vérifier ce concept en créant un niveau d'accès, puis en envoyant une requête valide au service Compute Engine. Cette requête est autorisée, même si vous avez configuré Compute Engine comme étant restreint.

  1. Dans Cloud Shell, créez un fichier YAML décrivant la configuration d'un niveau d'accès et appliquez-le à votre périmètre. Cet exemple crée un niveau d'accès pour l'identité de l'utilisateur que vous utilisez actuellement pour exécuter le tutoriel.

    export USERNAME=$(gcloud config list account --format "value(core.account)")
    
    cat <<EOF > user_spec.yaml
    - members:
      - user:$USERNAME
    EOF
    
    gcloud access-context-manager levels create single_user_level \
    --title="single-user access level" \
    --basic-level-spec=user_spec.yaml \
    --policy=$POLICY_ID
    
    gcloud access-context-manager perimeters update demo_perimeter \
    --add-access-levels=single_user_level \
    --policy=$POLICY_ID
    
  2. Dans Cloud Shell, exécutez à nouveau la commande suivante pour tenter de créer une VM:

    gcloud compute instances create demo-vm \
    --machine-type=e2-micro \
    --subnet=restricted-subnet \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address
    

    Cette fois, la requête fonctionne. Votre périmètre empêche le trafic externe d'utiliser les services restreints, mais le niveau d'accès que vous avez configuré autorise une exception.

Vérifier qu'une règle d'entrée autorise une exception précise au périmètre

Dans cette section, vous allez vérifier qu'une règle d'entrée autorise une exception précise au périmètre. Par rapport au niveau d'accès plus précis, une règle d'entrée précise peut configurer des attributs supplémentaires concernant la source de trafic et autoriser l'accès à des services ou à des méthodes spécifiques.

Schéma de l'architecture illustrant la façon dont une règle d'entrée permet à une exception précise d'atteindre des services spécifiés à l'intérieur du périmètre

Le schéma précédent montre comment une règle d'entrée permet à un client autorisé d'accéder uniquement à un service spécifié à l'intérieur du périmètre, sans autoriser l'accès à d'autres services restreints.

Dans les étapes suivantes, vous allez vérifier ce concept en remplaçant le niveau d'accès par une règle d'entrée permettant à un client autorisé d'accéder uniquement au service Compute Engine, mais pas à d'autres services restreints.

  1. Dans l'onglet Cloud Shell, exécutez la commande suivante pour supprimer le niveau d'accès.

    gcloud access-context-manager perimeters update demo_perimeter \
    --policy=$POLICY_ID \
    --clear-access-levels
    
  2. Dans l'onglet Cloud Shell, créez une règle d'entrée qui permet à votre identité d'utilisateur d'entrer uniquement dans le service Compute Engine, puis appliquez-la à votre périmètre.

    cat <<EOF > ingress_spec.yaml
    - ingressFrom:
        identities:
        - user:$USERNAME
        sources:
        - accessLevel: '*'
      ingressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: compute.googleapis.com
        resources:
        - '*'
    EOF
    
    gcloud access-context-manager perimeters update demo_perimeter \
    --set-ingress-policies=ingress_spec.yaml \
    --policy=$POLICY_ID
    
  3. Dans l'onglet Cloud Shell, exécutez la commande suivante pour créer un bucket Cloud Storage dans le périmètre.

    gcloud storage buckets create gs://PROJECT_ID-01
    

    Le résultat ressemble à ce qui suit :

    "ERROR: (gcloud.storage.buckets.create) HTTPError 403: Request is prohibited by organization's policy."
    

    Cloud Shell est un client situé en dehors du périmètre. Le périmètre VPC Service Controls empêche donc Cloud Shell de communiquer avec les services restreints à l'intérieur du périmètre.

  4. Dans l'onglet Cloud Shell, exécutez la commande suivante pour envoyer une requête au service Compute Engine dans le périmètre.

    gcloud compute instances describe demo-vm --zone=ZONE
    

    Une réponse réussie renvoie les détails de demo-vm. Cette réponse indique que votre périmètre autorise le trafic externe répondant aux conditions de votre règle d'entrée au service Compute Engine.

Vérifier les services autorisés par le trafic à l'intérieur de votre périmètre

Les sections suivantes expliquent comment le périmètre VPC Service Controls autorise ou refuse les requêtes adressées à des services depuis l'intérieur du périmètre, et comment vous pouvez autoriser de manière sélective la sortie vers des services externes par des règles de sortie.

Pour illustrer la différence entre le trafic à l'intérieur et à l'extérieur du périmètre, les sections suivantes utilisent Cloud Shell en dehors du périmètre et une instance Compute Engine que vous créez à l'intérieur du périmètre. Les commandes que vous exécutez à partir de la session SSH sur l'instance Compute Engine située à l'intérieur du périmètre utilisent l'identité du compte de service associé, tandis que les commandes exécutées depuis Cloud Shell en dehors du périmètre utilisent votre propre identité. En suivant la configuration recommandée pour le tutoriel, le périmètre autorise ou refuse les requêtes, même si elles disposent de droits IAM suffisants pour réussir.

Ce tutoriel utilise l'API Compute Engine, l'API Cloud Storage et l'API Cloud Resource Manager, mais les mêmes concepts s'appliquent également à d'autres services.

Vérifier que le périmètre autorise le trafic interne vers des services restreints à l'intérieur du périmètre

Dans cette section, vous allez vérifier que le périmètre autorise le trafic provenant de points de terminaison du réseau à l'intérieur de votre périmètre si le service est également configuré dans Services accessibles par VPC.

Schéma de l'architecture illustrant comment la configuration de "vpc-accessible-services" permet d'accéder aux services depuis vos points de terminaison de réseau internes

Le schéma précédent montre comment un périmètre permet au trafic provenant de points de terminaison du réseau situés à l'intérieur du périmètre d'atteindre des services restreints que vous avez également configurés en tant que services accessibles par VPC. Les services que vous n'avez pas configurés en tant que services accessibles par VPC ne sont pas accessibles à partir de points de terminaison réseau situés à l'intérieur du périmètre.

Dans les étapes suivantes, vous allez vérifier ce concept en établissant une connexion SSH avec l'instance Compute Engine dans le périmètre, puis en envoyant des requêtes aux services.

  1. Dans Cloud Shell, créez une règle de pare-feu qui autorise le trafic SSH vers votre réseau VPC en autorisant le trafic entrant depuis la plage d'adresses IP 35.235.240.0/20 utilisée par le service IAP pour le transfert TCP:

    gcloud compute firewall-rules create demo-allow-ssh \
    --direction=INGRESS \
    --priority=1000 \
    --network=restricted-vpc \
    --action=ALLOW \
    --rules=tcp:22 \
    --source-ranges=35.235.240.0/20
    
  2. Démarrez une session SSH sur cette instance :

    gcloud compute ssh demo-vm --zone=ZONE
    

    Vérifiez que vous êtes bien connecté à l'instance demo-vm en confirmant que l'invite de ligne de commande a changé pour afficher le nom d'hôte de votre instance:

    username@demo-vm:~$
    

    Si la commande précédente échoue, un message d'erreur semblable à celui-ci peut s'afficher:

    "[/usr/bin/ssh] exited with return code [255]"
    

    Dans ce cas, l'instance Compute Engine n'a peut-être pas fini de démarrer. Patientez une minute, puis réessayez.

  3. Depuis la session SSH située à l'intérieur de votre périmètre, vérifiez les services que votre périmètre autorise en interne à l'aide d'un service Google Cloud configuré dans la liste d'autorisation des services accessibles par VPC. Par exemple, essayez n'importe quelle commande à l'aide du service Compute Engine.

    gcloud compute instances describe demo-vm --zone=ZONE
    

    Une réponse réussie renvoie les détails de demo-vm. Cette réponse indique que votre périmètre autorise le trafic interne vers l'API Compute Engine.

  4. Depuis la session SSH située dans votre périmètre, vérifiez que les services non inclus dans la liste d'autorisation des services accessibles par VPC ne sont pas autorisés depuis votre VM. Par exemple, la commande suivante utilise le service Resource Manager, qui n'est pas configuré dans la liste d'autorisation des services accessibles par VPC.

    gcloud projects describe PROJECT_ID
    

    Le résultat ressemble à ce qui suit :

    "ERROR: (gcloud.projects.list) PERMISSION_DENIED: Request is prohibited by organization's policy."
    

    Votre instance Compute Engine et les autres points de terminaison du réseau ne peuvent demander que des services configurés dans la liste d'autorisation des services accessibles par VPC. Toutefois, des ressources sans serveur ou du trafic de service provenant de l'extérieur de votre périmètre peuvent demander ce service. Si vous souhaitez empêcher l'utilisation d'un service dans votre projet, consultez la règle d'utilisation limitée des ressources de service.

Vérifier que le périmètre refuse le trafic interne vers des services restreints situés en dehors du périmètre

Dans cette section, vous allez vérifier que le périmètre bloque la communication des services situés à l'intérieur du périmètre vers les services Google Cloud situés en dehors de celui-ci.

Schéma illustrant la manière dont un périmètre VPC Service Controls refuse l'accès du trafic à l'intérieur du périmètre à des services restreints situés en dehors de celui-ci

Le schéma précédent montre comment le trafic interne ne peut pas communiquer avec des services restreints en dehors du périmètre.

Dans les étapes suivantes, vous allez vérifier ce concept en essayant d'envoyer le trafic interne à un service restreint à l'intérieur du périmètre et à un service restreint en dehors du périmètre.

  1. Dans la session SSH située dans votre périmètre, exécutez la commande suivante pour créer un bucket de stockage dans votre périmètre. Cette commande fonctionne, car le service Cloud Storage est configuré à la fois dans restricted-services et accessible-services.

    gcloud storage buckets create gs://PROJECT_ID-02
    

    Si la réponse est positive, le bucket de stockage est créé. Cette réponse indique que votre périmètre autorise le trafic interne vers le service Cloud Storage.

  2. Dans la session SSH située à l'intérieur de votre périmètre, exécutez la commande suivante pour lire les données d'un bucket situé en dehors de votre périmètre. Ce bucket public autorise une autorisation en lecture seule pour allUsers, mais le périmètre refuse le trafic provenant de votre périmètre vers un service restreint situé en dehors de celui-ci.

    gcloud storage cat gs://solutions-public-assets/vpcsc-tutorial/helloworld.txt
    

    Le résultat ressemble à ce qui suit :

    "ERROR: (gcloud.storage.objects.describe) HTTPError 403: Request is prohibited
    by organization's policy."
    

    Cette réponse montre que vous pouvez utiliser des services restreints à l'intérieur du périmètre, mais qu'une ressource à l'intérieur du périmètre ne peut pas communiquer avec les services restreints en dehors de celui-ci.

Vérifier qu'une règle de sortie autorise une exception au périmètre

Dans cette section, vous allez vérifier qu'une règle de sortie autorise une exception au périmètre.

Schéma de l'architecture illustrant la façon dont une règle de sortie permet à des exceptions spécifiques d'atteindre un service restreint en dehors du périmètre

Le schéma précédent montre comment le trafic interne peut communiquer avec une ressource externe spécifique lorsque vous accordez une exception restreinte avec la règle de sortie.

Dans les étapes suivantes, vous allez vérifier ce concept en créant une règle de sortie, puis en accédant à un bucket Cloud Storage public situé en dehors du périmètre autorisé par la règle de sortie.

  1. Ouvrez une nouvelle session Cloud Shell en cliquant sur ouvrir un nouvel onglet dans Cloud Shell. Lors des étapes suivantes, vous allez basculer entre le premier onglet avec la session SSH située dans votre périmètre et le deuxième onglet dans Cloud Shell en dehors de votre périmètre, où l'invite de ligne de commande commence par username@cloudshell.

  2. Dans l'onglet Cloud Shell, créez une règle de sortie autorisant la sortie de l'identité du compte de service associé de demo-vm à l'aide de la méthode google.storage.objects.get vers un bucket public dans un projet externe. Mettez à jour le périmètre avec la règle de sortie.

    export POLICY_ID=$(gcloud access-context-manager policies list \
    --organization=ORGANIZATION_ID \
    --format="value(name)")
    
    export SERVICE_ACCOUNT_EMAIL=$(gcloud compute instances describe demo-vm \
    --zone=ZONE) \
    --format="value(serviceAccounts.email)"
    
    cat <<EOF > egress_spec.yaml
    - egressFrom:
        identities:
          - serviceAccount:$SERVICE_ACCOUNT_EMAIL
      egressTo:
        operations:
        - methodSelectors:
          - method: 'google.storage.objects.get'
          serviceName: storage.googleapis.com
        resources:
        - projects/950403849117
    EOF
    
    gcloud access-context-manager perimeters update demo_perimeter \
    --set-egress-policies=egress_spec.yaml \
    --policy=$POLICY_ID
    
  3. Revenez à l'onglet de la session SSH sur la VM située dans votre périmètre, où l'invite de ligne de commande commence par username@demo-vm.

  4. Depuis la session SSH située dans votre périmètre, envoyez une autre requête au bucket Cloud Storage et vérifiez qu'il fonctionne.

    gcloud storage cat gs://solutions-public-assets/vpcsc-tutorial/helloworld.txt
    

    Le résultat ressemble à ce qui suit :

    "Hello world!
    This is a sample file in Cloud Storage that is viewable to allUsers."
    

    Cette réponse montre que votre périmètre et votre règle de sortie autorisent le trafic interne provenant d'une identité spécifique vers un bucket Cloud Storage spécifique.

  5. À partir de la session SSH située dans votre périmètre, vous pouvez également tester d'autres méthodes qui n'ont pas été explicitement autorisées par l'exception de règle de sortie. Par exemple, la commande suivante nécessite l'autorisation google.storage.buckets.list, qui est refusée par votre périmètre.

    gcloud storage ls gs://solutions-public-assets/vpcsc-tutorial/*
    

    Le résultat ressemble à ce qui suit :

    "ERROR: (gcloud.storage.cp) Request is prohibited by organization's policy."
    

    Cette réponse montre que votre périmètre interdit au trafic interne de répertorier les objets dans le bucket externe, ce qui indique que la règle de sortie autorise étroitement les méthodes spécifiées explicitement.

Pour plus d'informations sur les modèles courants de partage de données en dehors de votre périmètre de service, consultez la page Échange de données sécurisé avec des règles d'entrée et de sortie.

(Facultatif) Configurer la règle d'utilisation limitée des ressources de service

Vous pouvez également avoir des exigences internes ou des exigences de conformité pour n'autoriser que des API approuvées individuellement à être utilisées dans votre environnement. Dans ce cas, vous pouvez également configurer le service de règles d'administration Utilisation limitée des ressources du service. En appliquant la règle d'administration à un projet, vous limitez les services qui peuvent être créés dans ce projet. Toutefois, la règle d'administration n'empêche pas les services de ce projet de communiquer avec les services d'autres projets. En revanche, VPC Service Controls vous permet de définir un périmètre pour empêcher toute communication avec des services situés en dehors de celui-ci.

Par exemple, si vous définissez une règle d'administration pour autoriser Compute Engine et refuser Cloud Storage dans votre projet, une VM de ce projet ne pourra pas créer de bucket Cloud Storage dans votre projet. Cependant, la VM peut envoyer des requêtes à un bucket Cloud Storage situé dans un autre projet, de sorte que l'exfiltration avec le service Cloud Storage reste possible. Les étapes suivantes montrent comment implémenter et tester ce scénario:

  1. Passez à l'onglet Cloud Shell. L'invite de ligne de commande commence par username@cloudshell.
  2. Dans l'onglet Cloud Shell, créez un fichier YAML décrivant le service de règles d'administration qui autorisera uniquement l'utilisation du service Compute Engine et refusera tous les autres services, puis appliquez-le à votre projet.

    cat <<EOF > allowed_services_policy.yaml
    constraint: constraints/gcp.restrictServiceUsage
    listPolicy:
      allowedValues:
      - compute.googleapis.com
      inheritFromParent: true
    EOF
    
    gcloud resource-manager org-policies set-policy allowed_services_policy.yaml \
    --project=PROJECT_ID
    
  3. Revenez à l'onglet de la session SSH sur la VM située dans votre périmètre, où l'invite de ligne de commande commence par username@demo-vm.

  4. À partir de la session SSH située dans votre périmètre, exécutez la commande suivante pour afficher le bucket de stockage que vous avez créé précédemment dans ce projet.

    gcloud storage buckets describe gs://PROJECT_ID
    

    Le résultat ressemble à ce qui suit :

    "ERROR: (gcloud.storage.buckets.create) HTTPError 403: Request is disallowed by organization's constraints/gcp.restrictServiceUsage constraint for 'projects/123456789' attempting to use service 'storage.googleapis.com'."
    

    Cette réponse démontre que le service de règles d'administration refuse le service Cloud Storage dans votre projet, quelle que soit la configuration de votre périmètre.

  5. Dans la session SSH située à l'intérieur de votre périmètre, exécutez la commande suivante pour afficher un bucket de stockage situé en dehors du périmètre autorisé par votre règle de sortie.

    gcloud storage cat gs://solutions-public-assets/vpcsc-tutorial/helloworld.txt
    

    Le résultat ressemble à ce qui suit :

    "Hello world!
    This is a sample file in Cloud Storage that is viewable to allUsers."
    

    Une réponse réussie renvoie le contenu de helloworld.txt dans le bucket de stockage externe. Cette réponse montre que vos règles de périmètre et de sortie permettent au trafic interne d'atteindre un bucket de stockage externe dans certaines conditions limitées, mais que le service de règles d'administration refuse le service Cloud Storage dans votre projet, quelle que soit la configuration de votre périmètre. Les services extérieurs à votre projet peuvent toujours être utilisés pour l'exfiltration s'ils sont autorisés par votre périmètre, quel que soit le service de règles d'administration de l'utilisation limitée des ressources de service.

    Pour refuser la communication avec Cloud Storage ou d'autres services Google en dehors du périmètre, le service de règles d'administration Utilisation restreinte des ressources de service ne suffit pas : vous devez configurer un périmètre VPC Service Controls. VPC Service Controls limite les chemins d'exfiltration de données, et l'utilisation limitée des ressources de service est un contrôle de conformité qui empêche la création de services non approuvés dans votre environnement. Combinez ces contrôles pour bloquer plusieurs chemins d'exfiltration et autoriser de manière sélective les services approuvés à être utilisés en interne dans votre environnement.

Effectuer un nettoyage

Supprimez un projet Google Cloud :

gcloud projects delete PROJECT_ID

Bien que le périmètre VPC Service Controls ne génère aucun coût supplémentaire, il doit être nettoyé pour éviter le désordre et les ressources inutilisées dans votre organisation.

  1. Dans le sélecteur de projet situé en haut de la console Google Cloud, choisissez l'organisation que vous avez utilisée au cours de ce tutoriel.
  2. Dans la console Google Cloud, accédez à la page VPC Service Controls.

    Accéder à VPC Service Controls

  3. Dans la liste des périmètres, sélectionnez celui que vous souhaitez supprimer, puis cliquez sur Supprimer.

  4. Dans la boîte de dialogue, cliquez à nouveau sur Supprimer pour confirmer la suppression.

Étapes suivantes