Utiliser VPC Service Controls

VPC Service Controls est une fonctionnalité 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 les 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 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.

  • 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. Avant d'exécuter votre compilation, configurez votre fichier de configuration de compilation avec l'une des options suivantes :

  • Si vos compilations envoient des images et des artefacts à Artifact Registry ou Cloud Storage dans un autre projet Google Cloud , ajoutez ce projet au même périmètre de service que le projet d'origine des compilations.

  • Facultatif : Familiarisez-vous avec les configurations de type de machine et la disponibilité régionale. Pour en savoir plus, consultez workerconfig dans la documentation sur le schéma du fichier de configuration du pool privé.

Pour obtenir les autorisations nécessaires pour configurer un périmètre de service, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre compte de service :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

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

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 l'accès au périmètre de VPC Service Controls

Dans les cas suivants, vous devez accorder au compte de service Cloud Build ou Compute Engine hérité l'accès au périmètre VPC Service Controls pour que vos compilations puissent accéder aux ressources du périmètre :

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

Procédez comme suit pour accorder à l'ancien compte de service Cloud Build ou Compute Engine l'accès au périmètre de VPC Service Controls :

  1. Notez l'adresse e-mail de l'ancien compte de service :

    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 l'adresse e-mail correspondant à l'ancien compte de service Cloud Build.

  2. Mettez à jour la règle d'entrée du périmètre de service pour autoriser le compte de service à 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 configuration des règles d'entrée VPC Service Controls, consultez 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 règle de périmètre en exécutant la commande suivante, en remplaçant les variables par des valeurs appropriées :

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

Où :

  • SERVICE_ACCOUNT_EMAIL : adresse e-mail du compte de service.
  • PROJECT_NUMBER : numéro de projet du projetGoogle 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 stratégie 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 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 à l'aide d'un 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ègles d'administration

Pour vous assurer que les vérifications VPC Service Controls sont appliquées correctement et que vous restreignez les compilations dans 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

Où :

  • PRIVATEPOOL_ID : ID du pool privé pour exécuter des compilations.

  • PRIVATEPOOL_PROJECT_ID : ID du Google Cloud projet 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 qui tentent d'utiliser le pool partagé par défaut échouent.

  • Si votre organisation Google Cloud contient des services tels que App Engine ou des fonctions Cloud Run 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 Google Cloud

  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. Cliquez sur Créer un pool privé.

    La page Créer un pool privé s'affiche.

    Saisissez les informations suivantes pour créer votre pool privé :

  3. Nom : saisissez un nom pour votre pool privé. Cette valeur ne peut contenir que des caractères alphanumériques /[a-z][0-9]/ ou des tirets -. Le nom de votre pool privé doit comporter entre 1 et 63 caractères.

  4. Région : sélectionnez la région dans laquelle vous souhaitez créer le pool privé.

  5. Configuration de la machine : configurez les éléments suivants :

    1. Série : choisissez une série de machines.

    2. Type de machine : ce paramètre affiche les types de machines que le pool de nœuds de calcul peut utiliser, en fonction de la série de machines que vous avez sélectionnée. Les types de machines disponibles varient selon la région.

    3. Taille du disque : saisissez une taille de disque pour votre pool privé. Spécifiez une valeur supérieure ou égale à 100 et inférieure ou égale à 4 000. Si vous ne fournissez pas de valeur, Cloud Build utilise une taille de disque de 100.

    4. Virtualisation imbriquée : si vous avez sélectionné une machine de la série C3, vous pouvez activer la virtualisation imbriquée. Cette fonctionnalité vous permet d'exécuter des instances de machines virtuelles (VM) dans d'autres VM afin de créer vos propres environnements de virtualisation.

  6. Sous Type de réseau, sélectionnez Réseau privé, puis sélectionnez les éléments suivants :

    1. Projet : sélectionnez l'ID de votre projet Google Cloud .

    2. Réseau : sélectionnez votre réseau dans le menu déroulant. Si vous n'avez pas créé de réseau, consultez Créer et gérer des réseaux VPC pour découvrir comment en créer un.

    3. Plage d'adresses IP : saisissez la plage d'adresses IP internes que le réseau du producteur Cloud Build peut utiliser pour allouer des adresses IP aux VM qui maintiennent une connexion avec des dépôts privés.

      Vous pouvez spécifier la plage à l'aide de la notation CIDR (Classless Inter-Domain Routing) au format STARTING_IP_ADDRESS/SUBNET_PREFIX_SIZE. Par exemple, 192.0.2.0/24 a une longueur de préfixe de 24. Les 24 premiers bits de la plage d'adresses IP sont utilisés comme masque de sous-réseau (192.0.2.0), tandis que les adresses d'hôte possibles vont de 192.0.2.0 à 192.0.2.255.

      La valeur de la longueur de votre préfixe ne doit pas dépasser /29. Si aucune valeur n'est spécifiée pour la plage, la valeur par défaut /24 est automatiquement attribuée. Si aucune valeur n'est spécifiée pour la longueur du préfixe, des adresses IP sont automatiquement attribuées dans le réseau VPC appairé. Si aucune valeur n'est spécifiée pour l'adresse IP, une plage d'adresses IP est automatiquement attribuée au sein du réseau VPC appairé.

    4. Désélectionnez Attribuer des adresses IP externes pour limiter l'accès à votre réseau privé.

  7. Cliquez sur Créer pour créer votre pool privé.

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

Pour permettre à votre réseau VPC d'autoriser la connectivité réseau à l'emplacement où votre dépôt est hébergé (par exemple, github.com), configurez les deux paramètres suivants :

Limites

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

  • Les déclencheurs Cloud Build Pub/Sub ne sont pas compatibles avec VPC Service Controls.

Étapes suivantes