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 un'attestazione 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 dell'accesso con IAM. Controllo dell'accesso IAM utilizza i token ID firmati da Google, che vengono pacchettizzati come token web JSON (JWT). I contenuti di questi token sono conformi a uno standard OIDC.

Un campo pubblico è codificato nel token per specificare il target previsto che può utilizzare il token. Ciò limita il rischio di un attacco ripetuto, in cui un token intercettato destinato a essere utilizzato con un servizio viene ripetuto contro un servizio diverso.

Per convenzione, il segmento di pubblico è l'URL completo del servizio di destinazione. Per impostazione predefinita in Cloud Run, si tratta dell'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, come nei seguenti scenari:

  • Quando utilizzi un dominio personalizzato per raggiungere un servizio il cui client non è a conoscenza dell'URL generato da Google.
  • Durante il deployment di più servizi dietro un bilanciatore del carico, in cui un client non può prevedere quale servizio regionale viene raggiunto. 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 dei segmenti di pubblico personalizzati che consentano target aggiuntivi noti a un client. L'URL predefinito generato da Google rimane sempre come 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 della 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 per le revisioni successive verrà applicata 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 nei 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. Ottenere un token ID per un account di servizio che dispone dell'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'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. Chiamare l'endpoint del servizio con quel token ID

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

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

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