Function Identity (2ª generazione.)

Per la sicurezza, la maggior parte delle interazioni tra entità in Google Cloud richiede che ciascuna entità ha un'identità verificabile, protetta da una sorta di segreto, come una password o una chiave. Proprio come le altre entità necessitano di un'identità per accedere a Cloud Functions, spesso hanno bisogno di accedere ad altre risorse in Google Cloud per svolgono il proprio lavoro. Ogni funzione è associata a un account di servizio funge da identità quando la funzione accede ad altre risorse. L'account di servizio utilizzato da una funzione come identità è anche noto come account di servizio di runtime.

Per l'uso in produzione, Google consiglia di assegnare a ogni funzione un dell'identità mediante l'assegnazione di un account di servizio gestito dall'utente. Servizio gestito dall'utente consentono di controllare l'accesso concedendo un insieme minimo di autorizzazioni utilizzando Identity and Access Management.

Account di servizio di runtime

A meno che non specifichi un account di servizio di runtime diverso durante il deployment di , Cloud Functions utilizza un account di servizio predefinito come identità per l'esecuzione della funzione:

  • Cloud Functions utilizza account di servizio Compute predefinito, PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    Tieni presente che il numero del progetto è diverso dall'ID e dal nome del progetto. Puoi trovare il numero del tuo progetto nella console Google Cloud Pagina Dashboard.

A seconda della configurazione dei criteri dell'organizzazione, l'account di servizio predefinito potrebbe automaticamente il ruolo Editor progetto. Ti consigliamo vivamente di disabilitare la concessione automatica del ruolo entro il giorno applicazione del criterio dell'organizzazione iam.automaticIamGrantsForDefaultServiceAccounts di blocco. Se hai creato la tua organizzazione dopo il 3 maggio 2024, viene applicato per impostazione predefinita.

Se disabiliti la concessione automatica del ruolo, devi decidere quali ruoli concedere a quelli predefiniti account di servizio e poi concedi ruoli.

Se l'account di servizio predefinito ha già il ruolo Editor, ti consigliamo di sostituire il valore Ruolo Editor con ruoli meno permissivi. Per modificare in modo sicuro i ruoli dell'account di servizio, utilizza il Simulatore di criteri per vedere l'impatto dei la modifica e quindi concedere e revocare ruoli appropriati.

Per proteggere le funzioni in produzione:

Modifica delle autorizzazioni nell'account di servizio di runtime predefinito

Console

  1. Vai alla pagina IAM nella console Google Cloud:

    Vai alla console Google Cloud

  2. Seleziona l'account di servizio predefinito di App Engine o Default computing o l'account di servizio dalla tabella.

  3. Fai clic sull'icona a forma di matita sul lato destro della riga per visualizzare Scheda Modifica autorizzazioni.

  4. Aggiungi o rimuovi i ruoli nel menu a discesa Ruolo per fornire il privilegio minimo. access.

  5. Fai clic su Salva.

gcloud

Rimuovi il ruolo Editor, quindi utilizza gcloud projects add-iam-policy-binding per aggiungere un nuovo ruolo:

# Remove the Editor role
gcloud projects remove-iam-policy-binding PROJECT_ID \
--member="SERVICE_ACCOUNT_EMAIL" \
--role="roles/editor"

# Add the desired role
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="SERVICE_ACCOUNT_EMAIL" \
--role="ROLE"

Dove PROJECT_ID è l'ID del progetto che stai utilizzando, SERVICE_ACCOUNT_EMAIL è l'indirizzo email dell'account di servizio di runtime predefinito, come mostrato in precedenza Account di servizio di runtime e ROLE è il nuovo ruolo da assegnare al ruolo predefinito di account di servizio di runtime.

Utilizzo di account di servizio individuali per le funzioni

Per darti maggiore flessibilità nel controllare l'accesso alle tue funzioni, puoi assegnare a ciascuno il proprio account di servizio gestito dall'utente.

  1. Crea il servizio . Prendi nota del suo nome.
  2. Concedi i ruoli appropriati, in base alle risorse a cui la funzione ha bisogno per accedere per svolgere il proprio lavoro.
  3. Se l'account di servizio e la funzione si trovano in progetti diversi, dal progetto in cui si trova l'account di servizio:

    1. Configura l'account di servizio per lavorare su più progetti.
    2. Concedi il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) a entrambi gli account di servizio, dove PROJECT... si riferisce progetto in cui risiede la funzione:

      • Account di servizio predefinito:
        • Account di servizio predefinito Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)
      • Agente di servizio Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)

      Questi account gestiscono l'accesso tra progetti per il tuo account di servizio.

    3. Concedi l'autorizzazione iam.serviceaccounts.actAs a Cloud Functions dell'account di servizio del progetto diverso.

  4. Concedi all'account di servizio l'accesso alla risorsa. Il metodo per eseguire questa operazione dipende dal tipo di risorsa.

  5. Collega l'account di servizio alla funzione. Puoi farlo all'indirizzo i tempi di deployment o aggiornando una funzione di cui è stato eseguito il deployment in precedenza.

