Questo documento descrive come configurare le build per utilizzare un service account gestito dall'utente.
Se non specifichi un account di servizio gestito dall'utente per le tue build, Cloud Build utilizza automaticamente il service account Cloud Build predefinito. Questo account di servizio predefinito potrebbe avere autorizzazioni inutilmente ampie, ad esempio l'accesso ai tuoi Cloud Source Repositories e a qualsiasi bucket Cloud Storage nel tuo progetto.
Ti consigliamo di seguire il principio del privilegio minimo assegnando autorizzazioni e ruoli agli account di servizio con ambito limitato all'attività che svolgono. Ad esempio, puoi utilizzare un account di servizio per creare e inviare immagini ad Artifact Registry, come mostrato nel Google Cloud blog.
Prima di iniziare
-
Abilita le API Cloud Build e IAM, se non sono già abilitate.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli. Se prevedi di utilizzare questo account per creare e gestire le credenziali, ad esempio per creare credenziali di breve durata, abilita l'API Service Account Credentials.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.Se non l'hai ancora fatto, crea un account di servizio.
Configurare il service account
Concedi i ruoli IAM al account di servizio gestito dall'utente in modo che disponga delle autorizzazioni necessarie per eseguire le build. Puoi anche configurare Cloud Build in modo che scelga automaticamente questoaccount di serviziot per i nuovi trigger.
-
Nella console Google Cloud , vai alla pagina settings Cloud Build Autorizzazioni:
Vai al menu Service account e seleziona il tuo account di servizio. Per scegliere unaccount di serviziot in un altro progetto, fai clic su Cambia progetto.
Per utilizzare il account di servizio selezionato come account di servizio per i nuovi trigger, attiva l'opzione Imposta come preselezionato per i nuovi trigger.
Nell'elenco dei servizi Google Cloud , abilita i ruoli IAM che vuoi concedere al tuo account di servizio.
Se il ruolo necessario per la pipeline di build non è elencato qui, puoi concedere ruoli aggiuntivi nella pagina delle configurazioni IAM.
Se hai selezionato un account di servizio in un altro progetto, completa i passaggi descritti in Configurazione tra progetti.
Per saperne di più sui ruoli IAM comunemente richiesti per una build, consulta le seguenti informazioni:
- Service account Cloud Build predefinito.
- Configurazione dell'accesso alle risorse Cloud Build.
- Ruoli e autorizzazioni IAM di Cloud Build.
Configura i log di build
Quando specifichi il tuo account di servizio per le build, devi archiviare i log delle build in uno dei seguenti tipi di bucket:
Bucket Cloud Storage nel progetto dell'utente. Questi possono essere bucket creati dall'utente o bucket creati daGoogle Cloude di proprietà dell'utente.
Se crei un bucket di log, assicurati che non abbia un criterio di conservazione, in quanto potrebbe impedire a Cloud Build di scrivere i log di build nel bucket.
Non puoi archiviare i log in un bucket di log di proprietà di Google Cloud.
Per ulteriori informazioni su dove archiviare i log di build, consulta Opzioni di archiviazione dei log di build.
Esegui una build utilizzando un file di configurazione
Per eseguire manualmente una build utilizzando un file di configurazione:
Nella directory root del progetto, crea un file di configurazione della build Cloud Build denominato
cloudbuild.yamlocloudbuild.json.Aggiungi il campo
serviceAccounte la configurazione di logging preferita.Se archivi i log di build in Cloud Logging, aggiungi un campo
logginge 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
logginge imposta il relativo valore suGCS_ONLY. - Aggiungi un campo
logsBuckete imposta il relativo valore sulla posizione del bucket Cloud Storage.
- Aggiungi un campo
L'esempio seguente configura Cloud Build per eseguire le build utilizzando unaccount di serviziot gestito dall'utente e configura i log di build in modo che vengano archiviati in un 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_ONLYJSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "serviceAccount": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT", "options": { "logging": "GCS_ONLY" } }Sostituisci le variabili nel file di configurazione della build con quanto segue:
LOGS_BUCKET_LOCATIONè il bucket Cloud Storage in cui archiviare i log di build. Ad esempio,gs://mylogsbucket.PROJECT_IDè l'ID del progetto Google Cloud in cui esegui la build.SERVICE_ACCOUNTè l'indirizzo email o l'ID univoco del account di servizio che vuoi specificare per le build. Ad esempio, un indirizzo email del service 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_DIRECTORYSostituisci le variabili nei comandi con i seguenti valori:
CONFIG_FILE_PATHè il percorso del file di configurazione della build.SOURCE_DIRECTORYè il percorso o l'URL del codice sorgente.
Se non specifichi un CONFIG_FILE_PATH e un SOURCE_DIRECTORY nel comando
gcloud builds submit, Cloud Build presuppone che il file di configurazione della build e il codice sorgente si trovino nella directory di lavoro corrente.
Eseguire build utilizzando i trigger
Per eseguire una build con i trigger Cloud Build utilizzando il tuo account di servizio, configura l'opzione di logging che preferisci e seleziona il account di servizio che preferisci quando crei il trigger.
Se vuoi utilizzare lo stesso account di servizio per tutti i nuovi trigger, puoi configurare Cloud Build in modo che selezioni automaticamente il service account.
Nel file di configurazione della build:
Se memorizzi i log di build in Cloud Logging, aggiungi un campo
logginge 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
logginge imposta il relativo valore suGCS_ONLY. - Aggiungi un campo
logsBuckete imposta il relativo valore sulla posizione del bucket Cloud Storage.
- Aggiungi un campo
L'esempio seguente configura l'archiviazione dei log di build in un bucket Cloud Storage creato dall'utente:
YAML
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' options: logging: GCS_ONLYJSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "options": { "logging": "GCS_ONLY" } }Sostituisci
LOGS_BUCKET_LOCATIONcon il bucket Cloud Storage in cui archiviare i log di build. Ad esempio,gs://mylogsbucket.Specifica un account di servizio da utilizzare con il trigger di build:
Console
Nel campo Service account, specifica il tuo account di servizio. Per scegliere unaccount di serviziot in un altro progetto, fai clic su Cambia progetto.
Se non specifichi un account di servizio, Cloud Build utilizza il service account predefinito.
Fai clic su Crea per salvare il trigger di build.
gcloud
Quando crei un trigger di build, specifica il account di servizio utilizzando il flag
--service-account. Nell'esempio seguente, il comandogcloudcrea un trigger di build che recupera il 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_PROJECTSostituisci le variabili nel file di configurazione della build con i seguenti valori:
TRIGGER_NAMEè il nome del trigger di build.REPO_NAMEè il nome del repository.REPO_OWNERè il nome utente del proprietario del repository.BRANCH_PATTERNè il nome del ramo nel tuo repository su cui richiamare la build.TAG_PATTERNè il nome del tag nel tuo repository per richiamare la build.BUILD_CONFIG_FILEè il percorso del file di configurazione della build.SERVICE_ACCOUNTè il tuo account di servizio nel formato/projects/PROJECT_ID/serviceAccounts/ACCOUNT_ID_OR_EMAIL.BUILD_PROJECTè il progetto in cui stai avviando le build.
Configurazione tra progetti
Puoi utilizzare un account di servizio gestito dall'utente per eseguire build in un progetto diverso da quello in cui hai creato il account di servizio solo se il vincolo dei criteri dell'organizzazione iam.disableCrossProjectServiceAccountUsage non è applicato. Questo vincolo viene applicato per impostazione predefinita.
Scopri di più.
Il comando seguente disabilita l'applicazione del vincolo e concede l'accesso necessario. Prima di impostare il vincolo nella policy dell'organizzazione, la tua organizzazione deve essere consapevole dei compromessi di sicurezza coinvolti:
gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=SERVICE_ACCOUNT_PROJECT_IDIn questo comando, SERVICE_ACCOUNT_PROJECT_ID è il progetto che contiene il account di servizio gestito dall'utente.
Nel progetto che contiene il account di servizio gestito dall'utente, concedi il ruolo
roles/iam.serviceAccountTokenCreatorper il service agent Cloud Build del progetto in cui esegui le build:gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member="serviceAccount:BUILD_SERVICE_AGENT" \ --role="roles/iam.serviceAccountTokenCreator"Sostituisci le variabili nel comando con quanto segue:
SERVICE_ACCOUNT_PROJECT_ID: l'ID progetto del progetto che contiene l'account di servizio gestito dall'utente.BUILD_SERVICE_AGENT: l'ID email dell'agente di servizio nel formatoservice-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com, doveBUILD_PROJECT_NUMBERè il numero di progetto del progetto in cui esegui le build. Puoi ottenere il numero di progetto dalla pagina delle impostazioni progetto.
Limitazioni:
Il tuo progetto Google Cloud deve trovarsi in un' Google Cloud organizzazione.
Devi avviare le build nella riga di comando utilizzando
gcloud builds submitogcloud builds triggers create.
Passaggi successivi
- Scopri di più sui ruoli e sulle autorizzazioni IAM di Cloud Build.
- Scopri in che modo le modifiche al service account influiscono sull'esecuzione delle build.