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 segreto, come una password o una chiave. Proprio come altre entità hanno bisogno di un'identità per accedere alle funzioni Cloud Run, anche le funzioni stesse spesso devono accedere ad altre risorse di Google Cloud per svolgere il loro 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.
Service account di runtime
A meno che non specifichi un account di servizio di runtime diverso durante il deployment di una funzione, le funzioni Cloud Run utilizzano un account di servizio predefinito come identità per l'esecuzione della funzione:
Le funzioni Cloud Run utilizzano l'account di servizio Compute predefinito,
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.Tieni presente che il numero di progetto è diverso dall'ID progetto e dal nome del progetto. Puoi trovare il numero del progetto nella pagina Dashboard della console Google Cloud.
A seconda della configurazione delle norme dell'organizzazione, all'account di servizio predefinito potrebbe essere assegnato automaticamente il ruolo Editor nel progetto. Ti consigliamo vivamente di disattivare la concessione automatica dei ruoli
applicando il vincolo iam.automaticIamGrantsForDefaultServiceAccounts
delle norme dell'organizzazione. Se hai creato la tua organizzazione dopo il 3 maggio 2024, questo vincolo viene applicato per impostazione predefinita.
Se disattivi la concessione automatica dei ruoli, devi decidere quali ruoli concedere agli account di servizio predefiniti, quindi concedere personalmente questi ruoli.
Se l'account di servizio predefinito dispone già del ruolo Editor, ti consigliamo di sostituire il ruolo Editor con ruoli meno permissivi.Per modificare in sicurezza i ruoli dell'account di servizio, utilizza Policy Simulator per vedere l'impatto della modifica, quindi concedi e revoca i ruoli appropriati.
Per proteggere le funzioni in produzione:
- Modifica le autorizzazioni dell'account di servizio di runtime predefinito oppure
- Creare singoli account di servizio per le funzioni
Modifica delle autorizzazioni nell'account di servizio di runtime predefinito
Console
Vai alla pagina IAM nella console Google Cloud:
Seleziona Account di servizio predefinito di App Engine o Account di servizio predefinito per Compute Engine dalla tabella.
Fai clic sull'icona a forma di matita sul lato destro della riga per visualizzare la scheda Modifica autorizzazioni.
Aggiungi o rimuovi i ruoli nel menu a discesa Ruolo per fornire accesso con il privilegio minimo.
Fai clic su Salva.
gcloud
Rimuovi il ruolo Editor, quindi 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 progetto del progetto
che stai utilizzando, 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.
Utilizzo di singoli account di servizio per le funzioni
Per offrirti una maggiore flessibilità nel controllare l'accesso alle tue funzioni, puoi assegnare a ciascuna un proprio account di servizio gestito dall'utente.
- Crea il tuo account di servizio. Prendi nota del nome.
- Assegna i ruoli appropriati, in base alle risorse a cui deve accedere la funzione per svolgere il proprio lavoro.
Se l'account di servizio e la funzione si trovano in progetti diversi, dal progetto in cui si trova l'account di servizio:
- Configura l'account di servizio in modo che funzioni in più progetti.
Concedi il ruolo Creatore token account di servizio (
roles/iam.serviceAccountTokenCreator
) all'agente di servizio Cloud Run (service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
), dovePROJECT
fa riferimento al progetto in cui risiede la funzione. L'agente di servizio Cloud Run gestisce l'accesso tra progetti per il tuo account di servizio.Concedi l'autorizzazione
iam.serviceaccounts.actAs
all'agente di servizio delle funzioni Cloud Run (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) nell'account di servizio del progetto diverso.
Concedi all'account di servizio l'accesso alla risorsa. Il metodo per farlo dipende dal tipo di risorsa.
Collega l'account di servizio alla funzione. Puoi farlo al momento del 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
Vai alla console Google Cloud:
Specifica e configura la funzione come preferisci.
Fai clic su Runtime, build… per visualizzare impostazioni aggiuntive.
Seleziona la scheda Runtime.
Fai clic sul menu a discesa Account di servizio e seleziona l'account di servizio che ti interessa.
Fai clic su Avanti e Esegui il deployment.
gcloud
Quando esegui il deployment di una funzione utilizzando gcloud functions deploy
, aggiungi il
--service-account
flag. Ad esempio:
gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL
dove FUNCTION_NAME
è il nome della funzione e
SERVICE_ACCOUNT_EMAIL
è l'indirizzo 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
Vai alla console Google Cloud:
Fai clic sul nome della funzione desiderata per visualizzarne la pagina dei dettagli.
Fai clic sulla matita Modifica nella parte superiore della pagina dei dettagli per modificare la funzione.
Fai clic su Runtime, compilazione… per visualizzare altre impostazioni.
Seleziona la scheda Runtime.
Fai clic sul menu a discesa Account di servizio e seleziona l'account di servizio che ti interessa.
Fai clic su Avanti e Esegui il deployment.
gcloud
Quando esegui il deployment di una funzione utilizzando gcloud functions deploy
, aggiungi il
--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 nuovo deployment ora utilizza il nuovo account di servizio di runtime.
Utilizzo del server di 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 di presentare un token identificativo OpenID Connect o un token di accesso OAuth 2.0, potresti essere in grado di utilizzare Compute Metadata Server per recuperare questi token anziché configurare un client OAuth completo.
Token di identità
Puoi utilizzare il server di metadati di Compute per recuperare token ID con un segmento di pubblico specifico nel seguente modo:
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 gli ambiti per definire le autorizzazioni di accesso. Per impostazione predefinita,
i token di accesso all'interno 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 di Compute Engine 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 degli 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 trovare quelli di cui hai bisogno.
Passaggi successivi
Scopri come autorizzare l'accesso alle tue funzioni o come autenticare sviluppatori e altre funzioni in modo che possano richiamarle.