Controlli di servizio VPC è una Google Cloud funzionalità che ti consente di configurare un perimetro sicuro per proteggerti dall'esfiltrazione di dati. Questa pagina mostra come utilizzare i Controlli di servizio VPC con i pool privati Cloud Build per aggiungere ulteriore sicurezza alle build.
Limitazioni
La protezione dei Controlli di servizio VPC è disponibile solo per le build eseguite in pool privati. Non puoi utilizzare i Controlli di servizio VPC con le build eseguite nei pool predefiniti.
Gli trigger Pub/Sub di Cloud Build non sono supportati se si utilizzano Controlli di servizio VPC.
Prima di iniziare
Per utilizzare gli esempi a riga di comando in questa guida, installa e configura Google Cloud CLI.
Configura una connessione privata tra la tua rete Virtual Private Cloud e la rete VPC in cui si trovano i pool privati. Per le istruzioni, consulta la sezione su come configurare l'ambiente per creare pool privati.
Configurazione di un pool privato nel perimetro dei Controlli di servizio VPC
Per utilizzare i Controlli di servizio VPC con Cloud Build, devi prima creare e configurare un perimetro di servizio, a livello di organizzazione. Questa configurazione garantisce che i controlli di VPC Service Controls vengano applicati quando utilizzi Cloud Build e che gli sviluppatori possano eseguire solo build conformi a VPC Service Controls.
Creazione di un perimetro dei Controlli di servizio VPC
Autorizzazioni di Identity and Access Management: per configurare un perimetro di servizio, sono necessari i ruoli Visualizzatore dell'organizzazione e Editor di Gestore contesto accesso. Per le istruzioni su come concedere questi ruoli, consulta Configurare l'accesso alle risorse Cloud Build.
Per creare un perimetro dei Controlli di servizio VPC:
Segui la guida rapida ai Controlli di servizio VPC per:
- Crea un perimetro di servizio.
Aggiungi al perimetro il progetto in cui prevedi di creare il pool privato.
Limita l'API Cloud Build.
Dopo aver configurato il perimetro del servizio, tutte le chiamate all'API Cloud Build vengono controllate per verificare che provengano dallo stesso perimetro.
Concedere all'account di servizio l'accesso al perimetro dei Controlli di servizio VPC
Nei seguenti casi, devi concedere all'account di servizio Cloud Build o Compute Engine precedente l'accesso al perimetro di Controlli di servizio VPC affinché le tue build possano accedere alle risorse all'interno del perimetro:
Se utilizzi l'account di servizio Cloud Build o Compute Engine precedente per avviare le build utilizzando un attivatore di build, l'API Cloud Build o la riga di comando.
Se utilizzi account di servizio specificati dall'utente per avviare le build utilizzando un attivatore di build.
Non è necessario concedere all'account di servizio Cloud Build o Compute Engine legacy l'accesso al perimetro di Controlli di servizio VPC se utilizzi account di servizio specificati dall'utente per avviare le build utilizzando l'API Cloud Build o la riga di comando.
Per concedere all'account di servizio Cloud Build o Compute Engine precedente l'accesso al perimetro di Controlli di servizio VPC:
Prendi nota dell'indirizzo email dell'account di servizio precedente:
Apri la pagina IAM:
Seleziona il progetto che hai aggiunto al perimetro di servizio.
Nella tabella delle autorizzazioni, individua l'indirizzo email corrispondente all'account di servizio Cloud Build precedente.
Aggiorna il criterio di ingresso del perimetro del servizio per consentire all'account di servizio di chiamare le API Cloud Build. Questa regola di ingresso consente all'account di servizio di effettuare la chiamata all'API
CreateBuild
. Per ulteriori informazioni sull'impostazione dei criteri di ingresso di VPC Service Controls, consulta Configurare i criteri di ingresso e di uscita e Regole di ingresso e di uscita.- ingressFrom: identities: - serviceAccount:SERVICE_ACCOUNT_EMAIL sources: - accessLevel: '*' ingressTo: operations: - serviceName: 'cloudbuild.googleapis.com' methodSelectors: - method: '*' resources: - 'projects/PROJECT_NUMBER'
Aggiorna il criterio perimetrale eseguendo il seguente comando sostituendo le variabili con i valori appropriati:
gcloud beta access-context-manager perimeters update PERIMETER_NAME \ --set-ingress-policies=INGRESS-FILENAME \ --policy=POLICY_ID
Sostituisci le variabili precedenti con quanto segue:
SERVICE_ACCOUNT_EMAIL
: l'indirizzo email dell'account servizio.PROJECT_NUMBER
: il numero del progetto Google Cloud che hai aggiunto al perimetro di Controlli di servizio VPC.PERIMETER_NAME
: il nome del perimetro di Controlli di servizio VPC.INGRESS-FILENAME
: il nome del file delle norme di ingresso.POLICY_ID
: l'ID del criterio di accesso.
(Facoltativo) Attivazione dell'accesso al perimetro per le macchine di sviluppo
Poiché i controlli di Controlli di servizio VPC vengono applicati all'API Cloud Build, le chiamate all'API Cloud Build non vanno a buon fine a meno che non provengano dall'interno del perimetro di servizio. Pertanto, per gestire le build con l'API Cloud Build, l'interfaccia utente di Cloud Build nella console Google Cloud o Google Cloud CLI, scegli una delle seguenti opzioni:
Utilizza un computer all'interno del perimetro dei Controlli di servizio VPC. Ad esempio, puoi utilizzare una VM Compute Engine o una macchina on-premise connessa alla tua rete VPC tramite VPN.
Concedere agli sviluppatori l'accesso al perimetro. Ad esempio, puoi creare livelli di accesso che consentano l'accesso al perimetro in base all'indirizzo IP o all'identità utente. Per ulteriori informazioni, vedi Consentire l'accesso a risorse protette dall'esterno di un perimetro.
Configurazione dei vincoli dei criteri dell'organizzazione
Per assicurarti che i controlli di VPC Service Controls vengano applicati correttamente e che le compilazioni in un' Google Cloud organizzazione siano limitate all'utilizzo solo dei pool privati specificati, imposta il vincolo del criterio dell'organizzazione constraints/cloudbuild.allowedWorkerPools
.
Puoi applicare il criterio dell'organizzazione all'intera organizzazione, a un progetto o a una cartella al suo interno. Ad esempio, i criteri della tua organizzazione possono specificare che:
- Tutte le build dell'organizzazione utilizzano i pool privati specificati.
- Tutte le build in una cartella utilizzano i pool privati specificati.
- Tutte le build di un progetto utilizzano i pool privati specificati.
Autorizzazioni IAM: per gestire le policy dell'organizzazione, devi disporre del ruolo
Amministratore delle norme dell'organizzazione
(roles/orgpolicy.policyAdmin
). Per istruzioni su come concedere un ruolo, consulta
Configurare l'accesso alle risorse Cloud Build.
Il comando gcloud resource-manager org-policies allow
imposta un criterio dell'organizzazione che richiede che le build nell'organizzazione utilizzino solo il pool privato specificato:
gcloud resource-manager org-policies allow \
cloudbuild.allowedWorkerPools \
projects/PRIVATEPOOL_PROJECT_ID/locations/LOCATION/workerPools/PRIVATEPOOL_ID \
--organization ORGANIZATION_ID
Sostituisci i valori segnaposto nei comandi precedenti con quanto segue:
PRIVATEPOOL_ID
: l'ID del pool privato in cui eseguire le build.PRIVATEPOOL_PROJECT_ID
: l'ID del progetto Google Cloud che contiene il pool privato.LOCATION
: la regione che contiene il pool privato.ORGANIZATION_ID
: l'ID dell'organizzazione in cui stai eseguendo le build.
Il comando supporta i prefissi under:
e is
.
Per impostare un criterio dell'organizzazione che richieda a tutte le build dell'organizzazione di utilizzare qualsiasi pool privato all'interno dell'organizzazione:
gcloud resource-manager org-policies allow \
cloudbuild.allowedWorkerPools under:organizations/ORGANIZATION_ID \
--organization ORGANIZATION_ID
Dove ORGANIZATION_ID
è l'ID dell'organizzazione che contiene i pool privati.
Per impostare un criterio dell'organizzazione che richieda che tutte le build dei progetti all'interno di una cartella utilizzino qualsiasi pool privato nel progetto specificato:
gcloud resource-manager org-policies allow \
cloudbuild.allowedWorkerPools under:projects/PROJECT_ID \
--folder FOLDER_ID
dove PROJECT_ID
è l'ID del progetto che contiene i pool privati e FOLDER_ID contiene i progetti in cui esegui le build.
Per impostare un criterio dell'organizzazione che richieda a tutte le build di un progetto di utilizzare qualsiasi pool privato nel progetto specificato:
gcloud resource-manager org-policies allow \
cloudbuild.allowedWorkerPools under:projects/PRIVATEPOOL_PROJECT_ID \
--project BUILD_PROJECT_ID
dove PRIVATEPOOL_PROJECT_ID
è l'ID del progetto che contiene i pool privati e BUILD_PROJECT_ID è l'ID del progetto in cui esegui le build.
Tieni presenti le seguenti considerazioni quando applichi il vincolo dei criteri dell'organizzazione constraints/cloudbuild.allowedWorkerPools
:
Se applichi questo vincolo dei criteri dell'organizzazione a un progetto Google Cloud, assicurati che tutte le build del progetto utilizzino il pool privato. Le build che tentano di utilizzare il pool condiviso predefinito non andranno a buon fine.
Se la tua Google Cloud organizzazione contiene servizi come App Engine o funzioni Cloud Run che utilizzano implicitamente Cloud Build, l'applicazione di questo vincolo dei criteri dell'organizzazione potrebbe causare il malfunzionamento di questi servizi come previsto.
Creazione di un pool privato nel perimetro di servizio
Console
Apri la pagina Pool di worker nella console Google Cloud:
Seleziona il progetto in cui vuoi creare il pool privato.
Nella pagina Pool di worker, fai clic su Crea.
Nel riquadro laterale Crea pool privato:
Inserisci un nome per il pool privato.
Seleziona la regione in cui vuoi che venga creato il pool privato.
Seleziona il tipo di macchina Compute Engine che vuoi utilizzare per il tuo pool privato.
Inserisci il numero del progetto Google Cloud in cui hai creato la rete VPC.
Inserisci il nome della rete VPC.
Deseleziona Assegna IP esterni.
Fai clic su Crea.
gcloud
Crea un file di configurazione del pool privato in formato YAML o JSON e imposta il flag
egressOption
suNO_PUBLIC_EGRESS
:privatePoolV1Config: networkConfig: egressOption: NO_PUBLIC_EGRESS peeredNetwork: PEERED_NETWORK workerConfig: diskSizeGb: 'PRIVATE_POOL_DISK_SIZE' machineType: PRIVATE_POOL_MACHINE_TYPE
Dove:
PEERED_NETWORK
è l'URL della risorsa di rete della rete in peering con la rete del fornitore di servizi.PEERED_NETWORK
deve essere nel formatoprojects/NETWORK_PROJECT_ID/global/networks/NETWORK_NAME
, doveNETWORK_PROJECT_ID
è l'ID progetto del progetto Google Cloud che contiene la tua rete VPC eNETWORK_NAME
è il nome della tua rete VPC.PRIVATE_POOL_MACHINE_TYPE
è il tipo di macchina Compute Engine per l'istanza del pool privato. Per i tipi di macchine supportati, consulta lo schema del file di configurazione del pool privato.PRIVATE_POOL_DISK_SIZE
è la dimensione del disco per l'istanza del pool privato in GB. Specifica un valore maggiore o uguale a 100 e minore o uguale a 1000. Se specifichi0
, Cloud Build utilizza il valore predefinito 100.egressOption
è il flag per attivare il perimetro dei Controlli di servizio VPC per il tuo pool privato. Imposta questo valore suNO_PUBLIC_EGRESS
per creare il pool privato all'interno del perimetro di VPC Service Controls.
Esegui il seguente comando
gcloud
, dovePRIVATEPOOL_ID
è un identificatore univoco per il pool privato,PRIVATEPOOL_CONFIG_FILE
è il nome del file di configurazione del pool privato eREGION
è la regione in cui vuoi creare il pool privato:gcloud builds worker-pools create PRIVATEPOOL_ID --config-from-file PRIVATEPOOL_CONFIG_FILE --region REGION
(Facoltativo) Attivazione delle chiamate su internet pubblico sulla rete VPC
Assicurati che la rete VPC sia configurata per consentire la connettività di rete alla posizione in cui è ospitato il tuo repository (ad es. github.com) con le seguenti impostazioni:
Nel file di configurazione del pool privato, assicurati che il campo
egressOption
sia impostato suNO_PUBLIC_EGRESS
.La rete VPC su cui viene eseguito il pool privato è definita come PeeredNetwork. Per consentire le chiamate all'host del repository, assicurati che questa rete VPC consenta il traffico in uscita pubblico all'host del repository. Per informazioni su come eseguire questa operazione, consulta route e regole firewall.
Esecuzione delle build in un pool privato all'interno del perimetro di servizio
Le build eseguite all'interno del perimetro del servizio non hanno accesso alla rete internet pubblica, pertanto dovrai eseguire alcune azioni prima di eseguire una build.
Push di immagini ed elementi creati
Se le tue build inviano immagini e artefatti a Container Registry (Ritirato), Artifact Registry o Cloud Storage che si trovano in un altro progetto Google Cloud, assicurati di aggiungerlo allo stesso perimetro di servizio del progetto da cui originano le build.
Creazione di un bucket di log
La build eseguita all'interno del perimetro del servizio non avrà le autorizzazioni per archiviare i log di build nel bucket dei log Cloud Storage predefinito. Scegli una delle seguenti opzioni:
- Scegli di archiviare i log di compilazione in Cloud Logging impostando
loggingMode
suCLOUD_LOGGING_ONLY
. - Nel tuo progetto privato, crea un bucket per i log di Cloud Storage in cui memorizzare i log di compilazione. Per istruzioni su come eseguire questa operazione, consulta Archiviazione dei log di compilazione in un bucket creato dall'utente.
- Disattiva i log di compilazione impostando
loggingMode
suNONE
.
Esecuzione delle build
Esegui la build seguendo le istruzioni riportate in Esecuzione delle build in un pool privato.
Passaggi successivi
- Scopri come eseguire build in pool privati.
- Scopri come configurare i casi d'uso di rete di uso comune.