Cloud Scheduler può chiamare target HTTP che richiedono l'autenticazione se configuri un account di servizio associato con le credenziali appropriate.
Configura 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 eseguendo l'autenticazione 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 eseguire l'autenticazione 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 account di servizio alle Google Cloud risorse.
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 il service agent 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 risposte403agli endpoint che richiedono l'autenticazione, anche se il service account del job ha il ruolo appropriato.
Se il target si trova in 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 le funzioni Cloud Run di seconda generazione, devi concedere il ruolo
Cloud Run Invoker.Per ottenere l'autorizzazione necessaria per collegare un service account a una risorsa, chiedi all'amministratore di concederti il ruolo IAM Utente account di servizio (
roles/iam.serviceAccountUser) sul service account. Questo ruolo predefinito contiene l'autorizzazioneiam.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 appositamente un account di servizio per richiamare il servizio di destinazione del job Cloud Scheduler, puoi seguire il principio del privilegio minimo associando l'account e la relativa autorizzazione di invoker al servizio di destinazione:
Console
Nella Google Cloud console, nella pagina di selezione del progetto, seleziona un Google Cloud progetto.
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.
Seleziona la casella di controllo a sinistra del servizio che vuoi richiamare. Non fare clic sul servizio stesso.
Fai clic sulla scheda Autorizzazioni.
Se il riquadro delle informazioni non è visibile, potrebbe essere necessario fare clic su Mostra riquadro informazioni > Autorizzazioni.
Fai clic su Aggiungi entità.
Nel campo Nuove entità, inserisci l'indirizzo email del account di servizio che hai creato.
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à.
Fai clic su Salva.
gcloud
gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL \ --role=ROLESostituisci quanto segue:
RESOURCE_TYPE: il tipo di risorsa del target. Ad esempio,runper 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 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 la chiamata. Ad esempio,roles/run.invokerper un target di funzione Cloud Run o Cloud Run di seconda generazione.- Gli altri parametri facoltativi sono descritti nella documentazione di riferimento della riga di comando gcloud.
Esempi:
Concedi il ruolo IAM Cloud Run Invoker (
roles/run.invoker) al account di serviziomy-service-account@my-project.iam.gserviceaccount.comsul servizio Cloud Runmy-service:gcloud run add-iam-policy-binding my-service \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invokerConcedi il ruolo IAM Cloud Run Invoker (
roles/run.invoker) richiesto dalle funzioni Cloud Run di seconda generazione al account di serviziomy-service-account@my-project.iam.gserviceaccount.comsulla funzione Cloud Runmy-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
Per un esempio di utilizzo di Terraform per creare un account di servizio con l'autorizzazione per richiamare un servizio Cloud Run, consulta Creare un account di servizio per Cloud Scheduler.
Se il target si trova al di fuori di Google Cloud, il servizio di ricezione deve verificare manualmente il token.
Il service agent Cloud Scheduler predefinito viene configurato automaticamente quando abiliti l'API Cloud Scheduler, a meno che non l'abbia abilitata prima del 19 marzo 2019, nel qual caso devi concedere il ruolo Service agent Cloud Scheduler. In questo modo, può generare token di intestazione per conto del tuo account di servizio per l'autenticazione al target.
Crea un job Cloud Scheduler che utilizza l'autenticazione
Per eseguire 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 tramite 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 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 quando crei il job:
Console
Nella Google Cloud console, vai alla pagina Cloud Scheduler.
Fai clic su Crea job.
Nel campo Nome, inserisci un nome per il job che sia univoco per il progetto. Tieni presente che non puoi riutilizzare il nome di un job in un progetto anche se elimini il job associato.
Nell'elenco Regione, seleziona una regione per il job.
Specifica una Frequenza e un Fuso orario per il job. La stringa che fornisci qui può essere qualsiasi unix-cron compatibile stringa.
Fai clic su Continua.
Nell'elenco Tipo di target, seleziona HTTP.
Specifica un URL e un Metodo HTTP.
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.Nell'elenco Service account, seleziona l'email del tuo account di servizio.
Facoltativamente, 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.
Configura le impostazioni facoltative.
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 che sia 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 hoursoevery 10 mins. La stringa che fornisci qui può essere qualsiasi unix-cron compatibile stringa.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-emailper definire un tipo di token OAuth.- Gli altri parametri facoltativi sono descritti nella documentazione di riferimento della riga di comando gcloud.
Concedi il ruolo Service agent Cloud Scheduler
Alcuni Google Cloud servizi devono 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 a cui vengono creati e concessi automaticamente i ruoli quando abiliti e utilizzi i Google Cloud servizi.
Il service agent Cloud Scheduler richiede il
ruolo Service agent Cloud Scheduler
(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 Service agent Cloud Scheduler dal service agent
Puoi verificare che il service agent Cloud Scheduler sia configurato nel tuo progetto e che gli sia stato concesso il ruolo Service agent Cloud Scheduler visualizzando l'accesso corrente del progetto. Tieni presente che, se utilizzi la Google Cloud console 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 service agent, consulta Creare e concedere ruoli ai service agent.
Passaggi successivi
Scopri come eseguire l'autenticazione a Cloud Scheduler a livello di programmazione.