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.

Avant de commencer

  • Pour utiliser les exemples de ligne de commande de ce guide, installez et configurez le SDK Cloud.

  • Configurez une connexion privée entre votre réseau cloud privé virtuel et le réseau VPC où résident des 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é au 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.

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 Cloud Console ou l'outil de ligne de commande gcloud, 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.

Facultatif: Configurer des contraintes de règle d'administration

Vous pouvez contraindre les builds d'une organisation Google Cloud à n'utiliser que les pools privés spécifiés en définissant 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 que:

  • Tous les builds 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/WORKERPOOL_PROJECT_ID/locations/LOCATION/workerPools/WORKERPOOL_ID \
     --organization ORGANIZATION_ID

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

  • WORKERPOOL_ID: ID du pool privé pour exécuter les compilations.

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

  • LOCATION: région contenant le pool privé.

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

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

Pour définir la règle d'administration qui exige que tous les builds de l'organisation utilisent un pool privé sous celle-ci:

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

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

Pour définir une règle d'administration qui exige que tous les builds des projets d'un dossier utilisent un pool privé dans le 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 tous les builds d'un projet utilisent un pool privé dans le projet spécifié, procédez comme suit:

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

WORKERPOOL_PROJECT_ID est l'ID du projet contenant 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 Cloud, assurez-vous que toutes les compilations du projet utilisent le pool privé. les compilations tentant d'utiliser le pool partagé par défaut échouent.

  • Si votre organisation Google Cloud contient des services tels qu'App Engine ou Cloud Functions qui utilisent implicitement Cloud Build, l'application de cette contrainte de règle d'administration peut empêcher ces services de fonctionner comme prévu.

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 pour exécuter des compilations en votre nom. Par défaut, le compte de service Cloud Build reste en dehors du périmètre de VPC Service Controls, même si le projet Cloud dans lequel il se trouve se trouve à l'intérieur du périmètre. Pour cette raison, afin que vos builds accèdent aux ressources situées dans le périmètre, vous devez autoriser le compte de service Cloud Build à accéder au périmètre de VPC Service Controls. Pour éviter cette étape, utilisez des comptes de service spécifiés par l'utilisateur plutôt que le compte de service Cloud Build. Un compte de service spécifié par l'utilisateur se trouve dans le périmètre VPC Service Controls si le projet Cloud correspondant se trouve dans le périmètre.

Pour accorder au compte de service Cloud Build l'accès au périmètre de VPC Service Controls, procédez comme suit:

  1. Obtenez l'adresse e-mail de votre compte de service Cloud Build :

    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. Créez un niveau d'accès pour votre compte de service Cloud Build en suivant les instructions de la section Limiter l'accès par utilisateur ou compte de service.

  3. Ajoutez le niveau d'accès à votre périmètre de service en suivant les instructions de la section Ajouter un niveau d'accès à un périmètre existant.

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

Console

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

    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 Create private pool (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 Cloud dans lequel vous avez créé votre réseau VPC.

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

    6. Décochez l'option Attribuer des adresses IP externes.

    7. Cliquez sur Create (Créer).

gcloud

  1. Créez un fichier de configuration de pool de nœuds de calcul 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: 'WORKER_POOL_DISK_SIZE'
      machineType: WORKER_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 Cloud qui contient votre réseau VPC. NETWORK_NAME correspond au nom de votre réseau VPC.
    • WORKER_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 la page Schéma du fichier de configuration des pools de nœuds de calcul.
    • WORKER_POOL_DISK_SIZE correspond à 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 correspond à l'option permettant d'activer le périmètre VPC Service Controls pour votre pool privé. Définissez cette valeur sur NO_PUBLIC_EGRESS pour créer votre pool privé dans le périmètre VPC Service Controls.
  2. Exécutez la commande gcloud suivante, où WORKERPOOL_ID est un identifiant unique pour votre pool privé, WORKERPOOL_CONFIG_FILE est le nom de votre fichier de configuration de pool de nœuds de calcul et REGION est le région dans laquelle vous souhaitez créer votre pool de nœuds de calcul:

    gcloud builds worker-pools create WORKERPOOL_ID --config-from-file WORKERPOOL_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 de votre dépôt (par exemple, github.com) à l'aide des paramètres suivants:

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

  2. Le réseau VPC sur lequel s'exécute votre pool privé est défini comme un réseau appairé. 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 sur cette opération, 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 envoient des images et des artefacts à Container Registry, Artifact Registry ou Cloud Storage se trouvant dans un autre projet Cloud, veillez à ajouter ce projet au même périmètre de service que le projet d'origine des 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 votre build en suivant les instructions de la section Exécuter des builds dans un pool privé.

Étape suivante