Utilizzare l'autenticazione con target HTTP

Cloud Scheduler può chiamare destinazioni 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 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. Poi, puoi concedere alaccount di serviziot 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, creane uno nuovo. 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 Service agent Cloud Scheduler (roles/cloudscheduler.serviceAgent) dal service agent Cloud Scheduler nel tuo progetto. In questo modo, si ottengono risposte 403 agli endpoint che richiedono l'autenticazione, anche se il service account del job dispone del ruolo appropriato.

  2. Se la destinazione si trova all'interno di Google Cloud, concedi i ruoli IAM necessari al tuaccount di serviziont. 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 l'ultima versione di Cloud Run Functions, devi concedere il ruolo Cloud Run Invoker (roles/run.invoker), mentre per Cloud Run Functions (1ª generazione.) devi concedere il ruolo Invoker di Cloud Functions (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 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 Google Cloud progetto.

      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 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 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 una destinazione del servizio Cloud Run.
    • RESOURCE_ID: l'identificatore del target. Ad esempio, il nome di un servizio Cloud Run.
    • PRINCIPAL: l'identificatore del service account. Ha il seguente formato: 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 del servizio Cloud Run. Per i target delle funzioni Cloud Run, 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 \
          --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 nella funzione Cloud Run my-cloud-function.

      Per l'ultima versione di Cloud Run Functions, questa operazione aggiunge l'associazione Cloud Run Invoker (roles/run.invoker) al criterio IAM del servizio Cloud Run sottostante della funzione specificata. Per Cloud Run Functions 1ª generazionen.), questo aggiunge l'associazione Invoker Cloud Functions (roles/cloudfunctions.invoker) al criterio IAM della funzione specificata:

      gcloud functions add-invoker-policy-binding my-cloud-function \
          --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 uaccount di serviziont per Cloud Scheduler.

  3. Se la tua 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 account di servizio per l'autenticazione alla 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 service account client, identificato dal suo indirizzo email, e lo invia alla destinazione tramite HTTPS. 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 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. 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 di 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'indirizzo 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.
  • Altri parametri facoltativi sono descritti nel riferimento alla riga di comando gcloud.

Concedi il ruolo Cloud Scheduler Service Agent

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 service agent, che vengono creati e a cui vengono concessi ruoli automaticamente quando attivi e utilizzi i servizi Google Cloud.

Il service agent 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 al service agent Cloud Scheduler, che ha un indirizzo email nel 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 dal service agent

Puoi verificare che il service agent Cloud Scheduler sia configurato nel tuo progetto e che disponga del ruolo Service agent Cloud Scheduler concesso 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, vedi Creare e concedere ruoli agli agenti di servizio.

Passaggi successivi

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