Se non specifichi un account di servizio, Cloud Build potrebbe selezionare automaticamente un account di servizio per eseguire le build per tuo conto. Questo account di servizio potrebbe avere autorizzazioni inutilmente ampie per il tuo caso d'uso, ad esempio l'accesso ai tuoi repository Cloud Source e a qualsiasi bucket Cloud Storage del tuo progetto.
Per migliorare la postura di sicurezza dei tuoi progetti e ridurre il potenziale impatto delle configurazioni errate o degli utenti malintenzionati, ti consigliamo di seguire il principio del privilegio minimo. Se adotti questo principio, puoi assegnare la priorità a ciascun account di servizio le autorizzazioni e i ruoli con ambito all'attività che esegue. Ad esempio, puoi utilizza un account di servizio per creare ed eseguire il push delle immagini in Artifact Registry, come mostrato sul blog di Google Cloud.
Prima di iniziare
-
Enable the Cloud Build and IAM APIs.
Se prevedi di utilizzare questo account per creare e gestire le credenziali, ad esempio per creare credenziali di breve durata, abilita l'API Credenziali account di servizio IAM.
Crea un account di servizio, se non l'hai ancora fatto.
Concedi autorizzazioni IAM
Per consentire alla tua build di accedere ai servizi a cui deve connettersi, devi concedi alcuni ruoli e autorizzazioni:
Apri la pagina Impostazioni di Cloud Build:
Apri la pagina Impostazioni di Cloud Build
Vedrai la scheda Autorizzazioni account di servizio:
Dall'elenco a discesa, seleziona l'account di servizio di cui vuoi assegnare i ruoli modifica.
Imposta su Abilita lo stato del ruolo che vuoi aggiungere.
Se il ruolo necessario per la pipeline di compilazione non è elencato qui, puoi concedere ruoli aggiuntivi nella pagina delle configurazioni IAM.
Puoi trovare ulteriori informazioni sui ruoli comunemente richiesti per una compilazione in Configurare l'accesso alle risorse Cloud Build e nell'elenco completo dei ruoli e delle autorizzazioni IAM di Cloud Build.
Configura i log di build
Quando specifichi il tuo account di servizio per le build, devi archiviare i log di compilazione in Cloud Logging o in un bucket Cloud Storage creato dall'utente. Tu non può archiviare i tuoi log nel bucket di log predefinito.
Per archiviare i log in un bucket Cloud Storage, segui le istruzioni in Archivia i log di build nel bucket creato dall'utente. Assicurati di non aver impostato un criterio di conservazione sul bucket dei log, in quanto potrebbe impedire a Cloud Build di scrivere i log di compilazione nel bucket.
Per archiviare i log di build in Cloud Logging, concedi il Writer log (
roles/logging.logWriter
) all'account di servizio.Per ulteriori informazioni su dove archiviare i log di build, consulta Scegliere dove archiviare per archiviare i log di build.
Esegui una build utilizzando un file di configurazione
Per eseguire manualmente una build utilizzando un file di configurazione:
Nella directory principale del progetto, crea un file di configurazione della build Cloud Build chiamato
cloudbuild.yaml
ocloudbuild.json
.Aggiungi il campo
serviceAccount
e la configurazione di logging che preferisci.Se memorizzi i log di compilazione in Cloud Logging, aggiungi un
logging
campo e imposta il valore del campo suCLOUD_LOGGING_ONLY
.Se archivi i log di build in un bucket Cloud Storage creato dall'utente:
- Aggiungi un campo
logging
e imposta il relativo valore suGCS_ONLY
. - Aggiungi un campo
logsBucket
e imposta il relativo valore sulla posizione del bucket Cloud Storage.
- Aggiungi un campo
L'esempio seguente configura Cloud Build per l'esecuzione di build utilizzando un account di servizio specificato dall'utente e configura i log di build in modo che vengano archiviati in bucket Cloud Storage creato dall'utente:
YAML
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' serviceAccount: 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT' options: logging: GCS_ONLY
JSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "serviceAccount": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT", "options": { "logging": "GCS_ONLY" } }
Sostituisci i valori segnaposto nel file di configurazione di compilazione con quanto segue:
LOGS_BUCKET_LOCATION
è il bucket Cloud Storage per archiviare i log di build. Ad esempio,gs://mylogsbucket
.PROJECT_ID
è l'ID del progetto Google Cloud in cui stai eseguendo la build.SERVICE_ACCOUNT
è l'indirizzo email o l'ID univoco dell'account di servizio che vuoi specificare per le build. Ad esempio, un servizio l'indirizzo email dell'account ha il seguente aspetto:service-account-name@project-id.iam.gserviceaccount.com
.
Avvia la build utilizzando il file di configurazione della build:
gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
Sostituisci i valori segnaposto nei comandi precedenti con quanto segue:
CONFIG_FILE_PATH
è il percorso del file di configurazione della build.SOURCE_DIRECTORY
è il percorso o l'URL del codice sorgente.
Se non specifichi CONFIG_FILE_PATH e SOURCE_DIRECTORY nel comando
gcloud builds submit
, Cloud Build assume che il file di configurazione della compilazione e il codice sorgente si trovino nella directory di lavoro corrente.
Esegui build utilizzando i trigger
Per eseguire una build con i trigger di Cloud Build utilizzando il tuo account di servizio, configura l'opzione di logging che preferisci e seleziona l'account di servizio preferito al momento della creazione del trigger.
Nel file di configurazione della build:
Se archivi i log di build in Cloud Logging, aggiungi
logging
e imposta il valore del campo suCLOUD_LOGGING_ONLY
.Se archivi i log di build in un bucket Cloud Storage creato dall'utente:
- Aggiungi un campo
logging
e imposta il relativo valore suGCS_ONLY
. - Aggiungi un campo
logsBucket
e imposta il valore sul tuo bucket Cloud Storage in ogni località.
- Aggiungi un campo
L'esempio seguente configura la memorizzazione dei log di compilazione in un bucket Cloud Storage creato dall'utente:
YAML
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' options: logging: GCS_ONLY
JSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "options": { "logging": "GCS_ONLY" } }
Sostituisci
LOGS_BUCKET_LOCATION
con Bucket Cloud Storage per archiviare i log di build. Ad esempio:gs://mylogsbucket
.Specifica un account di servizio da utilizzare con il trigger di build:
Console
Per eseguire le build utilizzando la pagina Trigger nella console Google Cloud, l'account di servizio specificato dall'utente deve trovarsi nello stesso progetto della build trigger. Per utilizzare gli attivatori con account di servizio tra progetti, crea l'attivatore di compilazione utilizzando lo strumento
gcloud
.Nel campo Account di servizio, specifica il tuo account di servizio. Se non specifichi un account di servizio, Cloud Build utilizza l'account di servizio predefinito.
Fai clic su Crea per salvare il trigger di build.
gcloud
Quando crei un trigger di build, specifica il tuo account di servizio utilizzando il flag
--service-account
. Nell'esempio seguente,gcloud
crea un trigger di build che esegue il pull del codice da un repository Git:gcloud builds triggers create github \ --name=TRIGGER_NAME \ --repo-name=REPO_NAME \ --repo-owner=REPO_OWNER \ --branch-pattern=BRANCH_PATTERN --build-config=BUILD_CONFIG_FILE --service-account=SERVICE_ACCOUNT --project=BUILD_PROJECT
Sostituisci i valori segnaposto nel file di configurazione di compilazione con quanto segue:
TRIGGER_NAME
è il nome dell'attivatore di compilazione.REPO_NAME
è il nome del tuo repository.REPO_OWNER
è il nome utente del proprietario del repository.BRANCH_PATTERN
è il nome del ramo nel repository su cui invocare la compilazione.TAG_PATTERN
è il nome del tag in su cui richiamare la build.BUILD_CONFIG_FILE
è il percorso della tua build di configurazione del deployment.SERVICE_ACCOUNT
è il tuo account di servizio in nel formato/projects/PROJECT_ID/serviceAccounts/ACCOUNT_ID_OR_EMAIL
.BUILD_PROJECT
è il progetto in cui stai avviando le build.
Configurazione tra progetti
Se l'account di servizio specificato dall'utente si trova in un progetto diverso da quello in cui stai avviando le build, concedi l'accesso necessario:
Nel progetto che contiene l'account di servizio specificato dall'utente, assicurati che
iam.disableCrossProjectServiceAccountUsage
vincolo del criterio dell'organizzazione non viene applicata. Questo vincolo viene applicato per impostazione predefinita. Per disattivare questo vincolo dei criteri dell'organizzazione, esegui il seguente comando, dove SERVICE_ACCOUNT_PROJECT_ID è il progetto che contiene l'account di servizio specificato dall'utente:gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=SERVICE_ACCOUNT_PROJECT_ID
Nel progetto che contiene il tuo account di servizio specificato dall'utente, concedi la Ruolo
roles/iam.serviceAccountTokenCreator
per Agente di servizio Cloud Build del progetto in cui ti trovi build in esecuzione:gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member="serviceAccount:BUILD_SERVICE_AGENT" \ --role="roles/iam.serviceAccountTokenCreator"
Sostituisci i valori segnaposto nel comando con quanto segue:
SERVICE_ACCOUNT_PROJECT_ID
: l'ID progetto che contiene l'account di servizio specificato dall'utente.BUILD_SERVICE_AGENT
: l'ID indirizzo email dell'agente di servizio del tiposervice-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
, doveBUILD_PROJECT_NUMBER
è il numero del progetto in cui stai eseguendo le build. Puoi recuperare il numero del progetto pagina delle impostazioni progetto.
Limitazioni:
Il progetto Google Cloud deve trovarsi in un'organizzazione Google Cloud.
Devi avviare le build dalla riga di comando utilizzando
gcloud builds submit
oppuregcloud builds triggers create
. Per utilizzare la pagina Trigger nella console Google Cloud, l'account di servizio specificato dall'utente e l'attivatore di compilazione devono trovarsi nello stesso progetto.
Passaggi successivi
- Scopri di più sui ruoli e sulle autorizzazioni IAM di Cloud Build.
- Scopri come le modifiche all'account di servizio influiscono sul modo in cui esegui le build.