Aggiunta di un account di servizio gestito dall'utente al momento del deployment

Console

  1. Vai alla console Google Cloud:

    Vai alla console Google Cloud

  2. Specifica e configura la funzione come preferisci.

  3. Fai clic su Runtime, build... per visualizzare altre impostazioni.

  4. Seleziona la scheda Runtime.

  5. Fai clic sul menu a discesa Account di servizio e seleziona il servizio che ti interessa. .

  6. Fai clic su Avanti ed Esegui il deployment.

gcloud

Quando esegui il deployment di una funzione utilizzando gcloud functions deploy, aggiungi la classe Flag --service-account. Ad esempio:

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

dove FUNCTION_NAME è il nome della tua funzione e SERVICE_ACCOUNT_EMAIL è l'account di servizio email.

Aggiornamento dell'account di servizio di una funzione esistente

Puoi aggiornare l'account di servizio di runtime di una funzione esistente.

Console

  1. Vai alla console Google Cloud:

    Vai alla console Google Cloud

  2. Fai clic sul nome della funzione desiderata per andare alla relativa pagina dei dettagli.

  3. Fai clic sull'icona a forma di matita Modifica nella parte superiore della pagina dei dettagli per modificare personalizzata.

  4. Fai clic su Runtime, build... per visualizzare impostazioni aggiuntive.

  5. Seleziona la scheda Runtime.

  6. Fai clic sul menu a discesa Account di servizio e seleziona il servizio che ti interessa. .

  7. Fai clic su Avanti ed Esegui il deployment.

gcloud

Quando esegui il deployment di una funzione utilizzando gcloud functions deploy, aggiungi la classe Flag --service-account:

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

dove FUNCTION_NAME è il nome della tua funzione e SERVICE_ACCOUNT_EMAIL è l'account di servizio.

La funzione di cui è stato eseguito nuovamente il deployment ora utilizza il nuovo account di servizio di runtime.

Utilizzo del server metadati per acquisire i token

Sebbene gli account di servizio definiti da IAM siano il metodo preferito per la gestione dell'accesso in Google Cloud, alcuni servizi potrebbero richiedere come chiave API, client OAuth 2.0 o chiave dell'account di servizio. L'accesso a una risorsa esterna potrebbe richiedere anche metodi alternativi.

Se il tuo servizio di destinazione richiede di presentare una OpenID Connect un token ID o un Oauth 2.0 di accesso al token, potresti essere in grado di usare il server metadati Compute per recuperare questi token anziché configurare un client OAuth completo.

Token di identità

Puoi utilizzare Compute Metadata Server per recuperare i token ID. con un segmento di pubblico specifico, come indicato di seguito:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
  -H "Metadata-Flavor: Google"

dove AUDIENCE è il target richiesto, per esempio: l'URL di un servizio che stai richiamando, come https://service.domain.com o l'ID client OAuth di un account protetto da IAP come 1234567890.apps.googleusercontent.com.

Token di accesso

I token di accesso OAuth 2.0 utilizzano gli ambiti per definire le autorizzazioni di accesso. Per impostazione predefinita, all'interno dei token di accesso Google Cloud hanno l'ambito cloud-platform. Nel per accedere ad altre API Google o Google Cloud, devi recuperare un con l'ambito appropriato.

Puoi utilizzare il server metadati Compute recuperare i token di accesso.

Se hai bisogno di un token di accesso con un ambito specifico, puoi generarne uno che segue:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=SCOPES" \
  -H "Metadata-Flavor: Google"

Dove SCOPES è un elenco separato da virgole di ambiti OAuth richiesto, ad esempio: https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets.

Consulta l'elenco completo degli ambiti OAuth di Google per trovare gli ambiti di cui hai bisogno.

Passaggi successivi

Scopri come autorizzare l'accesso a le tue funzioni o per autenticare sviluppatori e altre funzioni in modo da poter richiamare le tue funzioni.