Utilizzare l'autenticazione con target HTTP

Cloud Scheduler può chiamare target HTTP che richiedono l'autenticazione se configuri un account di servizio associato con le credenziali appropriate.

Configura un service account

Un service account viene in genere utilizzato da un'applicazione o da un workload di computing ed è identificato dal rispettivo indirizzo email, che è univoco per l'account.

Le applicazioni possono utilizzare i service account per effettuare chiamate API autorizzate autenticandosi come account di servizio stesso e accedendo a tutte le risorse a cui il account di servizio è autorizzato ad accedere.

Il modo più comune per consentire a un'applicazione di autenticarsi come account di servizio è collegare un account di servizio alla risorsa che esegue l'applicazione. Poi, puoi concedere al account di servizio i ruoli IAM (Identity and Access Management) per consentirgli di accedere alle risorse Google Cloud .

  1. Se non hai già un account di servizio che vuoi utilizzare per i job Cloud Scheduler con target HTTP, crea un nuovo service account. Tieni presente quanto segue:

    • Il account di servizio deve appartenere al progetto in cui viene creato il job Cloud Scheduler.

    • Non utilizzare l'agente di servizio Cloud Scheduler (service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com). Non può essere utilizzato per questo scopo.

    • Non revocare il ruolo Agente di servizio Cloud Scheduler (roles/cloudscheduler.serviceAgent) dall'agente di servizio Cloud Scheduler nel tuo progetto. In questo modo, vengono restituite risposte 403 agli endpoint che richiedono l'autenticazione, anche se il service account del job ha il ruolo appropriato.

  2. Se la destinazione si trova all'interno di Google Cloud, concedi i ruoli IAM necessari al tuo account di servizio. Ogni servizio all'interno di Google Cloud richiede un ruolo specifico e il servizio di ricezione verifica automaticamente il token generato.

    Ad esempio, per Cloud Run e Cloud Run Functions, devi concedere il ruolo Cloud Run Invoker (roles/run.invoker), mentre per Cloud Functions (1ª generazione.) devi concedere il ruolo Cloud Functions Invoker (roles/cloudfunctions.invoker).

    Per ottenere l'autorizzazione necessaria per collegare un account di servizio a una risorsa, chiedi all'amministratore di concederti il ruolo IAM Utente service account (roles/iam.serviceAccountUser) sul account di servizio. Questo ruolo predefinito contiene l'autorizzazione iam.serviceAccounts.actAs, necessaria per collegare un account di servizio a una risorsa. Se hai creato il account di servizio, questa autorizzazione ti viene concessa automaticamente.

    Nel passaggio precedente, se hai creato un account di servizio specifico per richiamare il servizio scelto come target del job Cloud Scheduler, puoi seguire il principio del privilegio minimo associando l'account e la relativa autorizzazione Invoker al servizio di destinazione:

    Console

    1. Nella console Google Cloud , nella pagina di selezione del progetto, seleziona un progettoGoogle Cloud .

      Vai al selettore di progetti

    2. Vai alla pagina del tipo di risorsa che stai richiamando. Ad esempio, se richiami un servizio Cloud Run, vai alla pagina che elenca i servizi Cloud Run.

    3. Seleziona la casella di controllo a sinistra del servizio che vuoi richiamare. Non fare clic sul servizio stesso.

    4. Fai clic sulla scheda Autorizzazioni.

      Se il riquadro informazioni non è visibile, potrebbe essere necessario fare clic su Mostra riquadro informazioni > Autorizzazioni.

    5. Fai clic su Aggiungi entità.

    6. Nel campo Nuove entità, inserisci l'indirizzo email del account di servizio che hai creato.

    7. Dall'elenco Seleziona un ruolo, seleziona un ruolo da concedere.

      Segui il principio del privilegio minimo scegliendo il ruolo che include solo le autorizzazioni necessarie all'entità.

    8. Fai clic su Salva.

    gcloud

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL \
        --role=ROLE
    

    Sostituisci quanto segue:

    • RESOURCE_TYPE: il tipo di risorsa della destinazione. Ad esempio, run services per un target del servizio Cloud Run.
    • RESOURCE_ID: l'identificatore del target. Ad esempio, il nome di un servizio Cloud Run.
    • PRINCIPAL: l'identificatore del tuo service account. Il formato è il seguente: serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS. Ad esempio, serviceAccount:my-service-account@my-project.iam.gserviceaccount.com.
    • ROLE: il nome del ruolo richiesto dal servizio di destinazione per la chiamata. Ad esempio, roles/run.invoker per un target del servizio Cloud Run. Per i target di Cloud Run Functions, ti consigliamo di utilizzare il comando add-invoker-policy-binding.

    Esempi:

    • Utilizza il comando gcloud run services add-iam-policy-binding per concedere il ruolo IAM Cloud Run Invoker (roles/run.invoker) al account di servizio my-service-account@my-project.iam.gserviceaccount.com sul servizio Cloud Run my-service:

      gcloud run services add-iam-policy-binding my-service \
          --region=REGION \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --role=roles/run.invoker
      
    • Utilizza il comando gcloud functions add-invoker-policy-binding per concedere il ruolo appropriato al account di servizio my-service-account@my-project.iam.gserviceaccount.com sulla funzione Cloud Run my-cloud-function.

      Per Cloud Run Functions, questo aggiunge l'associazione Invoker di Cloud Run (roles/run.invoker) alla policy IAM del servizio Cloud Run sottostante della funzione specificata. Per Cloud Functions (1ª generazione.), questo aggiunge l'associazione Cloud Functions Invoker (roles/cloudfunctions.invoker) alla policy IAM della funzione specificata:

      gcloud functions add-invoker-policy-binding my-cloud-function \
          --region=REGION \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
      

    Per un esempio di utilizzo di Terraform per creare un account di servizio con l'autorizzazione per richiamare un servizio Cloud Run, consulta Creazione di un account di servizio per Cloud Scheduler.

  3. Se la destinazione è al di fuori di Google Cloud, il servizio di ricezione deve verificare manualmente il token.

  4. L'agente di servizio Cloud Scheduler predefinito viene configurato automaticamente quando abiliti l'API Cloud Scheduler, a meno che tu non l'abbia abilitata prima del 19 marzo 2019, nel qual caso devi concedere il ruolo Agente di servizio Cloud Scheduler. In questo modo, può generare token di intestazione per conto del tuo account di servizio per l'autenticazione nella destinazione.

