Service account personalizzato per Cloud Build (1ª gen.)
Le funzioni di Cloud Run utilizzano Cloud Build durante la creazione e il deployment la funzione Cloud Run. Per impostazione predefinita, le funzioni Cloud Run utilizzano l'account di servizio Cloud Build predefinito come principale durante l'esecuzione della build. A partire da luglio 2024, Cloud Build ha modificato il comportamento predefinito per l'utilizzo degli account di servizio nei nuovi progetti. Questa modifica è descritta in Modifica dell'account di servizio Cloud Build. A seguito di questa modifica, i nuovi progetti che eseguono il deployment di funzioni per la prima volta potrebbero utilizzare un account di servizio Cloud Build predefinito con autorizzazioni insufficienti per la creazione di una funzione. Se questa modifica ti interessa, puoi procedere in uno dei seguenti modi:
Consulta le indicazioni di Cloud Build sulle modifiche all'account di servizio predefinito e disattiva queste modifiche.
Aggiungi il ruolo Account Cloud Build (
roles/cloudbuild.builds.builder
) all'account di servizio Compute Engine predefinito.Creare un account di servizio Cloud Build personalizzato per i deployment delle funzioni.
Questo documento descrive come trasferire un account di servizio creato dall'utente per l'utilizzo in Cloud Build, quando esegui il deployment della funzione.
Puoi eseguire il deployment delle funzioni con account di servizio personalizzati utilizzando Google Cloud CLI, console Google Cloud o API Cloud Run Functions.
Di seguito sono riportati alcuni scenari in cui potresti voler fornire un servizio diverso da utilizzare quando Cloud Build crea la tua funzione:
Vuoi avere un maggiore controllo su quali account di servizio aggiungere alla tua rete VPC-SC perimetrale.
Vuoi che Cloud Build venga eseguito con autorizzazioni rispetto a quelle dell'account di servizio predefinito senza dover revocare ogni l'autorizzazione singolarmente.
Vuoi impostare autorizzazioni Cloud Build granulari specifiche per il tuo di Google Cloud, non condividere un account di servizio Cloud Build ottimizzato per per altri scopi.
La tua organizzazione ha disattivato l'utilizzo dell'account di servizio predefinito.
Abilita API
Questa funzionalità richiede l'abilitazione dell'API IAM.
Utilizza Google Cloud CLI per abilitare le API necessarie per eseguire il deployment di una funzione Cloud Run oppure utilizza la console Google Cloud:
gcloud services enable iam.googleapis.com
Configura l'account di servizio
Questo documento descrive come creare un nuovo account di servizio e concedere le autorizzazioni richieste. Se vuoi utilizzare un account di servizio esistente, ti servirà l'indirizzo email dell'account di servizio che intendi utilizzare. Per maggiori dettagli, consulta la sezione sulla configurazione degli account di servizio specificati dall'utente.
Puoi visualizzare gli account di servizio esistenti come segue o utilizzare la console Google Cloud:
gcloud iam service-accounts list
Crea service account
Utilizza Google Cloud CLI per creare l'account di servizio o utilizza la console Google Cloud:
gcloud iam service-accounts create SA_EMAIL
Sostituisci SA_EMAIL con l'indirizzo email del tuo account di servizio.
Concedi autorizzazioni
L'account di servizio che utilizzi avrà bisogno dei seguenti ruoli:
roles/logging.logWriter
: obbligatoria per archiviare i log di compilazione in Cloud Logging.roles/artifactregistry.writer
: obbligatoria per archiviare le immagini di build in Artifact Registry. Per il comportamento predefinito, l'account di servizio deve poter accedere ai repository denominati "gcf-artifacts" e "cloud-run-source-deploy". L'accesso ai repository può essere impostato nel criterio IAM del repository. In alternativa, puoi fornire il tuo repository di elementi tramite il campodockerRepository
.roles/storage.objectViewer
: obbligatoria per recuperare il codice sorgente della funzione dal bucket Cloud Storage e per archiviare le immagini di compilazione in Container Registry. Per il comportamento predefinito, l'account di servizio deve poter accedere ai bucket denominati "gcf-sources-*". A questo scopo, puoi aggiungere una condizione IAM alla concessione del ruolo, ad esempio:(resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-sources-")))
roles/storage.objectAdmin
: obbligatorio per Container Registry (ora deprecato). Per accedere al registry dei container, è necessario l'accesso ai bucket denominati*.artifacts.PROJECT_ID.appspot.com
.
Concedi i seguenti ruoli utilizzando Google Cloud CLI o la console Google Cloud.
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/logging.logWriter
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/artifactregistry.writer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectViewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectAdmin
Sostituisci quanto segue:
- PROJECT_ID: il tuo ID progetto Google Cloud.
- SA_EMAIL: l'indirizzo email del tuo account di servizio.
Esegui il deployment di una funzione con un account di servizio personalizzato
Puoi utilizzare Google Cloud CLI per eseguire il deployment di una funzione che utilizza un account di servizio personalizzato per Cloud Build:
- Il flag
--build-service-account
specifica Account di servizio IAM le cui credenziali verranno utilizzate per il passaggio di build. Se non viene fornito un account di servizio personalizzato, la funzione utilizza l'account di servizio predefinito del progetto per Cloud Build. - Facoltativamente, puoi utilizzare un
pool privato,
che specifichi utilizzando il flag
--build-worker-pool
.
gcloud functions deploy FUNCTION_NAME \
--no-gen2 \
--region=REGION \
--project=PROJECT_ID \
--runtime=RUNTIME \
--entry-point=CODE_ENTRYPOINT \
--build-service-account=projects/PROJECT_ID/serviceAccounts/SA_EMAIL \
--memory=256Mi \
--trigger-http \
--source=.
Sostituisci quanto segue:
- FUNCTION_NAME: il nome con cui hai disegnato la funzione.
- REGION: il nome della regione Google Cloud in cui vuoi eseguire il deployment della funzione
(ad es.
us-west1
). - PROJECT_ID: il tuo ID progetto Google Cloud.
- RUNTIME: l'ID runtime di un
versione di runtime supportata per l'esecuzione
la tua funzione, ad esempio
nodejs18
. - CODE_ENTRYPOINT: il punto di accesso alla tua funzione nel tuo codice sorgente. Questo è il codice che verrà eseguito quando la funzione viene eseguita.
- SA_EMAIL: l'indirizzo email del tuo account di servizio.