Cloud Scheduler può chiamare destinazioni HTTP che richiedono l'autenticazione se hai configurato un account di servizio associato che dispone delle credenziali appropriate.
Configura l'account di servizio
Se non hai ancora un account di servizio da utilizzare per i job Cloud Scheduler con destinazioni HTTP, crea un nuovo account di servizio. Tieni presente quanto segue:
L'account di servizio deve appartenere al progetto in cui è stato creato il job Cloud Scheduler.
Non utilizzare l'agente di servizio Cloud Scheduler (
service-YOUR_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 sul tuo progetto. Ciò comporta risposte403
agli endpoint che richiedono l'autenticazione, anche se l'account di servizio del job ha il ruolo appropriato.
Se il tuo target è all'interno di Google Cloud, concedi i ruoli IAM necessari al tuo account di servizio. Ogni servizio in Google Cloud richiede un ruolo specifico e il servizio ricevente verifica automaticamente il token generato. Ad esempio, per le funzioni Cloud Run e per le funzioni Cloud Functions di seconda generazione, devi aggiungere il ruolo
Cloud Run Invoker
.Tieni presente che per eseguire il deployment di una risorsa con un account di servizio gestito dall'utente, il deployment deve disporre dell'autorizzazione
iam.serviceAccounts.actAs
per quell'account di servizio. Se hai creato tu l'account di servizio, questa autorizzazione ti viene concessa automaticamente. In caso contrario, qualcuno che dispone delle autorizzazioni corrette deve concederti questa autorizzazione sull'account di servizio.Best practice: nel passaggio precedente, se hai creato un account di servizio specifico per richiamare il servizio scelto come target dal job Cloud Scheduler, ti consigliamo di seguire il principio del privilegio minimo (best practice per la sicurezza) associando l'account e la relativa autorizzazione del chiamante al servizio di destinazione. Puoi farlo utilizzando la console Google Cloud o gcloud CLI:
Console
1. Apri la console Google Cloud.
2. Seleziona il progetto.
3. Vai alla pagina relativa al tipo di risorsa che stai richiamando. Ad esempio, se stai richiamando un servizio Cloud Run, vai alla pagina che elenca i servizi Cloud Run.
4. Seleziona la casella di controllo a sinistra del servizio che vuoi richiamare. Non fare clic sul servizio stesso.
5. Fai clic sulla scheda Autorizzazioni. Se il riquadro delle informazioni non è visibile, potresti dover fare clic su Mostra riquadro informazioni, quindi su Autorizzazioni.
6. Fai clic su
Aggiungi entità.7. In Aggiungi entità, inserisci l'indirizzo email dell'account di servizio che hai creato.
8. In Assegna ruoli, seleziona un ruolo da concedere dall'elenco a discesa. Segui il principio del privilegio minimo scegliendo il ruolo che include solo le autorizzazioni necessarie all'entità.
9. Fai clic su Salva.
gcloud
Esegui il comando
add-iam-policy-binding
:gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=ROLE
Sostituisci:
RESOURCE_TYPE
: il tipo di risorsa della destinazione. Ad esempio,run
per un target Cloud Run.RESOURCE_ID
: l'identificatore del target. Ad esempio, il nome del servizio per una destinazione Cloud Run.PRINCIPAL
: l'identificatore del tuo account di servizio. Ha il formato seguente:serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS
. Ad esempio,serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
.ROLE
: il nome del ruolo richiesto per le chiamate dal servizio di destinazione. Ad esempio,roles/run.invoker
per un target Cloud Run o Cloud Functions di seconda generazione.
Esempi:
Target Cloud Run: il comando seguente concede il ruolo Invoker di Cloud Run all'account di servizio
my-service-account@my-project.iam.gserviceaccount.com
per il 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.invoker
Target Cloud Functions: il comando seguente concede il ruolo Invoker di Cloud Run richiesto dalle funzioni Cloud Functions di seconda generazione all'account di servizio
my-service-account@my-project.iam.gserviceaccount.com
per la funzione Cloud Functions di seconda generazionemy-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
Se il tuo target è al di fuori di Google Cloud, il servizio ricevente deve verificare manualmente il token.
L'account di servizio predefinito di Cloud Scheduler viene configurato automaticamente quando abiliti l'API Cloud Scheduler, a meno che tu non l'abbia abilitata prima del 19 marzo 2019. In tal caso, devi aggiungere il ruolo
Cloud Scheduler Service Agent
manualmente. In questo modo, può generare token di intestazione per conto del tuo account di servizio client al fine di eseguire l'autenticazione nella destinazione.Puoi verificare che l'account di servizio predefinito di Cloud Scheduler è configurato nel tuo progetto e che gli sia stato concesso il ruolo
Cloud Scheduler Service Agent
visualizzando l'accesso attuale 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.
Crea un job di scheduler con autenticazione
Per creare un job che utilizza l'autenticazione, devi aggiungere il tipo di token e l'indirizzo email che identifica l'account di servizio client alla tua richiesta create-job
:
Console
- Specifica la frequenza come sempre.
- Specifica HTTP come tipo di destinazione.
- Aggiungi l'URL e il metodo HTTP come sempre.
- Nell'elenco Intestazione autorizzazione, seleziona il tipo di token. Tieni presente che generalmente il token OIDC (token ID) viene utilizzato tranne per le API di Google ospitate su
*.googleapis.com
, in quanto queste API si aspettano di ricevere un token di accesso OAuth. - In Account di servizio, specifica l'indirizzo email dell'account di servizio client.
- Il campo Pubblico è facoltativo e limita i destinatari del token OIDC; in genere, l'URL di destinazione del job (senza parametri URL). Se non specificato, per impostazione predefinita viene utilizzato l'intero URL come pubblico (inclusi i parametri della richiesta).
gcloud
gcloud scheduler jobs create http JOB_ID \ --schedule="FREQUENCY" --uri=URI \ --oidc-service-account-email=CLIENT_SERVICE_ACCOUNT_EMAIL
Sostituisci quanto segue:
JOB_ID
: un nome per il job. Deve essere univoco nel progetto. Tieni presente che non puoi riutilizzare il nome di un job in un progetto anche se elimini il job associato.FREQUENCY
: l'intervallo del job indica la frequenza di esecuzione del job, ad esempioevery 3 hours
oevery 10 mins
. La stringa fornita qui può essere qualsiasi stringa compatibile con Crontab. Anche se non ne consigliamo più l'uso, la sintassi cron di App Engine legacy è ancora supportata per i job esistenti.URI
: l'URL completo dell'endpoint.--oidc-service-account-email
o--oauth-service-account-email
: definisce il tipo di token. Tieni presente che OIDC viene generalmente utilizzato tranne per le API di Google ospitate su*.googleapis.com
, in quanto queste API si aspettano di ricevere un token OAuth.CLIENT_SERVICE_ACCOUNT_EMAIL
: l'indirizzo email dell'account di servizio client.- Sono disponibili altri parametri facoltativi, descritti nel riferimento della riga di comando gcloud.
Scegli i tipi di token
Per eseguire l'autenticazione tra Cloud Scheduler e una destinazione HTTP, Cloud Scheduler crea un token di intestazione basato sull'account di servizio client, identificato dalla relativa email, e lo invia alla destinazione mediante HTTPS.
Puoi utilizzare un token ID (OIDC) o un token OAuth (di accesso). Generalmente OIDC viene utilizzato tranne per le API di Google ospitate su *.googleapis.com
, in quanto queste API si aspettano di ricevere un token OAuth.
Aggiungi manualmente il ruolo Agente di servizio Cloud Scheduler all'account di servizio Cloud Scheduler
Questa operazione è necessaria solo se una delle seguenti condizioni è vera:
- Hai abilitato l'API Cloud Scheduler prima del 19 marzo 2019
- Hai rimosso il ruolo Agente di servizio Cloud Scheduler dal tuo account di servizio
L'account di servizio Cloud Scheduler richiede il ruolo Agente di servizio Cloud Scheduler. Senza questo ruolo, i job Cloud Scheduler non riescono. Puoi aggiungere il ruolo Agente di servizio Cloud Scheduler al tuo account di servizio Cloud Scheduler dalla console Google Cloud o utilizzando gcloud CLI:
Console
Nella console Google Cloud, vai alla pagina API Cloud Scheduler.
Se è presente un campo Status (Stato) e lo stato è indicato come Enabled (Attivato), procedi. In caso contrario, fai clic su Attiva.
Nella console Google Cloud, vai alla pagina Impostazioni.
Trova e copia il numero del progetto.
Nella console Google Cloud, vai alla pagina IAM.
Fai clic su Concedi accesso. Viene visualizzato il riquadro Concedi l'accesso.
Nel campo Nuove entità, aggiungi un indirizzo email con il formato:
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
Sostituisci
PROJECT_NUMBER
con il numero di progetto Google Cloud.Nell'elenco Seleziona un ruolo, cerca e seleziona Agente di servizio Cloud Scheduler.
Fai clic su Salva.
gcloud
Verifica che l'API Cloud Scheduler sia abilitata per il tuo progetto:
gcloud services list --enabled \ --filter=cloudscheduler.googleapis.com
Se vedi il seguente output, l'API è abilitata:
NAME: cloudscheduler.googleapis.com TITLE: Cloud Scheduler API
In caso contrario (ad esempio, se vedi
Listed 0 items.
), abilita l'API:gcloud services enable cloudscheduler.googleapis.com
Trova il numero del tuo progetto:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Sostituisci
PROJECT_ID
con l'ID progetto.Copia il numero.
Concedi all'account di servizio Cloud Scheduler il ruolo
Cloud Scheduler Service Agent
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com \ --role roles/cloudscheduler.serviceAgent
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progettoPROJECT_NUMBER
: il numero del progetto che hai copiato in precedenza