Autenticazione per la chiamata (1ª generazione.)
Per richiamare una funzione Cloud Run autenticata, principal deve soddisfare i seguenti requisiti:
- Disporre dell'autorizzazione per richiamare la funzione.
- Fornisci un token ID quando richiama la funzione.
Che cos'è un'entità? Come descritto in Proteggere le funzioni di Cloud Run, Le funzioni Cloud Run supportano due diversi tipi di identità, che sono anche denominate principal:
- Account di servizio: si tratta di account speciali che fungono da identità di un una persona fisica, ad esempio una funzione, un'applicazione o una VM. Ti offrono un modo per autenticare queste non persone.
- Account utente: questi account rappresentano persone, sia come account individuali Titolari di Account Google o come parte di una persona giuridica controllata da Google, ad esempio un soggetto Gruppo.
Consulta la panoramica di IAM per scoprire di più su IAM di base concetti.
Per richiamare una funzione Cloud Run autenticata, l'entità deve avere Autorizzazione IAM richiamatore:
cloudfunctions.functions.invoke
. Di solito tramite il ruolo Invoker.
Per concedere queste autorizzazioni, utilizza il
add-invoker-policy-binding
come mostrato
Autenticazione della funzione per le chiamate di funzione.
Per avere l'autorizzazione a creare, aggiornare o eseguire altre azioni amministrative su una funzione, il principale deve disporre di un ruolo appropriato. I ruoli includono le autorizzazioni che definiscono le azioni consentite all'entità. Consulta Utilizzo di IAM per autorizzare l'accesso per ulteriori informazioni.
Richiamare una funzione può avere ulteriori complessità. Le funzioni basate su eventi possono: essere richiamato solo dall'origine evento a cui sono iscritti, Funzioni HTTP possono essere richiamate da diversi tipi di identità, provenienti da luoghi diversi. L'invocatore può essere uno sviluppatore che sta testando la funzione o un'altra funzione o servizio che vuole utilizzare la funzione. Per impostazione predefinita, Le identità devono fornire un token ID con la richiesta di autenticazione. Inoltre, all'account utilizzato devono essere state concesse anche le autorizzazioni appropriate.
Scopri di più su come generare e utilizzare i token ID.
Esempi di autenticazione
Questa sezione mostra alcuni esempi diversi di autenticazione invocazione.
Esempio 1: autenticare i test degli sviluppatori
In qualità di sviluppatore, devi avere accesso per creare, aggiornare ed eliminare funzioni. questa viene concessa utilizzando normale (IAM).
Tuttavia, in qualità di sviluppatore, potresti dover richiamare le funzioni per scopi di test. Per richiamare una funzione utilizzando curl
o strumenti simili, tieni presente
seguenti:
Assegna un ruolo all'account utente delle funzioni di Cloud Run contenente l'autorizzazione di chiamata.
cloudfunctions.functions.invoke
. In genere questa operazione avviene tramite il ruolo Invoker. Per impostazione predefinita, i ruoli Amministratore funzioni Cloud Run e Sviluppatore funzioni Cloud Run dispongono di questa autorizzazione. Consulta Ruoli IAM delle funzioni Cloud Run per l'elenco completo dei ruoli e delle relative autorizzazioni associate.
Se stai lavorando dalla tua macchina locale, configura l'accesso da riga di comando inizializzare Google Cloud CLI.
Fornisci la tua richiesta con le credenziali di autenticazione generate da Google Token ID archiviato in un'intestazione
Authorization
. Ad esempio, richiedi un token ID utilizzandogcloud
eseguendo questo comando:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ https://FUNCTION_URL
dove FUNCTION_URL è l'URL della funzione. Recupera questo URL dalla pagina delle funzioni di Cloud Run del Console Google Cloud o eseguendo il comando
gcloud functions describe
come mostrato nel primo passaggio dell'esempio del comando di deployment di Google Cloud CLI.
Puoi utilizzare i token creati da gcloud
per richiamare funzioni HTTP in qualsiasi
progetto purché il tuo account abbia cloudfunctions.functions.invoke
l'autorizzazione per la funzione che viene richiamata. A scopo di sviluppo, utilizza i token ID generati da gcloud
. Tuttavia, tieni presente che questi token non hanno un pubblico
, il che li rende suscettibili di attacchi di inoltro. In produzione
ambienti, utilizzare i token ID emessi per un account di servizio con il
specificato per il segmento di pubblico. Questo approccio migliora la sicurezza limitando l'utilizzo dei token
solo al servizio previsto.
Come sempre, ti consigliamo di allocare l'insieme minimo di autorizzazioni necessarie per sviluppare e utilizzare le funzioni. Assicurati che i ruoli IAM i criteri delle tue funzioni sono limitati al numero minimo di utenti e account di servizio.
Esempio 2: autenticare una funzione per effettuare chiamate di funzione
Quando si creano servizi che collegano più funzioni, è una buona idea
garantire che ogni funzione possa inviare richieste solo a un sottoinsieme specifico di
altre funzioni. Ad esempio, se hai una funzione login
, dovrebbe essere in grado
per accedere alla funzione user profiles
, ma probabilmente non dovrebbe essere in grado
per accedere alla funzione search
.
a configurare la funzione ricevente in modo che accetti le richieste da una specifica chiamata
devi concedere il ruolo Invoryr appropriato alla chiamata
l'account di servizio della funzione
sulla funzione ricevente. La
Il ruolo di Invoker è Invoker delle funzioni di Cloud Run (roles/cloudfunctions.invoker
):
Console
Utilizza Invoker delle funzioni di Cloud Run:
Vai alla console Google Cloud:
Fai clic sulla casella di controllo accanto alla funzione di ricezione. (Non fare clic sul la funzione stessa.)
Fai clic su Autorizzazioni nella parte superiore dello schermo. Riquadro Autorizzazioni si apre.
Fai clic su Aggiungi entità.
Nel campo Nuove entità, inserisci l'identità della funzione chiamante. Deve essere l'indirizzo email di un account di servizio.
Seleziona il ruolo Cloud Functions > Invoker di Cloud Functions Menu a discesa Seleziona un ruolo.
Fai clic su Salva.
gcloud
Utilizza il comando gcloud functions add-invoker-policy-binding
:
gcloud functions add-invoker-policy-binding RECEIVING_FUNCTION \ --member='serviceAccount:CALLING_FUNCTION_IDENTITY'
La add-invoker-policy-binding
aggiunge un criterio IAM per il ruolo di callback
associazione che consente al membro specificato (entità) di richiamare l'oggetto
personalizzata. Google Cloud CLI rileva automaticamente la generazione della funzione e
aggiunge il ruolo Invoker corretto (cloudfunctions.invoker
per 1ª generazione).
Sostituisci quanto segue:
RECEIVING_FUNCTION
: il nome del funzione ricevente.CALLING_FUNCTION_IDENTITY
: la funzione di chiamata Identity, l'indirizzo email di un account di servizio.
Dal momento che richiamerà la funzione ricevente, la funzione di chiamata deve fornire anche un token ID firmato da Google per l'autenticazione. Si tratta di una procedura in due passaggi process:
Crea un token ID firmato da Google con il campo per il pubblico (
aud
) impostato su URL della funzione ricevente.Includi il token ID in un'intestazione
Authorization: Bearer ID_TOKEN
nella richiesta alla funzione.
Il modo di gran lunga più semplice e affidabile per gestire questo processo è utilizzare le librerie di autenticazione, come mostrato di seguito, per generare e utilizzare questo token.
Genera token ID
Questa sezione descrive i diversi modi in cui puoi generare il token ID di cui un'entità ha bisogno per richiamare una funzione.
L'accesso non autenticato senza un token ID è possibile, ma deve essere abilitato. Per ulteriori informazioni, consulta Utilizzo di IAM per autorizzare l'accesso.
Genera i token in modo programmatico
Dopo che il codice riportato di seguito ha generato un token ID, quest'ultimo chiama il tuo la funzione Cloud Run con quel token per tuo conto. Questo codice funziona in cui le librerie possono ottenere le credenziali di autenticazione, inclusi gli ambienti che supportano Credenziali predefinite dell'applicazione.
Node.js
Python
Vai
Java
Genera i token manualmente
Se stai richiamando una funzione e per qualche motivo non puoi utilizzare il librerie di autenticazione, esistono due modi per ottenere il token ID manualmente, utilizzando il server di metadati Compute oppure creando un JWT autofirmato e scambiandolo con un token ID firmato da Google.
Utilizzare il server dei metadati
Puoi utilizzare il server di metadati di Compute per recuperare i token ID con uno specifico pubblico come segue:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
-H "Metadata-Flavor: Google"
Sostituisci AUDIENCE con l'URL della funzione che stai richiamando. Puoi recuperare questo URL come descritto nella sezione Autenticazione per i test degli sviluppatori sopra.
Scambia un JWT autofirmato con un token ID firmato da Google
Concedi il ruolo Invoker (
roles/cloudfunctions.invoker
) a l'account di servizio della funzione chiamante sulla funzione ricevente.Crea un un account di servizio e una chiave e scaricare il file con la chiave privata (in formato JSON) sull'host da cui la funzione o il servizio chiamante effettua le proprie richieste.
Crea un JWT con l'intestazione impostata su
{"alg":"RS256","typ":"JWT"}
. Il payload dovrebbe includi un'attestazionetarget_audience
impostata sull'URL della funzione ricevente e rivendicazioniiss
esub
impostate sull'indirizzo email dell'account di servizio in precedenza. Deve includere anche le rivendicazioniexp
eiat
.aud
la rivendicazione deve essere impostata suhttps://www.googleapis.com/oauth2/v4/token
.Usa la chiave privata scaricata sopra per firmare il JWT.
Utilizzando questo JWT, invia una richiesta POST a https://www.googleapis.com/oauth2/v4/token. I dati di autenticazione devono essere incluso nell'intestazione e nel corpo della richiesta.
Nell'intestazione:
Authorization: Bearer $JWT - where $JWT is the JWT you just created Content-Type: application/x-www-form-urlencoded
Nel corpo:
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=$JWT
Sostituisci
$JWT
con il JWT appena creatoQuesto restituisce un altro JWT che include un
id_token
firmato da Google.
Invia la richiesta GET/POST alla funzione di ricezione. Includi il token firmato da Google
Token ID in un'intestazione Authorization: Bearer ID_TOKEN_JWT
nella richiesta.
Passaggi successivi
Scopri come gestire l'accesso alle funzioni.
Ricevi assistenza per altri modi per generare token ID.