Crea un job Cloud Scheduler che utilizza l'autenticazione

Per l'autenticazione tra Cloud Scheduler e un target HTTP, Cloud Scheduler crea un token di intestazione basato sul service account client, identificato dal suo indirizzo email, e lo invia al target utilizzando HTTPS. Puoi utilizzare un token ID (OIDC) o un token OAuth (di accesso). OIDC viene generalmente utilizzato ad eccezione delle API di Google ospitate su *.googleapis.com: queste API prevedono un token OAuth e Cloud Scheduler accetta i token OAuth solo per gli URL di destinazione ospitati su *.googleapis.com.

Per creare un job Cloud Scheduler che utilizza l'autenticazione, devi aggiungere il tipo di token e l'indirizzo email che identifica il account di servizio client durante la creazione del job:

Console

  1. Nella console Google Cloud , vai alla pagina Cloud Scheduler.

    Vai a Cloud Scheduler

  2. Fai clic su Crea job.

  3. Nel campo Nome, inserisci un nome per il job univoco per il progetto e la regione. Dopo aver eliminato il job associato, puoi riutilizzare un nome del job.

  4. Nell'elenco Regione, seleziona una regione per il job.

  5. Specifica una Frequenza e un Fuso orario per il job. La stringa che fornisci qui può essere qualsiasi stringa compatibile con unix-cron.

  6. Fai clic su Continua.

  7. Nell'elenco Tipo target, seleziona HTTP.

  8. Specifica un URL che inizia con https:// e un metodo HTTP.

  9. Nell'elenco Intestazione di autenticazione, seleziona il tipo di token. In genere viene utilizzato un token OIDC, ad eccezione delle API di Google ospitate su *.googleapis.com, poiché queste API prevedono un token OAuth.

  10. Nell'elenco Service account, seleziona l'indirizzo email del tuo account di servizio.

  11. Facoltativamente, specifica un Pubblico che limita i destinatari del token OIDC; in genere, l'URL di destinazione del job senza parametri URL. Se non specificato, l'intero URL viene utilizzato come pubblico, inclusi i parametri della richiesta.

  12. Configura le impostazioni facoltative.

  13. Fai clic su Crea.

