Modifica dell'account di servizio predefinito di Cloud Build

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

Il comportamento predefinito per l'utilizzo degli account di servizio da parte di Cloud Build nei nuovi progetti è stato modificato nell'arco di diverse settimane a maggio e giugno 2024. Queste modifiche miglioreranno la security posture predefinita dei nostri clienti in futuro. Puoi disattivare queste modifiche configurando il vincolo dei criteri dell'organizzazione.

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

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

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

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

  • Progetti con un'organizzazione. Se esegui la prima compilazione nel progetto dopo la modifica, per impostazione predefinita il progetto utilizzerà l'account di servizio Compute Engine per le compilazioni inviate utilizzando l'API Cloud Build o Google Cloud CLI. Puoi utilizzare un account di servizio specificato dall'utente o disattivare la modifica attivando l'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 per impostazione predefinita il service account Cloud Build legacy per tutte le build. Puoi continuare a utilizzare un account di servizio specificato dall'utente selezionando l'account di servizio Compute Engine o creandone uno tuo.

  • Progetti esistenti di un'organizzazione. Se hai eseguito la prima compilazione 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. Dovrai specificare un account di servizio quando crei o aggiorni un trigger, a meno che l'account di servizio predefinito per il tuo progetto non sia l'account di servizio Cloud Build legacy.

  • Nome dell'account di servizio Cloud Build: all'account di servizio Cloud Build verrà fatto riferimento come account di servizio Cloud Build precedente.

Cosa occorre fare?

Se fai parte di un'organizzazione, questa può configurare il comportamento di tutti i progetti impostando un criterio dell'organizzazione con le limitazioni scelte.

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

  • Non applicata: constraints/cloudbuild.disableCreateDefaultServiceAccount
  • Non applicata: constraints/cloudbuild.useComputeServiceAccount
  • Applicata: constraints/cloudbuild.useBuildServiceAccount

Se non puoi o non vuoi modificare i criteri dell'organizzazione e attivi l'API Cloud Build dopo la modifica, verifica che l'account di servizio predefinito di Compute Engine o l'account di servizio creato dall'utente disponga di autorizzazioni sufficienti per la compilazione. In particolare, l'utente che invia la build deve avere l'autorizzazione iam.serviceAccounts.actAs per l'account di servizio.

Nuovi vincoli dei criteri dell'organizzazione

Cloud Build ha introdotto nuovi vincoli booleani per i criteri dell'organizzazione per configurare:

  • La possibilità di utilizzare l'account di servizio Cloud Build precedente.
  • L'account di servizio predefinito per tutti i progetti di un'organizzazione.

Per modificare i criteri dell'organizzazione, puoi utilizzare la console Google Cloud o Google Cloud CLI:

Per scoprire di più sui criteri dell'organizzazione, consulta la sezione Introduzione al servizio Policy dell'organizzazione.

Configurare la disponibilità dell'account di servizio Cloud Build legacy

Per configurare la disponibilità dell'account di servizio Cloud Build legacy quando attivi l'API Cloud Build, Cloud Build introdurrà il seguente vincolo booleano dei criteri:

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

  • Applicata: constraints/cloudbuild.disableCreateDefaultServiceAccount. Disattiva l'utilizzo del service account Cloud Build precedente nei nuovi progetti. Questo è il valore predefinito del vincolo.

Questo vincolo riguarda solo i progetti che eseguono la prima compilazione 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 compilazione quando la configurazione è attiva. Non puoi disattivare la disponibilità dell'account di servizio Cloud Build legacy in un progetto in cui l'account di servizio era precedentemente disponibile. Tuttavia, anche se l'account del servizio è disponibile, puoi impedire agli utenti della tua organizzazione di utilizzarlo, come descritto nella sezione seguente.

Come per tutti i criteri e i vincoli dell'organizzazione, puoi impostare questi criteri a livello di organizzazione o di progetto.

Configurare l'account di servizio predefinito per un'organizzazione

Per configurare l'account di servizio predefinito utilizzato in un'organizzazione, Cloud Build introduce due nuove limitazioni booleane dei criteri:

  • constraints/cloudbuild.useBuildServiceAccount: configura l'utilizzo dell'account di servizio precedente Cloud Build.
  • constraints/cloudbuild.useComputeServiceAccount: configura l'utilizzo dell'account di servizio predefinito Compute Engine.

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

  • Utilizza l'account di servizio predefinito di Compute Engine sia per le build inviate manualmente sia per quelle attivate. Imposta i seguenti vincoli nel criterio dell'organizzazione:

    • Non applicata: constraints/cloudbuild.useBuildServiceAccount
    • Applicata: constraints/cloudbuild.useComputeServiceAccount
  • Utilizza un account di servizio specificato dall'utente sia per le build inviate manualmente sia per quelle attivate. In genere, questa è l'opzione più sicura. Imposta i seguenti vincoli nei criteri dell'organizzazione:

    • Non applicata: constraints/cloudbuild.useBuildServiceAccount
    • Non applicata: constraints/cloudbuild.useComputeServiceAccount
  • Continua a utilizzare il service account Cloud Build precedente. Se sei consapevole dei compromessi di sicurezza che ne derivano, imposta i seguenti vincoli nel criterio dell'organizzazione:

    • Non applicata: constraints/cloudbuild.disableCreateDefaultServiceAccount
    • Non applicata: constraints/cloudbuild.useComputeServiceAccount
    • Applicata: constraints/cloudbuild.useBuildServiceAccount
  • Continua a utilizzare l'account di servizio precedente di Cloud Build per i progetti che hanno attivato l'API Cloud Build prima della modifica e inizia a utilizzare l'account di servizio predefinito di Compute Engine per i nuovi progetti. Assicurati di comprendere i compromessi di sicurezza coinvolti e imposta i seguenti vincoli nei criteri della tua organizzazione:

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

Recuperare l'account di servizio predefinito corrente per un progetto

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

Interfaccia a riga di comando gcloud

Esegui il seguente comando per recuperare l'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 quanto segue: