Utiliser VPC Service Controls

VPC Service Controls est une fonctionnalité de Google Cloud qui vous permet de configurer un périmètre sécurisé pour vous protéger contre l'exfiltration de données. Cette page explique comment utiliser VPC Service Controls avec des pools privés Cloud Build pour renforcer la sécurité de vos compilations.

Limites

La protection VPC Service Controls n'est disponible que pour les builds exécutés dans des pools privés. Vous ne pouvez pas utiliser VPC Service Controls avec des builds exécutés dans des pools par défaut.

Avant de commencer

  • Pour utiliser les exemples de ligne de commande de ce guide, installez et configurez la Google Cloud CLI.

  • Configurez une connexion privée entre votre réseau de cloud privé virtuel et le réseau VPC où résident les pools privés. Pour obtenir des instructions, consultez la page Configurer votre environnement pour créer des pools privés.

Configurer un pool privé dans le périmètre VPC Service Controls

Pour utiliser VPC Service Controls avec Cloud Build, vous devez d'abord créer et configurer un périmètre de service au niveau de l'organisation. Cette configuration garantit que les vérifications de VPC Service Controls s'appliquent lors de l'utilisation de Cloud Build et que les développeurs ne peuvent exécuter que des compilations conformes à VPC Service Controls.

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

Autorisations Identity and Access Management : pour configurer un périmètre de service, vous avez besoin des rôles Lecteur d'organisation et Éditeur Access Context Manager. Pour obtenir des instructions sur l'attribution de ces rôles, consultez la page Configurer l'accès aux ressources Cloud Build.

Pour créer un périmètre VPC Service Controls, procédez comme suit :

Suivez le Guide de démarrage rapide de VPC Service Controls pour effectuer les actions suivantes :

  1. Créer un périmètre de service
  2. Ajoutez le projet dans lequel vous prévoyez de créer le pool privé dans le périmètre.

  3. Limitez l'API Cloud Build.

Une fois le périmètre de service configuré, tous les appels à l'API Cloud Build sont vérifiés pour s'assurer qu'ils proviennent du même périmètre.

Accorder au compte de service Cloud Build l'accès au périmètre de VPC Service Controls

Cloud Build utilise le compte de service Cloud Build ou les comptes de service spécifiés par l'utilisateur pour exécuter des compilations en votre nom. Dans les cas suivants, vous devez accorder au compte de service l'accès au périmètre VPC Service Controls pour que vos builds puissent accéder aux ressources situées dans le périmètre:

Vous n'avez pas besoin d'accorder au compte de service l'accès au périmètre VPC Service Controls si vous utilisez des comptes de service spécifiés par l'utilisateur pour démarrer les compilations à l'aide de l'API Cloud Build ou de la ligne de commande.

Pour autoriser le compte de service Cloud Build à accéder au périmètre VPC Service Controls, procédez comme suit:

  1. Notez l'adresse e-mail de votre compte de service Cloud Build ou de votre compte de service spécifié par l'utilisateur. Pour obtenir l'adresse e-mail de votre compte de service Cloud Build, procédez comme suit:

    1. Ouvrez la page "IAM" :

      Ouvrir la page IAM

    2. Sélectionnez le projet que vous avez ajouté au périmètre de service.

    3. Dans le tableau des autorisations, recherchez et notez l'adresse e-mail se terminant par @cloudbuild.gserviceaccount.com. Il s'agit du compte de service Cloud Build.

  2. Mettez à jour la règle d'entrée du périmètre de service pour permettre au compte de service d'appeler les API Cloud Build. Cette règle d'entrée permet au compte de service d'effectuer l'appel d'API CreateBuild. Pour en savoir plus sur la définition des règles d'entrée VPC Service Controls, consultez les pages Configurer des règles d'entrée et de sortie et Règles d'entrée et de sortie.

    - ingressFrom:
        identities:
        - serviceAccount:SERVICE_ACCOUNT_EMAIL
        sources:
        - accessLevel: '*'
      ingressTo:
        operations:
        - serviceName: 'cloudbuild.googleapis.com'
          methodSelectors:
          - method: '*'
        resources:
        - 'projects/PROJECT_NUMBER'
    
  3. Mettez à jour la stratégie de périmètre en exécutant la commande suivante en remplaçant les variables par les valeurs appropriées:

    gcloud beta access-context-manager perimeters update PERIMETER_NAME \
        --set-ingress-policies=INGRESS-FILENAME \
        --policy=POLICY_ID
    

Remplacez les variables ci-dessus par ce qui suit:

  • SERVICE_ACCOUNT_EMAIL: adresse e-mail de votre compte de service Cloud Build ou du compte de service spécifié par l'utilisateur.
  • PROJECT_NUMBER: numéro du projet Google Cloud que vous avez ajouté au périmètre VPC Service Controls.
  • PERIMETER_NAME: nom de votre périmètre VPC Service Controls.
  • INGRESS-FILENAME: nom de votre fichier de règles d'entrée.
  • POLICY_ID: ID de la règle d'accès.

