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 les 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 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 Pub/Sub Cloud Build ne sont pas compatibles avec VPC Service Controls.
Avant de commencer
Pour utiliser les exemples de ligne de commande de ce guide, installez et configurer 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 :
- Créer un périmètre de service
Ajoutez le projet dans lequel vous prévoyez de créer le pool privé dans le périmètre.
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 VPC Service Controls
Dans les cas suivants, vous devez accorder à l'ancien compte de service Cloud Build ou Compute Engine l'accès au périmètre VPC Service Controls pour que vos compilations puissent accéder aux ressources du périmètre :
Si vous utilisez l'ancien compte de service Cloud Build ou Compute Engine pour démarrer des compilations à l'aide d'un déclencheur de compilation, de l'API Cloud Build ou de la ligne de commande.
Si vous utilisez des comptes de service spécifiés par l'utilisateur pour démarrer des compilations à l'aide d'un déclencheur de compilation.
Il n'est pas nécessaire d'accorder l'accès au compte de service Cloud Build ou Compute Engine au périmètre VPC Service Controls si vous utilisez un service spécifié par l'utilisateur pour démarrer des compilations à l'aide de l'API Cloud Build ou de la commande ligne.
Pour accorder à l'ancien compte de service Cloud Build ou Compute Engine l'accès au périmètre VPC Service Controls, procédez comme suit :
Notez l'adresse e-mail de l'ancien compte de service:
Ouvrez la page "IAM" :
Sélectionnez le projet que vous avez ajouté au périmètre de service.
Dans le tableau des autorisations, recherchez l'adresse e-mail correspondant aux anciennes autorisations compte de service Cloud Build.
Mettez à jour la règle d'entrée du périmètre de service pour autoriser le compte de service pour appeler l'API Cloud Build API. Cette règle d'entrée permet au compte de service d'effectuer le
CreateBuild
d'un appel d'API. Pour en savoir plus sur la définition de 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'
Mettez à jour la règle 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 les suivantes:
SERVICE_ACCOUNT_EMAIL
: adresse e-mail du de service géré.PROJECT_NUMBER
: numéro du projet 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ègle 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 liées aux règles d'administration
Pour vous assurer que les vérifications VPC Service Controls sont appliquées correctement et
en limitant les compilations d'une organisation Google Cloud à n'utiliser que les
pools privé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é sur lequel exécuter les compilations.PRIVATEPOOL_PROJECT_ID
: ID du projet Google Cloud qui contient 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
où 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
Où 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
Où 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, s'assurer que toutes les compilations du projet utilisent le pool privé ; de compilations pour utiliser le pool partagé par défaut échouera.
Si votre organisation Google Cloud inclut des services tels qu'App Engine ou Cloud Run qui utilisent implicitement Cloud Build, en appliquant la contrainte de règle d'administration peut empêcher ces services de fonctionner comme prévu.
Créer un pool privé dans le périmètre de service
Console
Ouvrez la page Pool de nœuds de calcul dans la console Google Cloud :
Sélectionnez le projet dans lequel vous souhaitez créer le pool privé.
Sur la page Pool de nœuds de calcul, cliquez sur Créer.
Dans le panneau latéral Créer un pool privé:
Saisissez un nom pour votre pool privé.
Sélectionnez la région dans laquelle vous souhaitez créer le pool privé.
Sélectionnez le type de machine Compute Engine que vous souhaitez utiliser pour votre pool privé.
Saisissez le numéro du projet Google Cloud dans lequel vous avez créé à votre réseau VPC.
Saisissez le nom de votre réseau VPC.
Décochez l'option Assign external IPs (Attribuer des adresses IP externes).
Cliquez sur Create (Créer).
gcloud
Créez un fichier de configuration de pool privé au format YAML ou JSON, puis définissez l'option
egressOption
surNO_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 formatprojects/NETWORK_PROJECT_ID/global/networks/NETWORK_NAME
, oùNETWORK_PROJECT_ID
est l'ID du projet Google Cloud qui contient votre réseau VPC, etNETWORK_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écifiez0
, 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 surNO_PUBLIC_EGRESS
pour créer le pool privé dans le périmètre VPC Service Controls.
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é etREGION
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 :
Dans votre fichier de configuration de pool privé, assurez-vous que le champ
egressOption
est défini surNO_PUBLIC_EGRESS
.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 périmètre de service que le projet à l'origine de 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 :
- Choisissez de stocker vos journaux de compilation dans Cloud Logging en définissant
loggingMode
surCLOUD_LOGGING_ONLY
. - Dans votre projet privé, créez un bucket de journaux Cloud Storage pour stocker vos journaux de compilation. Pour en savoir plus, consultez la page Stocker des journaux de compilation dans un bucket créé par l'utilisateur.
- Désactivez les journaux de compilation en définissant
loggingMode
surNONE
.
Exécuter des compilations
Exécutez la compilation en suivant les instructions de la section Exécuter des compilations dans un pool privé.
Étape suivante
- Découvrez comment exécuter des compilations dans des pools privés.
- Découvrez comment configurer les cas d'utilisation en réseau les plus courants.