Questa pagina descrive come utilizzare i segmenti di pubblico personalizzati per l'autorizzazione.
I client che chiamano un servizio Cloud Run protetto da Identity and Access Management
devono fornire un token ID valido che includa un
rivendicazione audience corrispondente all'URL *.run.app
del servizio
ricevente. Per i clienti che non conoscono questo URL, puoi utilizzare un
valore del segmento di pubblico personalizzato.
Informazioni sui segmenti di pubblico personalizzati
Cloud Run fornisce un ruolo Invoker (roles/run.invoker
) per supportare il controllo dell'accesso con IAM.
Controllo dell'accesso IAM utilizza token ID firmati da Google,
che vengono inclusi come token web JSON (JWT).
I contenuti di questi token sono conformi a uno standard OIDC.
Un campo del segmento di pubblico è codificato nel token per specificare il target previsto che può utilizzare il token. In questo modo si limita il rischio di un attacco di tipo replay, in cui un token intercettato destinato all'utilizzo con un servizio viene riprodotto su un servizio diverso.
Per convenzione, il pubblico è l'URL completo del servizio di destinazione. Per impostazione predefinita in Cloud Run, questo è l'URL generato da Google per un servizio che termina con run.app
.
Tuttavia, un servizio Cloud Run potrebbe trovarsi dietro un URL diverso da quello generato per impostazione predefinita, ad esempio negli scenari seguenti:
- Quando utilizzi un dominio personalizzato per raggiungere un servizio in cui il client non è a conoscenza dell'URL generato da Google.
- Quando esegui il deployment di più servizi dietro un bilanciatore del carico in cui un client non può prevedere a quale servizio regionale arriva una richiesta. Gli URL generati da Google per i servizi sono specifici per regione anche se il nome del servizio è lo stesso.
In questi scenari, devi configurare un servizio in modo che accetti valori di pubblico personalizzati che consentano target aggiuntivi noti a un cliente. L'URL predefinito generato da Google rimane sempre un valore del segmento di pubblico accettato.
Impostare e aggiornare i segmenti di pubblico personalizzati
L'impostazione di segmenti di pubblico personalizzati per Cloud Run viene eseguita a livello di servizio e si applica a tutte le revisioni di pubblicazione, in modo simile all'appartenenza all'autorizzazione IAM.
Puoi impostare più segmenti di pubblico personalizzati, a condizione che la codifica JSON dei segmenti di pubblico come elenco di stringhe non superi i 32.768 caratteri.
Qualsiasi modifica alla configurazione comporta la creazione di una nuova revisione. Anche le revisioni successive riceveranno automaticamente questa impostazione di configurazione, a meno che tu non apporti aggiornamenti espliciti per modificarla.
gcloud
Puoi impostare segmenti di pubblico personalizzati su un servizio utilizzando il seguente comando:
gcloud run services update SERVICE --add-custom-audiences=AUDIENCE
Sostituisci
- SERVICE con il nome del tuo servizio Cloud Run
- AUDIENCE con una stringa per il segmento di pubblico personalizzato che vuoi
supportare, ad esempio
myservice
ohttps://myservice.example.com
Puoi rimuovere tutti i segmenti di pubblico personalizzati da un servizio utilizzando questo comando:
gcloud run services update SERVICE --clear-custom-audiences
YAML
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe SERVICE --format export > service.yaml
Imposta l'annotazione
run.googleapis.com/custom-audiences
sui metadati del servizio (non sui metadatitemplate
):apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/custom-audiences: '["AUDIENCE"]' spec: template: ...
Sostituisci
- SERVICE con il nome del tuo servizio Cloud Run
- AUDIENCE con una stringa per il segmento di pubblico personalizzato che vuoi
supportare, ad esempio
myservice
ohttps://myservice.example.com
Tieni presente che il valore dell'attributo è un array JSON di stringhe tra virgolette, che richiede l'utilizzo di virgolette doppie e singole.
Sostituisci il servizio con la sua nuova configurazione utilizzando il seguente comando:
gcloud run services replace service.yaml
Terraform
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
Aggiungi quanto segue a una risorsagoogle_cloud_run_v2_service
nella configurazione Terraform:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
custom_audiences = ["AUDIENCE"]
template {
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
}
}
Sostituisci:
- SERVICE con il nome del tuo servizio Cloud Run.
- REGION con la regione Google Cloud . Ad esempio
europe-west1
. - AUDIENCE con una stringa per il segmento di pubblico personalizzato che vuoi
supportare, ad esempio
myservice
.
Verifica dei segmenti di pubblico personalizzati
Recupera un token ID per un account di servizio con autorizzazione IAM per richiamare il servizio. Prendi nota dell'utilizzo del segmento di pubblico personalizzato AUDIENCE.
export TOKEN=$(gcloud auth print-identity-token --impersonate-service-account SERVICE_ACCOUNT_EMAIL --audiences='AUDIENCE')
Sostituisci:
- SERVICE_ACCOUNT_EMAIL con l'email del account di servizio. Termina
con
.iam.gserviceaccount.com
. - AUDIENCE con il valore del segmento di pubblico personalizzato impostato sul servizio.
- SERVICE_ACCOUNT_EMAIL con l'email del account di servizio. Termina
con
Chiama l'endpoint del servizio con questo token ID
curl -H "Authorization: Bearer ${TOKEN}" ENDPOINT
Sostituisci ENDPOINT con l'endpoint per raggiungere il tuo servizio, ad esempio il suo dominio personalizzato o l'URL
.run.app
.Verifica che la richiesta sia autorizzata e che venga visualizzata la risposta prevista del tuo servizio.