Facultatif : Activer l'accès au périmètre pour les machines de développement

Étant donné que les vérifications de VPC Service Controls s'appliquent pour l'API Cloud Build, les appels à l'API Cloud Build échouent, sauf s'ils proviennent du périmètre de service. Par conséquent, pour gérer les compilations avec l'API Cloud Build, l'UI Cloud Build dans la console Google Cloud ou la Google Cloud CLI, choisissez l'une des options suivantes:

  • Utilisez une machine dans le périmètre de VPC Service Controls. Par exemple, vous pouvez utiliser une VM Compute Engine ou une machine sur site connectée à votre réseau VPC via VPN.

  • Autorisez les développeurs à accéder au périmètre. Par exemple, vous pouvez créer des niveaux d'accès qui permettent d'accéder au périmètre en fonction de l'adresse IP ou de l'identité de l'utilisateur. Pour en savoir plus, consultez la section Autoriser l'accès aux ressources protégées depuis l'extérieur d'un périmètre.

Configurer des contraintes de règle d'administration

Pour vous assurer que les vérifications VPC Service Controls sont appliquées correctement et que vous limitez les builds d'une organisation Google Cloud à n'utiliser que les pools privés spécifiés, définissez la contrainte de règle d'administration constraints/cloudbuild.allowedWorkerPools. Vous pouvez appliquer la règle d'administration à l'ensemble de l'organisation, ou à un projet ou à un dossier de l'organisation. Par exemple, votre règle d'administration peut spécifier les éléments suivants:

  • Toutes les compilations de l'organisation utilisent les pools privés spécifiés.
  • Toutes les compilations d'un dossier utilisent les pools privés spécifiés.
  • Toutes les compilations d'un projet utilisent les pools privés spécifiés.

Autorisations IAM: pour gérer les règles d'administration, vous avez besoin du rôle Administrateur des règles d'administration (roles/orgpolicy.policyAdmin). Pour obtenir des instructions sur l'attribution d'un rôle, consultez la page Configurer l'accès aux ressources Cloud Build.

La commande gcloud resource-manager org-policies allow définit une règle d'administration qui exige que les compilations de l'organisation n'utilisent que le pool privé spécifié:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools \
     projects/PRIVATEPOOL_PROJECT_ID/locations/LOCATION/workerPools/PRIVATEPOOL_ID \
     --organization ORGANIZATION_ID

Remplacez les valeurs d'espace réservé dans les commandes ci-dessus par les éléments suivants :

  • PRIVATEPOOL_ID: ID du pool privé dans lequel exécuter les compilations.

  • PRIVATEPOOL_PROJECT_ID: ID du projet Google Cloud contenant le pool privé.

  • LOCATION: région qui contient le pool privé.

  • ORGANIZATION_ID: ID de l'organisation dans laquelle vous exécutez des compilations.

La commande accepte les préfixes under: et is.

Pour définir des règles d'administration qui obligent toutes les compilations de l'organisation à utiliser un pool privé sous cette organisation, procédez comme suit:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:organizations/ORGANIZATION_ID \
     --organization ORGANIZATION_ID

ORGANIZATION_ID est l'ID de l'organisation contenant les pools privés.

Pour définir une règle d'administration exigeant que toutes les compilations des projets d'un dossier utilisent un pool privé du projet spécifié, procédez comme suit:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:projects/PROJECT_ID \
     --folder FOLDER_ID

PROJECT_ID est l'ID du projet contenant les pools privés et FOLDER_ID contient les projets dans lesquels vous exécutez les compilations.

Pour définir une règle d'administration qui exige que toutes les compilations d'un projet utilisent un pool privé du projet spécifié, procédez comme suit:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:projects/PRIVATEPOOL_PROJECT_ID \
     --project BUILD_PROJECT_ID

PRIVATEPOOL_PROJECT_ID est l'ID du projet qui contient les pools privés et BUILD_PROJECT_ID est l'ID du projet dans lequel vous exécutez les compilations.

Tenez compte des points suivants lorsque vous appliquez la contrainte de règle d'administration constraints/cloudbuild.allowedWorkerPools:

  • Si vous appliquez cette contrainte de règle d'administration à un projet Google Cloud, assurez-vous que toutes les compilations du projet utilisent le pool privé. Les compilations tentant d'utiliser le pool partagé par défaut échoueront.

  • Si votre organisation Google Cloud contient des services tels que App Engine ou Cloud Functions qui utilisent implicitement Cloud Build, l'application de cette contrainte de règle d'administration peut entraîner le dysfonctionnement de ces services.

