Utilizzare l'autenticazione con i target HTTP

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

Configurare un account di servizio

Un account di servizio viene in genere utilizzato da un'applicazione o da un carico di lavoro di calcolo ed è identificato dal rispettivo indirizzo email, che è univoco per l'account.

Le applicazioni possono utilizzare gli account di servizio per effettuare chiamate API autorizzate autenticandosi come l'account di servizio stesso e accedendo a tutte le risorse a cui l'account di servizio ha l'autorizzazione di accesso.

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 all'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 da utilizzare per i job Cloud Scheduler con target HTTP, crea un nuovo account di servizio. Tieni presente quanto segue:

    • L'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 generate risposte 403 per gli endpoint che richiedono l'autenticazione, anche se l'account di servizio del tuo job ha il ruolo appropriato.

  2. Se la destinazione si trova in Google Cloud, concedi i ruoli IAM necessari all'account di servizio. Ogni servizio all'interno di Google Cloud richiede un ruolo specifico e il servizio di destinazione 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 account di servizio (roles/iam.serviceAccountUser) nell'account di servizio. Questo ruolo predefinito contiene l'autorizzazione iam.serviceAccounts.actAs, necessaria per associare un account di servizio a una risorsa. Se hai creato l'account di servizio, ti viene concessa automaticamente questa autorizzazione.

    Nel passaggio precedente, se hai creato specificamente un account di servizio per invocare il servizio di destinazione del tuo 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 progetto Google Cloud.

      Vai al selettore dei progetti

    2. Vai alla pagina del tipo di risorsa che stai richiamando. Ad esempio, se stai richiamando 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 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. Nell'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 del target. Ad esempio, run per un target Cloud Run.
    • RESOURCE_ID: l'identificatore del target. Ad esempio, il nome del servizio per un target Cloud Run.
    • PRINCIPAL: l'identificatore del tuo account servizio. 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 funzione Cloud Run o Cloud Run di seconda generazione.
    • Gli altri parametri facoltativi sono descritti nel riferimento alla riga di comando gcloud.

    Esempi:

    • Concedi il ruolo IAM Cloud Run Invoker (roles/run.invoker) all'account di serviziomy-service-account@my-project.iam.gserviceaccount.com nel 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 Invoker di Cloud Run (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 il target 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 attivi l'API Cloud Scheduler, a meno che non l'abbia attivato 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 autenticarsi nel tuo target.

Creare un job Cloud Scheduler che utilizza l'autenticazione

Per l'autenticazione tra Cloud Scheduler e un target HTTP, Cloud Scheduler crea un token intestazione in base al tuo account servizio client, identificato dall'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 tranne per le API di Google ospitate su *.googleapis.com, in quanto queste API si aspettano un token OAuth.

Per creare un job Cloud Scheduler che utilizzi l'autenticazione, devi aggiungere il tipo di token e l'indirizzo email che identifica l'account di servizio client quando crei il 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 univoco per il job nel 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 fornita 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 Auth header (Intestazione di autenticazione), seleziona il tipo di token. Un token OIDC viene generalmente utilizzato tranne che per le API di Google ospitate su *.googleapis.com, in quanto queste API si aspettano un token OAuth.

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

  11. Se vuoi, specifica un pubblico che limiti i destinatari del token OIDC. In genere, l'URL di destinazione del job senza parametri URL. Se non specificato, viene utilizzato l'intero URL 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 fornita qui può essere qualsiasi stringa compatibile con unix-cron.
  • URI: l'URL completo dell'endpoint.
  • SERVICE_ACCOUNT_EMAIL: l'indirizzo email del tuo account di servizio. In genere viene utilizzato un token OIDC tranne per le API di Google ospitate su *.googleapis.com, poiché queste API si aspettano 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 alla riga di comando gcloud.

Concedi il ruolo Cloud Scheduler Service Agent

Alcuni Google Cloud servizi devono accedere alle tue risorse per poteragirre per tuo conto. Per soddisfare questa esigenza, Google Cloud crea e gestisce gli account di servizio noti come agenti di servizio, che vengono creati e a cui vengono assegnati i ruoli automaticamente man mano che attivi e utilizzi Google Cloud i servizi.

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 una delle seguenti condizioni è vera:

  • Hai attivato 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 progetto e che abbia il ruolo Agente di servizio Cloud Scheduler assegnato 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 autenticarti a Cloud Scheduler in modo programmatico.