Impostare segmenti di pubblico personalizzati (servizi)

In questa pagina viene descritto 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 una rivendicazione del pubblico 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 degli accessi con IAM. Controllo dell'accesso IAM utilizza token ID firmati da Google, confezionati come token web JSON (JWT). I contenuti di questi token sono conformi a uno standard OIDC.

Un campo relativo al pubblico viene codificato nel token per specificare la destinazione prevista che può utilizzare il token. Questo limita il rischio di un attacco di ripetizione, in cui un token intercettato destinato all'utilizzo con un servizio viene riprodotto su un servizio diverso.

Per convenzione, il segmento di 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 essere associato a un URL diverso da quello generato per impostazione predefinita, come nei seguenti scenari:

  • Quando utilizzi un dominio personalizzato per raggiungere un servizio in cui il client non è a conoscenza dell'URL generato da Google.
  • Quando viene eseguito il deployment di più servizi dietro un bilanciatore del carico, in cui un client non è in grado di prevedere il servizio regionale raggiunto da una richiesta. Gli URL generati da Google per i servizi sono specifici per ogni regione, anche se il nome del servizio è lo stesso.

In questi scenari, devi configurare un servizio in modo che accetti valori dei segmenti di pubblico personalizzati che consentano target aggiuntivi noti a un cliente. L'URL predefinito generato da Google rimane sempre un valore per il 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 servizio, come per l'abbonamento 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 porta alla creazione di una nuova revisione. Anche le revisioni successive riceveranno automaticamente questa impostazione di configurazione, a meno che non apporti aggiornamenti espliciti per modificarla.

Riga di comando

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 o https://myservice.example.com

Puoi rimuovere tutti i segmenti di pubblico personalizzati da un servizio utilizzando il seguente comando:

gcloud run services update SERVICE --clear-custom-audiences

YAML

  1. 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
  2. Imposta l'annotazione run.googleapis.com/custom-audiences sui metadati del servizio (non sui metadati template):

    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 o https://myservice.example.com

    Tieni presente che il valore dell'attributo è un array di stringhe JSON tra virgolette, che richiede l'utilizzo di virgolette doppie e singole.

  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml

Verifica dei segmenti di pubblico personalizzati

  1. Ottieni un token ID per un account di servizio che dispone dell'autorizzazione IAM per richiamare il servizio. Tieni presente che viene utilizzato il 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'indirizzo email dell'account di servizio. Termina con .iam.gserviceaccount.com.
    • AUDIENCE con il valore del segmento di pubblico personalizzato che hai impostato nel servizio.
  2. Chiama l'endpoint del servizio con quel token ID

    curl -H "Authorization: Bearer ${TOKEN}" ENDPOINT

    Sostituisci ENDPOINT con l'endpoint per raggiungere il servizio, ad esempio il suo dominio personalizzato o l'URL .run.app.

  3. Verifica che la richiesta sia autorizzata e che vedi la risposta prevista del servizio.