gcloud

gcloud scheduler jobs create http JOB_ID \
    --location=LOCATION \
    --schedule="FREQUENCY" \
    --uri=URI \
    --oidc-service-account-email=SERVICE_ACCOUNT_EMAIL

Sostituisci quanto segue:

  • JOB_ID: un nome per il job univoco per il progetto e la regione. Dopo aver eliminato il job associato, puoi riutilizzare il nome di un job.
  • LOCATION: la località (regione) del job.
  • FREQUENCY: l'intervallo o la frequenza di esecuzione del job, ad esempio every 3 hours o every 10 mins. La stringa che fornisci qui può essere qualsiasi stringa compatibile con unix-cron.
  • URI: l'URL HTTPS completo dell'endpoint (deve iniziare con https://).
  • SERVICE_ACCOUNT_EMAIL: l'indirizzo email del tuo service account. In genere viene utilizzato un token OIDC, ad eccezione delle API di Google ospitate su *.googleapis.com, poiché queste API prevedono un token OAuth. (Utilizza invece il flag --oauth-service-account-email per definire un tipo di token OAuth.)
  • Altri parametri facoltativi sono descritti nel riferimento della riga di comando gcloud.

Concedi il ruolo Cloud Scheduler Service Agent

Alcuni servizi Google Cloud devono accedere alle tue risorse per poter agire per tuo conto. Per soddisfare questa esigenza, Google Cloud crea e gestisce service account noti come agenti di servizio, che vengono creati e a cui vengono concessi ruoli automaticamente quando attivi e utilizzi i servizi Google Cloud.

L'agente di servizio Cloud Scheduler richiede il ruolo Cloud Scheduler Service Agent (roles/cloudscheduler.serviceAgent). Senza questo ruolo, i job Cloud Scheduler che richiedono l'agente di servizio (ad esempio i job di destinazione HTTP che utilizzano l'autenticazione e i job di destinazione Pub/Sub) non vanno a buon fine. Puoi concedere manualmente il ruolo all'agente di servizio Cloud Scheduler, che ha un indirizzo email con il seguente formato:

service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com

Devi concedere manualmente il ruolo solo se si verifica una delle seguenti condizioni:

  • Hai abilitato l'API Cloud Scheduler prima del 19 marzo 2019
  • Hai rimosso il ruolo Agente di servizio Cloud Scheduler dall'agente di servizio

Puoi verificare che l'agente di servizio Cloud Scheduler sia configurato nel tuo progetto e che disponga del ruolo Agente di servizio Cloud Scheduler visualizzando l'accesso corrente del progetto. Tieni presente che se utilizzi la console Google Cloud per visualizzare l'accesso al progetto, assicurati di selezionare la casella di controllo Includi concessioni di ruoli fornite da Google.

Per scoprire come concedere un ruolo al tuo agente di servizio, consulta Crea e concedi ruoli agli agenti di servizio.

Passaggi successivi

Scopri come eseguire l'autenticazione in Cloud Scheduler in modo programmatico.