Créer un pool privé dans le périmètre de service

Console

  1. Ouvrez la page Pool de nœuds de calcul dans la console Google Cloud:

    Ouvrir la page Pool de nœuds de calcul Cloud Build

  2. Sélectionnez le projet dans lequel vous souhaitez créer le pool privé.

  3. Sur la page Pool de nœuds de calcul, cliquez sur Créer.

  4. Dans le panneau latéral Créer un pool privé:

    1. Saisissez un nom pour votre pool privé.

    2. Sélectionnez la région dans laquelle vous souhaitez créer le pool privé.

    3. Sélectionnez le type de machine Compute Engine que vous souhaitez utiliser pour votre pool privé.

    4. Saisissez le numéro du projet Google Cloud dans lequel vous avez créé votre réseau VPC.

    5. Saisissez le nom de votre réseau VPC.

    6. Décochez l'option Assign external IPs (Attribuer des adresses IP externes).

    7. Cliquez sur Créer.

gcloud

  1. Créez un fichier de configuration de pool privé au format YAML ou JSON, puis définissez l'option egressOption sur NO_PUBLIC_EGRESS :

    privatePoolV1Config:
      networkConfig:
        egressOption: NO_PUBLIC_EGRESS
        peeredNetwork: PEERED_NETWORK
      workerConfig:
        diskSizeGb: 'PRIVATE_POOL_DISK_SIZE'
        machineType: PRIVATE_POOL_MACHINE_TYPE
    

    Où :

    • PEERED_NETWORK est l'URL de la ressource réseau du réseau appairé avec le réseau du fournisseur de services. PEERED_NETWORK doit être au format projects/NETWORK_PROJECT_ID/global/networks/NETWORK_NAME, où NETWORK_PROJECT_ID est l'ID du projet Google Cloud qui contient votre réseau VPC et NETWORK_NAME est le nom de votre réseau VPC.
    • PRIVATE_POOL_MACHINE_TYPE est le type de machine Compute Engine pour l'instance de pool privé. Pour connaître les types de machines compatibles, consultez le schéma du fichier de configuration du pool privé.
    • PRIVATE_POOL_DISK_SIZE est la taille du disque pour l'instance de pool privé, en Go. Spécifiez une valeur supérieure ou égale à 100 et inférieure ou égale à 1 000. Si vous spécifiez 0, Cloud Build utilise la valeur par défaut de 100.
    • egressOption est l'option permettant d'activer le périmètre VPC Service Controls pour votre pool privé. Définissez-la sur NO_PUBLIC_EGRESS pour créer le pool privé dans le périmètre VPC Service Controls.
  2. Exécutez la commande gcloud suivante, où PRIVATEPOOL_ID est un identifiant unique pour votre pool privé, PRIVATEPOOL_CONFIG_FILE est le nom de votre fichier de configuration de pool privé et REGION la région dans laquelle vous souhaitez créer votre pool privé:

    gcloud builds worker-pools create PRIVATEPOOL_ID --config-from-file PRIVATEPOOL_CONFIG_FILE --region REGION
    

Facultatif : activez les appels Internet publics sur le réseau VPC

Assurez-vous que votre réseau VPC est configuré pour autoriser la connectivité réseau à l'emplacement où votre dépôt est hébergé (par exemple, github.com) avec les paramètres suivants :

  1. Dans votre fichier de configuration de pool privé, assurez-vous que le champ egressOption est défini sur NO_PUBLIC_EGRESS.

  2. Le réseau VPC sur lequel votre pool privé est exécuté est défini en tant que PeeredNetwork. Pour autoriser les appels vers votre hôte de dépôt, assurez-vous que ce réseau VPC autorise la sortie publique vers votre hôte de dépôt. Pour plus d'informations, consultez la section Routes et règles de pare-feu.

Exécuter des compilations dans un pool privé au sein du périmètre de service

Les compilations exécutées au sein du périmètre de service n'ont pas accès à l'Internet public, car vous devez effectuer certaines actions avant d'exécuter une compilation.

Transférer les images et les artefacts d'une compilation

Si vos compilations transfèrent des images et des artefacts vers Container Registry (obsolète), Artifact Registry ou Cloud Storage qui se trouvent dans un autre projet Google Cloud, veillez à ajouter ce projet au même périmètre de service que le projet d'où proviennent vos compilations.

Créer un bucket de journaux

Les compilations exécutées au sein du périmètre de service ne disposent pas des autorisations nécessaires pour stocker les journaux de compilation dans le bucket de journaux Cloud Storage par défaut. Choisissez l'une des options suivantes :

Exécuter des compilations

Exécutez la compilation en suivant les instructions de la section Exécuter des compilations dans un pool privé.

Étapes suivantes