Modifica del account di servizio predefinito di Cloud Build

Cloud Build seleziona automaticamente il service account Cloud Build per eseguire le build per tuo conto, a meno che tu non esegua l'override di questo comportamento. Questo account di servizio predefinito potrebbe avere autorizzazioni inutilmente ampie per il tuo caso d'uso, ad esempio l'accesso a qualsiasi bucket Cloud Storage nel tuo progetto.

Il comportamento predefinito di utilizzo dei service account di Cloud Build nei nuovi progetti è cambiato nel corso di diverse settimane a maggio e giugno 2024. Queste modifiche migliorano la security posture predefinita dei nostri clienti in futuro. Puoi disattivare queste modifiche configurando il vincolo di policy dell'organizzazione.

Prima di questa modifica, Cloud Build utilizzava un account di servizio specifico di Cloud Build come predefinito, ora denominato account di servizio Cloud Build legacy.

Dopo questa modifica, Cloud Build utilizza l'account di servizio predefinito di Compute Engine come service account predefinito.

L'impatto sui tuoi progetti dipende dal fatto che tu faccia parte di un'organizzazione:

  • Progetti senza un'organizzazione. Se esegui la prima build nel tuo progetto dopo la modifica, questo progetto utilizzerà per impostazione predefinita il service account Compute Engine per le build inviate utilizzando l'API Cloud Build o Google Cloud CLI. Questi progetti non avranno l'opzione per utilizzare ilaccount di serviziot Cloud Build legacy, ma potranno utilizzare un service account specificato dall'utente.

  • Progetti con un'organizzazione. Se esegui la prima build nel tuo progetto dopo la modifica, questo progetto utilizzerà l'account di servizio Compute Engine per impostazione predefinita per le build inviate utilizzando l'API Cloud Build o Google Cloud CLI. Puoi utilizzare un service account specificato dall'utente o disattivare la modifica attivando il account di servizio Cloud Build nella tua organizzazione.

  • Progetti esistenti senza un'organizzazione. Se hai eseguito la prima build nel tuo progetto prima della modifica, il progetto continuerà con il vecchio comportamento, utilizzando il service account Cloud Build legacy per impostazione predefinita per tutte le build. Puoi continuare a utilizzare un service account specificato dall'utente selezionando il account di servizio Compute Engine o creandone uno personalizzato.

  • Progetti esistenti con un'organizzazione. Se hai eseguito la prima build nel tuo progetto prima della modifica, il progetto continuerà con il vecchio comportamento, utilizzando per impostazione predefinita il service account Cloud Build legacy. Puoi anche continuare a utilizzare un account di servizio specificato dall'utente.

  • Attivazione. Devi specificare un account di servizio quando crei o aggiorni un trigger, a meno che il account di servizio predefinito per il tuo progetto non sia il account di servizio Cloud Build legacy.

  • Nome del account di servizio Cloud Build: il account di servizio Cloud Build verrà chiamato service account Cloud Build legacy.

Cosa occorre fare?

Se fai parte di un'organizzazione, quest'ultima può configurare il comportamento di tutti i progetti impostando una policy dell'organizzazione con i vincoli scelti.

La tua organizzazione può disattivare queste modifiche impostando i seguenti vincoli booleani della policy dell'organizzazione:

  • Non applicato: constraints/cloudbuild.disableCreateDefaultServiceAccount
  • Non applicato: constraints/cloudbuild.useComputeServiceAccount
  • Applicato: constraints/cloudbuild.useBuildServiceAccount

Se non puoi o non vuoi modificare la policy dell'organizzazione e abiliti l'API Cloud Build dopo la modifica, verifica che l'account di servizio predefinito di Compute Engine o il service account creato dall'utente disponga di autorizzazioni sufficienti per la build. In particolare, l'utente che invia la build deve disporre dell'autorizzazione iam.serviceAccounts.actAs sul service account.

Nuovi vincoli delle policy dell'organizzazione

Cloud Build ha introdotto nuovi vincoli booleani delle policy dell'organizzazione da configurare:

  • La possibilità di utilizzare il account di servizio Cloud Build legacy.
  • Il account di servizio predefinito per tutti i progetti di un'organizzazione.

Per modificare le policy dell'organizzazione, puoi utilizzare la console Google Cloud o Google Cloud CLI:

Per saperne di più sulle policy dell'organizzazione, consulta la Introduzione al servizio Policy dell'organizzazione.

Configura la disponibilità del account di servizio Cloud Build legacy

Per configurare la disponibilità del service account Cloud Build legacy quando abiliti l'API Cloud Build, Cloud Build introdurrà il seguente vincolo di policy booleano:

  • Non applicato: constraints/cloudbuild.disableCreateDefaultServiceAccount. Consente l'utilizzo del account di servizio Cloud Build legacy nei nuovi progetti.

  • Applicato: constraints/cloudbuild.disableCreateDefaultServiceAccount. Disabilita l'utilizzo del account di servizio Cloud Build legacy nei nuovi progetti. Questo è il valore predefinito del vincolo.

