Puoi connettere Cloud Build a un'istanza Private Service Connect di Secure Source Manager utilizzando i pool privati di Cloud Build. Questa connessione è un'alternativa più complessa all'utilizzo di Developer Connect. Utilizza l'approccio descritto in questa guida se non ti senti a tuo agio a esporre un endpoint proxy Git.
Prima di iniziare
- Crea un'istanza Private Service Connect di Secure Source Manager.
- Se in precedenza hai configurato gli endpoint per l'istanza Private Service Connect, devi disconnetterli. Per rilasciare gli endpoint, segui le istruzioni riportate in Rilascia un indirizzo IPv4 o IPv6 interno statico.
-
Abilita le API Cloud Build, Service Networking e Compute Engine.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per connettere Cloud Build a un'istanza Private Service Connect di Secure Source Manager,
chiedi all'amministratore di concederti il
ruolo IAM Amministratore Gestore contesto accesso (roles/accesscontextmanager.policyAdmin) nell'organizzazione.
Configura il account di servizio
Per seguire il principio del privilegio minimo in Cloud Build, puoi configurare Cloud Build in modo che utilizzi un service account con privilegi sufficienti per eseguire una build.
Se non specifichi un account di servizio, Cloud Build potrebbe selezionarne automaticamente uno per eseguire le build per tuo conto. Questo account di servizio potrebbe avere autorizzazioni inutilmente ampie per il tuo caso d'uso, come l'accesso all'istanza Secure Source Manager e a tutti i repository nel tuo progetto.
Crea un service account se non ne hai già uno che vuoi utilizzare.
-
Nella Google Cloud console, vai alla settings Secure Source Manager Autorizzazioni pagina:
Nella scheda Autorizzazioni service account, seleziona il account di servizio che vuoi utilizzare come account di servizio Cloud Build.
(Facoltativo) Seleziona Imposta come service account preferito per precompilare il account di servizio quando crei nuovi trigger.
Concedi al account di servizio le autorizzazioni richieste
Concedi al account di servizio i ruoli Cloud Build richiesti per il tuo caso d'uso. Per informazioni sui ruoli Cloud Build richiesti per diverse azioni di Cloud Build, consulta Configurazione dell'accesso a Cloud Build.
Per concedere al account di servizio le autorizzazioni per recuperare il certificato CA, esegui questo comando.
gcloud projects add-iam-policy-binding CA_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/privateca.auditor \ --condition=NoneSostituisci quanto segue:
CA_PROJECT_ID: con l'ID progetto del progetto del pool di CA.SA_EMAIL: con l'indirizzo email del account di servizio che hai impostato come account di servizio Cloud Build.
Per concedere al account di servizio le autorizzazioni per accedere all'istanza Secure Source Manager, esegui questo comando.
gcloud projects add-iam-policy-binding INSTANCE_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.instanceAccessor \ --condition=NonePer concedere al account di servizio le autorizzazioni per leggere dai repository Secure Source Manager, esegui questo comando.
gcloud projects add-iam-policy-binding INSTANCE_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.repoReader \ --condition=None
Configura i log di build
Quando specifichi il tuo account di servizio per le build, devi archiviare i log di build in Cloud Logging o in un bucket Cloud Storage creato dall'utente. Non puoi archiviare i log nel bucket dei log predefinito.
Per archiviare i log di build in Cloud Logging, concedi il
ruolo Writer log (roles/logging.logWriter) al tuo
account di servizio Cloud Build.
Per ulteriori informazioni su come configurare i log di build, consulta Configurare i service account specificati dall'utente.
Crea una zona Cloud DNS privata
Per creare una zona Cloud DNS privata gestita, esegui questo comando.
gcloud dns managed-zones create ZONE_NAME \
--project=PROJECT_ID \
--description=DESCRIPTION \
--dns-name="INSTANCE_LOCATION.p.sourcemanager.dev." \
--visibility="private" \
--networks="https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK"
Sostituisci quanto segue:
ZONE_NAME: con il nome che vuoi assegnare alla zona gestita.PROJECT_ID: con l'ID progetto del Google Cloud progetto che vuoi utilizzare per la zona DNS di Cloud DNS.DESCRIPTION: con una descrizione per la zona.INSTANCE_LOCATION: con la località in cui vuoi creare l'istanza Secure Source Manager.
Per ulteriori informazioni sulle zone Cloud DNS private gestite, consulta Panoramica di Cloud DNS.
Configura la rete Virtual Private Cloud (VPC)
Prenota un intervallo IP che vuoi utilizzare per il peering del VPC Secure Source Manager con il pool privato Cloud Build.
gcloud compute addresses create CB_PEER_RANGE \ --global \ --purpose=VPC_PEERING \ --prefix-length=24 \ --description="IP range for peering with Cloud Build private pool" \ --network=NETWORK \ --project=INSTANCE_PROJECT_IDSostituisci quanto segue:
CB_PEER_RANGE: con il nome dell'indirizzo da creare.NETWORK: con la risorsa di rete in cui devono essere riservati gli indirizzi. Se utilizzi la rete predefinita, il valore èdefault.INSTANCE_PROJECT_ID: con l'ID progetto dell'istanza Private Service Connect.
Per creare un peering VPC con
servicenetworking.googleapis.com, esegui questo comando.gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=CB_PEER_RANGE \ --network=NETWORK \ --project=INSTANCE_PROJECT_IDPer creare un dominio DNS in peering per la connessione a Cloud Build, esegui questo comando.
gcloud services peered-dns-domains create DNS_PEERING_DOMAIN \ --network=NETWORK \ --project=INSTANCE_PROJECT_ID \ --dns-suffix=INSTANCE_LOCATION.p.sourcemanager.dev.Sostituisci quanto segue:
DNS_PEERING_DOMAIN: con il nome del dominio DNS in peering che stai creando.
Le zone DNS private devono essere condivise in modo esplicito. Per ulteriori informazioni sulla condivisione delle zone DNS private, consulta Condividere le zone DNS private con i produttori di servizi.
Per esportare le route di rete in Cloud Build, esegui questo comando.
gcloud compute networks peerings update servicenetworking-googleapis-com \ --network=NETWORK \ --export-custom-routes \ --no-export-subnet-routes-with-public-ip \ --project=INSTANCE_PROJECT_IDPer creare il pool privato Cloud Build nello stesso Google Cloud progetto dell'istanza Private Service Connect, esegui questo comando.
gcloud builds worker-pools create PRIVATE_POOL_ID \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --peered-network=projects/INSTANCE_PROJECT_ID/global/networks/NETWORK \ --worker-disk-size=100 \ --no-public-egressDove
PRIVATE_POOL_IDè il nome del pool privato che stai creando. Il nome deve contenere da 1 a 63 caratteri e i caratteri validi sono[a-zA-Z0-9_-]+.Per creare un gruppo di endpoint di rete (NEG) Private Service Connect per l'endpoint HTTP, esegui questo comando:
gcloud compute network-endpoint-groups create HTTP_NEG_NAME \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --network-endpoint-type=PRIVATE_SERVICE_CONNECT \ --psc-target-service=HTTP_PSC \ --network=NETWORK --subnet=SUBNETDove:
HTTP_NEG_NAMEè il nome del NEG che vuoi creare per l'endpoint HTTP.HTTP_PSCè il valore dell'endpoint HTTP Private Service Connect.
Per creare un NEG Private Service Connect per l'endpoint SSH, esegui questo comando:
gcloud compute network-endpoint-groups create SSH_NEG_NAME \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --network-endpoint-type=PRIVATE_SERVICE_CONNECT \ --psc-target-service=SSH_PSC \ --network=NETWORK --subnet=SUBNETDove:
SSH_NEG_NAMEè il nome del NEG che vuoi creare per l'endpoint SSH.SSH_PSCè il valore dell'endpoint SSH Private Service Connect.
Configura un bilanciatore del carico interno (ILB) proxy
Gli endpoint non sono accessibili dalle reti VPC in peering. Per accedere agli endpoint Secure Source Manager, devi configurare un bilanciatore del carico interno (ILB) L4 per ogni endpoint. Per ulteriori informazioni sull'accesso ai servizi pubblicati tramite gli endpoint, consulta Informazioni sull'accesso ai servizi pubblicati tramite gli endpoint.
Per creare una subnet solo proxy per gli ILB, esegui questo comando.
gcloud compute networks subnets create ILB_PROXY_SUBNET_NAME \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=INSTANCE_LOCATION \ --network=NETWORK \ --range=CIDR_RANGE \ --project=INSTANCE_PROJECT_IDDove:
ILB_PROXY_SUBNET_NAMEè il nome della subnet da creare.CIDR_RANGEè l'intervallo di indirizzi IP primario della subnet. Devi utilizzare una subnet mask non superiore a26in modo che siano disponibili almeno 64 indirizzi IP per i proxy nella regione. La lunghezza consigliata della subnet mask è/23. Per ulteriori informazioni sulle subnet solo proxy, consulta Subnet solo proxy per i bilanciatori del carico basati su Envoy.
Per creare un ILB L4 per il NEG di connessione HTTP, esegui questo comando.
gcloud compute backend-services create HTTP_PROXY_ILB \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --load-balancing-scheme=INTERNAL_MANAGEDDove
HTTP_PROXY_ILBè il nome dell'ILB da creare per l'endpoint HTTP.Per creare un ILB L4 per il NEG di connessione SSH, esegui questo comando.
gcloud compute backend-services create SSH_PROXY_ILB \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --load-balancing-scheme=INTERNAL_MANAGEDDove
SSH_PROXY_ILBè il nome dell'ILB da creare per l'endpoint SSH.
Registra il NEG Private Service Connect come backend degli ILB
Per registrare il NEG HTTP, esegui questo comando.
gcloud compute backend-services add-backend HTTP_PROXY_ILB \ --network-endpoint-group=HTTP_NEG_NAME \ --network-endpoint-group-region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_IDPer registrare il NEG SSH, esegui questo comando.
gcloud compute backend-services add-backend SSH_PROXY_ILB \ --network-endpoint-group=SSH_NEG_NAME \ --network-endpoint-group-region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_ID
Crea proxy TCP di destinazione per gli ILB
Per creare un proxy TCP di destinazione per l'ILB HTTP, esegui questo comando.
gcloud compute target-tcp-proxies create ILB_HTTP_TCP_TARGET_PROXY \ --backend-service=HTTP_PROXY_ILB \ --region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_IDDove
ILB_HTTP_TCP_TARGET_PROXYè il nome del proxy TCP di destinazione che vuoi creare per l'ILB HTTP.Per creare un proxy TCP di destinazione per l'ILB SSH, esegui questo comando.
gcloud compute target-tcp-proxies create ILB_SSH_TCP_TARGET_PROXY \ --backend-service=SSH_PROXY_ILB \ --region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_IDDove
ILB_SSH_TP_TARGET_PROXYè il nome del proxy TCP di destinazione che stai creando per l'ILB SSH.
Crea regole di forwarding per indirizzare il traffico agli ILB
Per creare una regola di forwarding per indirizzare il traffico all'ILB HTTP, esegui questo comando.
gcloud compute forwarding-rules create HTTP_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --ports 443 \ --target-tcp-proxy=ILB_HTTP_TCP_TARGET_PROXY \ --target-tcp-proxy-region=INSTANCE_LOCATION \ --network-tier PREMIUM \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET \ --subnet-region=INSTANCE_LOCATIONDove
HTTP_PROXY_FORWARDè il nome della regola di forwarding che stai creando.Per creare una regola di forwarding per indirizzare il traffico all'ILB SSH, esegui questo comando.
gcloud compute forwarding-rules create SSH_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --ports 22 \ --target-tcp-proxy=ILB_SSH_TCP_TARGET_PROXY \ --target-tcp-proxy-region=INSTANCE_LOCATION \ --network-tier PREMIUM \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET \ --subnet-region=INSTANCE_LOCATIONDove
SSH_PROXY_FORWARDè il nome della regola di forwarding che stai creando.
Crea i record DNS privati
Una volta configurate le regole di forwarding, devi registrare i record DNS nella tua zona DNS privata di Cloud DNS per ogni nome host dell'istanza.
Per ottenere l'indirizzo IP della regola di forwarding HTTP, esegui questo comando.
gcloud compute forwarding-rules describe HTTP_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATIONDove
HTTP_PROXY_FORWARDè il nome che hai assegnato alla regola di forwarding per HTTP.Per registrare il nome host dell'API, esegui questo comando.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER-api.INSTANCE_LOCATION.p.sourcemanager.dev. \ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=HTTP_LB_IPSostituisci quanto segue:
INSTANCE_ID: con l'ID istanza.INSTANCE_PROJECT_NUMBER: con il numero di progetto dell'istanza. Google CloudINSTANCE_LOCATION: con la regione dell'istanza.INSTANCE_PROJECT_ID: con l'ID progetto dell'istanza. Google CloudZONE_NAME: con il nome che hai assegnato alla zona gestita.HTTP_LB_IP: è l'output digcloud compute forwarding-rules describe HTTP_PROXY_FORWARD.
Per registrare il nome host HTTP di Git, esegui questo comando.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER-git.INSTANCE_LOCATION.p.sourcemanager.dev. \ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=HTTP_LB_IPPer registrare il nome host HTML dell'interfaccia web, esegui questo comando.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER.INSTANCE_LOCATION.p.sourcemanager.dev.\ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=HTTP_LB_IPPer ottenere l'indirizzo IP della regola di forwarding SSH, esegui questo comando.
gcloud compute forwarding-rules describe SSH_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATIONDove
SSH_PROXY_FORWARDè il nome che hai assegnato alla regola di forwarding per SSH.Per registrare il nome host SSH di Git, esegui questo comando.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER-ssh.INSTANCE_LOCATION.p.sourcemanager.dev. \ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=SSH_LB_IPDove
SSH_LB_IPè l'output digcloud compute forwarding-rules describe SSH_PROXY_FORWARD.
Crea un repository nell'istanza
Puoi utilizzare un bastion host per accedere e creare un repository nell'istanza Private Service Connect.
Crea una VM bastion host con l'
cloud-platformambito seguendo le istruzioni riportate in Creare una VM bastion host.Crea un repository eseguendo questo comando.
curl \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://INSTANCE_ID-PROJECT_NUMBER-api.INSTANCE_LOCATION.p.sourcemanager.dev/v1/projects/PROJECT_NUMBER/locations/INSTANCE_LOCATION/repositories?repository_id=REPOSITORY_ID \ -d '{}'Sostituisci quanto segue:
INSTANCE_ID: con il nome dell'istanza Secure Source Manager.PROJECT_NUMBER: con il numero di progetto dell'istanza. Google CloudINSTANCE_LOCATION: con la località dell'istanza.REPOSITORY_ID: con il nome che vuoi assegnare al repository.
Viene creato un repository nell'istanza Private Service Connect.
Testa l'accesso a Secure Source Manager da Cloud Build
Per verificare che tutto funzioni correttamente, puoi utilizzare il seguente file di configurazione della build per testare la connettività ed eseguire il pull del codice sorgente da Secure Source Manager. Il file di configurazione della build presuppone che tu stia utilizzando Cloud Logging per archiviare i log di build. Se utilizzi un bucket Cloud Storage creato dall'utente, consulta Eseguire una build utilizzando un file di configurazione per istruzioni su come modificare il file di configurazione della build.
Prima di utilizzare il seguente file YAML, sostituisci quanto segue:
CA_POOL_NAME: con il nome del pool di CA che hai utilizzato quando hai creato l'istanza Private Service Connect.CA_PROJECT_ID: con il Google Cloud progetto che hai utilizzato per creare il pool di CA.INSTANCE_LOCATION: con la località dell'istanza.INSTANCE_ID: con il nome dell'istanza.INSTANCE_PROJECT_NUMBER: con il numero di progetto dell'istanza. Google CloudREPOSITORY_ID: con il nome che hai assegnato al repository.SA_PROJECT_ID: con l'ID progetto del account di servizio che utilizzi con Cloud Build.SERVICE_ACCOUNT: con l'indirizzo email del account di servizio che utilizzi con Cloud Build.
steps:
- name: gcr.io/cloud-builders/gcloud
args:
- privateca
- pools
- get-ca-certs
- CA_POOL_NAME
- '--project'
- CA_PROJECT_ID
- '--location'
- INSTANCE_LOCATION
- '--output-file=cacert.pem'
- name: gcr.io/cloud-builders/git
args:
- config
- '--global'
- 'credential.https://INSTANCE_ID-INSTANCE_PROJECT_NUMBER-git.INSTANCE_LOCATION.p.sourcemanager.dev.helper'
- gcloud.sh
- name: gcr.io/cloud-builders/git
args:
- config
- '--global'
- http.sslCAInfo
- cacert.pem
- name: gcr.io/cloud-builders/git
env:
- GIT_TRACE=1
- GIT_CURL_VERBOSE=1
args:
- clone
- >-
https://INSTANCE_ID-INSTANCE_PROJECT_NUMBER-git.INSTANCE_LOCATION.p.sourcemanager.dev/INSTANCE_PROJECT_ID/REPOSITORY_ID
- https-clone
serviceAccount: 'projects/SA_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT'
options:
logging: CLOUD_LOGGING_ONLY
Passaggi successivi
- Per automatizzare le build da Secure Source Manager, segui le istruzioni riportate in Creare un file di trigger.