Funzione identità

Per motivi di sicurezza, la maggior parte delle interazioni tra entità in Google Cloud richiede che ogni entità abbia un'identità verificabile, protetta da un qualche tipo di secret, come una password o una chiave. Proprio come altre entità hanno bisogno di un'identità per accedere a Cloud Functions, le funzioni stesse spesso hanno bisogno di accedere ad altre risorse di Google Cloud per svolgere il proprio lavoro. Ogni funzione è associata a un account di servizio che funge da identità quando la funzione accede ad altre risorse. L'account di servizio utilizzato da una funzione come identità è noto anche come account di servizio di runtime.

Per l'uso in produzione, Google consiglia di assegnare a ogni funzione un'identità dedicata assegnandole un account di servizio gestito dall'utente. Gli account di servizio gestiti dall'utente ti 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 quando esegui il deployment di una funzione, Cloud Functions utilizza un account di servizio predefinito come identità per l'esecuzione della funzione:

A questi account di servizio predefiniti è assegnato il ruolo Editor, che consente l'accesso ampio a molti servizi Google Cloud. Sebbene questo sia il modo più rapido per sviluppare le funzioni, Google consiglia di utilizzare l'account di servizio predefinito solo per test e sviluppo. Per la produzione, devi concedere all'account di servizio di runtime solo l'insieme minimo di autorizzazioni necessarie per raggiungere l'obiettivo.

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 l'Account di servizio di computing predefinito dalla tabella.

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

  4. Aggiungi o rimuovi i ruoli nel menu a discesa Ruolo per fornire l'accesso con privilegio minimo.

  5. Fai clic su Salva.

gcloud

Rimuovi il ruolo Editor e utilizza il comando 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 in uso, SERVICE_ACCOUNT_EMAIL è l'indirizzo email dell'account di servizio di runtime predefinito, come mostrato in precedenza in Account di servizio di runtime e ROLE è il nuovo ruolo da assegnare all'account di servizio di runtime predefinito.

Utilizzare account di servizio individuali per le funzioni

Per una maggiore flessibilità nel controllo dell'accesso alle funzioni, puoi assegnare a ciascuna il proprio account di servizio gestito dall'utente.

  1. Crea il tuo account di servizio. Prendi nota del suo nome.
  2. Concedigli i ruoli appropriati, in base alle risorse a cui la funzione deve accedere per svolgere il suo 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. Configurare l'account di servizio in modo che funzioni su più progetti.
    2. Concedi il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) a entrambi questi account di servizio gestiti da Google, dove PROJECT... fa riferimento al progetto in cui si trova la funzione:

      • Account di servizio predefinito, che varia a seconda che utilizzi la 1ª generazione o 2ª generazione:
        • 1ª generazione.: account di servizio predefinito di App Engine (PROJECT_ID@appspot.gserviceaccount.com)
        • 2ª generazione.: account di servizio predefinito di 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 all'agente di servizio Cloud Functions nell'account di servizio del diverso progetto.

  4. Concedere all'account di servizio l'accesso alla risorsa. Il metodo per farlo dipende dal tipo di risorsa.

  5. Collega l'account di servizio alla tua funzione. Puoi eseguire questa operazione al momento del deployment o aggiornando una funzione di cui hai 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 l'account di servizio che ti interessa.

  6. Fai clic su Avanti e su Esegui il deployment.

gcloud

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

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

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

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 che ti interessa 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 la funzione.

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

  5. Seleziona la scheda Runtime.

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

  7. Fai clic su Avanti e su Esegui il deployment.

gcloud

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

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

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

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

Utilizzo del server dei metadati per acquisire token

Sebbene gli account di servizio definiti da IAM siano il metodo preferito per gestire l'accesso in Google Cloud, alcuni servizi potrebbero richiedere altre modalità, ad esempio una chiave API, un client OAuth 2.0 o una chiave dell'account di servizio. L'accesso a una risorsa esterna potrebbe richiedere anche metodi alternativi.

Se il servizio di destinazione richiede la presentazione di un token ID OpenID Connect o di un token di accesso Oauth 2.0, potresti utilizzare il server metadati di Compute per recuperare questi token anziché configurare un client OAuth completo.

Token di identità

Puoi utilizzare il server metadati Compute per recuperare i token ID con un segmento di pubblico specifico:

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

Dove AUDIENCE è la destinazione richiesta, ad esempio l'URL di un servizio che stai richiamando, come https://service.domain.com, o l'ID client OAuth di una risorsa protetta da IAP, come 1234567890.apps.googleusercontent.com.

Token di accesso

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

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

Se hai bisogno di un token di accesso con un ambito specifico, puoi generarne uno come 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 richiesti, ad esempio: https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets.

Consulta l'elenco completo degli ambiti OAuth di Google per sapere quali ambiti ti servono.

Passaggi successivi

Scopri come autorizzare l'accesso alle tue funzioni o autenticare gli sviluppatori e altre funzioni in modo che possano richiamare le tue funzioni.