Cloud Scheduler può chiamare destinazioni HTTP che richiedono l'autenticazione, Abbiano configurato un account di servizio associato, disponga delle credenziali appropriate.
Configurare l'account di servizio
Se non hai ancora un account di servizio per il quale vuoi 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 viene 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
) da Cloud Scheduler o un agente di servizio di servizio sul tuo progetto. Ciò porta a403
risposte agli endpoint che richiedono l'autenticazione, anche se il servizio che l'account di fatturazione abbia il ruolo appropriato.
Se il tuo target si trova all'interno di Google Cloud, concedi le necessarie Ruoli IAM per il tuo servizio . Ogni servizio all'interno di Google Cloud richiede un ruolo specifico, e il servizio ricevente verifica automaticamente il token generato. Per per Cloud Run e di seconda generazione alle funzioni Cloud Functions, 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 deployer deve avere l'autorizzazione
iam.serviceAccounts.actAs
per questa richiesta l'account di servizio. Se hai creato tu l'account di servizio, ha concesso automaticamente questa autorizzazione. In caso contrario, qualcuno che ha i dati corretti autorizzazioni devono concederti questa autorizzazione per l'account di servizio.Best practice:nel passaggio precedente, se hai creato un account di servizio in particolare per richiamare il servizio che il tuo job Cloud Scheduler ti consigliamo di seguire il principio del privilegio minimo (la migliore pratica) associando l'account e la relativa autorizzazione callback alla tua destinazione completamente gestito di Google Cloud. Puoi farlo utilizzando la console Google Cloud oppure 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. Per Ad esempio, se stai richiamando un servizio Cloud Run, accedi alla pagina 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 del servizio l'account 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 del tuo target. Ad esempio,run
per una destinazione Cloud Run.RESOURCE_ID
: l'identificatore del target. Per ad esempio il nome del servizio per una destinazione Cloud Run.PRINCIPAL
: l'identificatore del tuo account di servizio. Questo ha il seguente formato:serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS
. Per un esempio,serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
.ROLE
: il nome del ruolo scelto come target per le chiamate richiesto. Ad esempio,roles/run.invoker
per una destinazione Cloud Run o Cloud Functions di seconda generazione.
Esempi:
Destinazione Cloud Run: il comando seguente concede la classe Ruolo Invoker di Cloud Run per l'account di servizio
my-service-account@my-project.iam.gserviceaccount.com
per 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 la classe Ruolo Invoker di Cloud Run richiesto dalla seconda generazione Cloud Functions funziona all'account di servizio
my-service-account@my-project.iam.gserviceaccount.com
per il secondo di generazione della funzione Cloud Functionsmy-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 la tua destinazione è esterna a Google Cloud, il servizio ricevente deve verificare manualmente il token.
L'account di servizio predefinito di Cloud Scheduler viene impostato automaticamente si attiva quando abiliti l'API Cloud Scheduler, a meno che non l'hai abilitata prima 19 marzo 2019, nel qual caso devi aggiungi il ruolo
Cloud Scheduler Service Agent
manualmente. È così di poter generare token di intestazione per conto del tuo account di servizio clienti per eseguire l'autenticazione nel tuo target.Puoi verificare che l'account di servizio Cloud Scheduler predefinito configurato nel tuo progetto e che abbia il
Cloud Scheduler Service Agent
ruolo concesso visualizzare 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 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 clienti del tuo
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 OIDC
(token ID) viene generalmente utilizzato ad eccezione delle API di Google ospitate su
*.googleapis.com
poiché queste API prevedono un token di accesso OAuth. - In Account di servizio, specifica l'indirizzo email dell'account di servizio clienti.
- Il campo Pubblico è facoltativo e limita i destinatari del token OIDC. in genere, l'URL di destinazione del job (senza parametri URL). In caso contrario specificato, per impostazione predefinita l'intero URL viene utilizzato come segmento di pubblico (inclusi parametri di 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 univoci nel progetto. Tieni presente che non puoi riutilizzare un nome job in un progetto anche se elimini il job associato.FREQUENCY
: l'intervallo del job è la frequenza con cui di un job, ad esempioevery 3 hours
oevery 10 mins
. La stringa che fornisci qui può essere qualsiasi stringa compatibile con Crontab. Anche se non ne consigliamo più l'uso, la versione Sintassi cron di App Engine è 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 ad eccezione di API di Google ospitate su*.googleapis.com
perché queste API prevedono un protocollo OAuth di accesso.CLIENT_SERVICE_ACCOUNT_EMAIL
: l'email di l'account di servizio clienti.- Altri parametri facoltativi sono disponibili e sono 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 in base al servizio client
identificato dall'email e lo invia tramite HTTPS alla destinazione.
Puoi utilizzare un token ID (OIDC)
o un token di accesso OAuth. OIDC viene generalmente utilizzato tranne che per le API di Google
ospitata su *.googleapis.com
, poiché queste API prevedono un token OAuth.
Aggiungi manualmente il ruolo di Agente di servizio Cloud Scheduler al tuo 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 di Agente di servizio Cloud Scheduler dal tuo servizio account
L'account di servizio Cloud Scheduler richiede Ruolo Agente di servizio Cloud Scheduler. Senza questo ruolo, Job Cloud Scheduler non riusciti. Puoi aggiungere Ruolo di Agente di servizio Cloud Scheduler in Cloud Scheduler dalla console Google Cloud o utilizzando gcloud CLI:
Console
Nella console Google Cloud, vai alla API Cloud Scheduler.
Se è presente il campo Status (Stato) e lo stato è Enabled (Attivato): procedere. In caso contrario, fai clic su Attiva.
Nella console Google Cloud, vai a Impostazioni. .
Trova e copia il numero del progetto.
Nella console Google Cloud, vai alla sezione IAM .
Fai clic su Concedi accesso. Si apre 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 numero di progetto Google Cloud.Nell'elenco Seleziona un ruolo, cerca e seleziona Cloud Scheduler. Agente di servizio.
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 viene visualizzato l'output seguente, 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 copiato in precedenza