Questo vincolo influisce solo sui progetti che eseguono la prima build dopo l'implementazione della modifica. Se decidi di non applicare il vincolo del criterio, la modifica è permanente per tutti i progetti che eseguono la prima build quando questa configurazione è attiva. Non puoi disattivare la disponibilità delaccount di serviziot Cloud Build legacy in un progetto in cui iaccount di serviziont era disponibile in precedenza. Tuttavia, anche se il service account è disponibile, puoi impedire agli utenti della tua organizzazione di utilizzarlo, come descritto nella sezione seguente.

Come per tutte le policy e i vincoli dell'organizzazione, puoi impostare queste policy a livello di organizzazione o di progetto.

Configurare il account di servizio predefinito per un'organizzazione

Per configurare quale account di servizio predefinito viene utilizzato in un'organizzazione, Cloud Build introduce due nuovi vincoli booleani:

Puoi configurare questi criteri in modo indipendente l'uno dall'altro, ma sono più utili quando le regole di applicazione vengono combinate nei seguenti scenari:

  • Opzione più sicura: utilizza un service account specificato dall'utente sia per le build inviate manualmente sia per le build attivate. Per farlo, imposta i seguenti vincoli nella policy dell'organizzazione:

    • Non applicato: constraints/cloudbuild.useBuildServiceAccount
    • Non applicato: constraints/cloudbuild.useComputeServiceAccount
  • Service account Compute Engine predefinito: per utilizzare il service account Compute Engine predefinito sia per le build inviate manualmente sia per quelle attivate, imposta i seguenti vincoli nel criterio dell'organizzazione:

    • Non applicato: constraints/cloudbuild.useBuildServiceAccount
    • Applicato: constraints/cloudbuild.useComputeServiceAccount
  • Service account Cloud Build legacy: se comprendi i compromessi di sicurezza che ne derivano, imposta i seguenti vincoli nel criterio dell'organizzazione:

    • Non applicato: constraints/cloudbuild.disableCreateDefaultServiceAccount
    • Non applicato: constraints/cloudbuild.useComputeServiceAccount
    • Applicato: constraints/cloudbuild.useBuildServiceAccount
  • Service account predefiniti legacy e Compute Engine: continua a utilizzare il account di servizio legacy Cloud Build per i progetti che hanno abilitato l'API Cloud Build prima della modifica e inizia a utilizzare il service account predefinito di Compute Engine per i nuovi progetti. Se comprendi i compromessi di sicurezza che ne derivano, imposta i seguenti vincoli nel criterio dell'organizzazione:

    • Applicato: constraints/cloudbuild.disableCreateDefaultServiceAccount
    • Applicato: constraints/cloudbuild.useComputeServiceAccount
    • Applicato: constraints/cloudbuild.useBuildServiceAccount

Linee guida per i ruoli IAM

Il criterio dell'organizzazione iam.automaticIamGrantsForDefaultServiceAccounts impedisce che a determinati service account predefiniti venga concesso il ruolo Editor (roles/editor) al momento della creazione. Queste norme sono abilitate nelle organizzazioni a partire dal 3 maggio 2024 e si applicano agli account di servizio predefiniti Compute Engine e App Engine creati a partire dal 3 maggio 2024. Ti consigliamo di lasciare queste norme attive, poiché il ruolo Editor è molto ampio e concede più autorizzazioni di quelle necessarie per la maggior parte dei casi d'uso.

Questa policy dell'organizzazione non si applica al account di servizio Cloud Build legacy, in quanto a questo account di servizio non viene concesso il ruolo Editor per impostazione predefinita. Tuttavia, il service account Cloud Build legacy dispone del ruolo Cloud Build Service Account (roles/cloudbuild.builds.builder) concesso per impostazione predefinita, che dispone anche di un'ampia gamma di autorizzazioni. Se utilizzi il account di servizio Cloud Build legacy, ti consigliamo di verificare se il ruolo Cloud Build Service Account è necessario per il tuo caso d'uso o se potresti sostituirlo con un ruolo con meno autorizzazioni.

Per saperne di più, consulta Limitazione dell'utilizzo dei account di servizio IAM e Utilizzare IAM in modo sicuro.

Ottieni il account di servizio predefinito corrente per un progetto

Per determinare quale account di servizio Cloud Build utilizza come predefinito per un progetto, puoi utilizzare Google Cloud CLI o l'API Cloud Build:

gcloud CLI

Esegui questo comando per ottenere il account di servizio predefinito per il progetto corrente:

gcloud builds get-default-service-account

API Cloud Build

Utilizza cURL per chiamare l'API Cloud Build:

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/defaultServiceAccount

Sostituisci i valori segnaposto con i seguenti: