Utilizzare l'autenticazione con i target HTTP

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

Configurare un account di servizio

Un service account viene in genere utilizzato da un'applicazione o da un workload di calcolo 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 il account di servizio stesso e accedendo a tutte le risorse a cui il account di servizio ha l'autorizzazione di accedere.

Il modo più comune per consentire a un'applicazione di autenticarsi come account di servizio è collegare unaccount di serviziot alla risorsa che esegue l'applicazione. Dopodiché, puoi concedere all'account di servizio i ruoli Identity and Access Management (IAM) 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, creane uno nuovo. Nota 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 Cloud Scheduler Service Agent (roles/cloudscheduler.serviceAgent) dall'agente di servizio Cloud Scheduler nel tuo progetto. In questo modo, si ottengono risposte 403 agli endpoint che richiedono l'autenticazione, anche se l'account di servizio del job dispone del 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 ricevente verifica automaticamente il token generato. Ad esempio, per Cloud Run e le funzioni Cloud Run di seconda generazione, devi concedere il ruolo Cloud Run 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) nel 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 appositamente per richiamare il servizio a cui fa riferimento il job Cloud Scheduler, puoi seguire il principio del privilegio minimo associando l'account e la relativa autorizzazione di invoker al servizio di destinazione:

    Console

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

      Vai al selettore dei 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 delle 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 dell'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 per una destinazione Cloud Run.
    • RESOURCE_ID: l'identificatore del target. Ad esempio, il nome del servizio per una destinazione Cloud Run.
    • PRINCIPAL: l'identificatore del service account. che ha la seguente forma: 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 l'invocazione. Ad esempio, roles/run.invoker per una destinazione di funzione Cloud Run o Cloud Run di seconda generazione.
    • Gli altri parametri facoltativi sono descritti nel riferimento della riga di comando gcloud.

    Esempi:

    • Concedi il ruolo IAM Cloud Run Invoker (roles/run.invoker) all'account di servizio my-service-account@my-project.iam.gserviceaccount.com sul servizio Cloud Run my-service:

      gcloud run add-iam-policy-binding my-service \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --role=roles/run.invoker
      
    • Concedi il ruolo IAM Cloud Run Invoker (roles/run.invoker) richiesto dalle funzioni Cloud Run di seconda generazione all'account di servizio my-service-account@my-project.iam.gserviceaccount.com nella funzione Cloud Run my-gen2-function:

      gcloud functions add-iam-policy-binding my-gen2-function \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --role=roles/run.invoker \
          --gen2
      
  3. Se la destinazione si trova 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 modo che possa generare token di intestazione per conto del tuo account di servizio per l'autenticazione alla tua destinazione.

Crea un job Cloud Scheduler che utilizza l'autenticazione

Per l'autenticazione tra Cloud Scheduler e una destinazione HTTP, Cloud Scheduler crea un token di intestazione in base al tuo service account client, identificato dal suo indirizzo email, e lo invia, utilizzando HTTPS, alla destinazione. Puoi utilizzare un token ID (OIDC) o un token OAuth (accesso). OIDC viene generalmente utilizzato tranne per le API di Google ospitate su *.googleapis.com, in quanto queste API prevedono un token OAuth.

Per creare un job Cloud Scheduler che utilizza l'autenticazione, devi aggiungere il tipo di token e l'indirizzo email che identifica ilaccount di serviziot client quando crei il job:

Console

  1. Nella Google Cloud console, 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. Tieni presente che non puoi riutilizzare il nome di un job in un progetto anche se elimini il job associato.

  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 e un metodo HTTP.

  9. Nell'elenco Intestazione di autenticazione, seleziona il tipo di token. Un token OIDC viene generalmente utilizzato tranne per le API di Google ospitate su *.googleapis.com, in quanto queste API prevedono un token OAuth.

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

  11. (Facoltativo) Specifica un pubblico che limiti 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 \
    --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. Tieni presente che non puoi riutilizzare il nome di un job in un progetto anche se elimini il job associato.
  • 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 completo dell'endpoint.
  • SERVICE_ACCOUNT_EMAIL: l'email del tuo service account. Un token OIDC viene generalmente utilizzato tranne per le API di Google ospitate su *.googleapis.com, in quanto queste API prevedono un token OAuth. Utilizza invece il flag --oauth-service-account-email per definire un tipo di token OAuth.
  • Gli altri parametri facoltativi sono descritti nel riferimento della riga di comando gcloud.

Concedi il ruolo Agente di servizio Cloud Scheduler

Alcuni servizi Google Cloud hanno bisogno di 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 man mano che 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 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 Cloud Scheduler Service Agent dall'agente di servizio

Puoi verificare che l'agente di servizio Cloud Scheduler sia configurato nel tuo progetto e che gli sia stato concesso il ruolo di 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 tuo progetto, assicurati di selezionare la casella di controllo Includi concessioni di ruoli fornite da Google.

Per scoprire come concedere un ruolo all'agente di servizio, consulta Creare e concedere ruoli agli agenti di servizio.

Passaggi successivi

Scopri come eseguire l'autenticazione a Cloud Scheduler a livello di programmazione.