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.

Configura l'account di servizio

  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-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com). Non può essere utilizzato per questa finalità.

    • 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 agli 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 al tuo account di servizio. Ogni servizio in 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 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 programma di deployment deve disporre dell'autorizzazione iam.serviceAccounts.actAs per quell'account di servizio. Se hai creato l'account di servizio, ti viene concessa automaticamente questa autorizzazione. In caso contrario, una persona che dispone delle autorizzazioni corrette deve concederti questa autorizzazione per l'account di servizio.

    Best practice:nel passaggio precedente, se hai creato un account di servizio specificamente per richiamare il servizio di destinazione del tuo job Cloud Scheduler, ti consigliamo di seguire il principio del privilegio minimo (best practice per la sicurezza) associando l'account e la relativa autorizzazione di invocatore al servizio di destinazione. Puoi farlo utilizzando la console Google Cloud o la gcloud CLI:

    Console

    1. Apri la console Google Cloud.

    Vai alla console

    2. Seleziona il progetto.

    3. 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.

    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, potrebbe essere necessario fare clic su Mostra riquadro informazioni e poi 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 i 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 target. Ad esempio, run per una destinazione 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 di 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 un target di funzioni Cloud Run o Cloud Run di seconda generazione.

    Esempi:

    • Destinazione Cloud Run: il seguente comando concede il ruolo Cloud Run Invoker all'account di servizio my-service-account@my-project.iam.gserviceaccount.com per il 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
      
    • Destinazione delle funzioni Cloud Run: il seguente comando concede all'account di serviziomy-service-account@my-project.iam.gserviceaccount.com il ruolo Invoker di Cloud Run richiesto dalle funzioni Cloud Run di seconda generazione per la funzione my-gen2-function di Cloud Run di seconda generazione:

      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 la destinazione è esterna a Google Cloud, il servizio di ricezione deve verificare manualmente il token.

  4. L'account 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 aggiungere il ruolo Cloud Scheduler Service Agent manualmente. In questo modo, può generare token di intestazione per conto del tuo account di servizio client per autenticarsi nel tuo target.

    Puoi verificare che l'account di servizio Cloud Scheduler predefinito sia configurato nel tuo progetto e che abbia il ruolo Cloud Scheduler Service Agent 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 ruolo fornite da Google.

Creare 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 client alla richiestacreate-job:

Console

  1. Specifica la frequenza come sempre.
  2. Specifica HTTP come tipo di destinazione.
  3. Aggiungi l'URL e il metodo HTTP come sempre.
  4. Nell'elenco Auth header (Intestazione di autenticazione), seleziona il tipo di token. Tieni presente che OIDC (token ID) viene generalmente utilizzato tranne che per le API di Google ospitate su*.googleapis.com, poiché queste API si aspettano un token di accesso OAuth.
  5. In Account di servizio, specifica l'indirizzo email dell'account di servizio client.
  6. 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 con cui deve essere eseguito, ad esempio every 3 hours o every 10 mins. La stringa fornita qui può essere qualsiasi stringa compatibile con Crontab. Anche se non ne consigliamo più l'utilizzo, la precedente 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 tranne per le API di Google ospitate su *.googleapis.com, in quanto queste API si aspettano un token OAuth.
  • CLIENT_SERVICE_ACCOUNT_EMAIL: l'indirizzo email dell'account del servizio clienti.
  • Sono disponibili altri parametri facoltativi, descritti nel riferimento alla riga di comando gcloud.

Scegli i tipi di token

Per l'autenticazione tra Cloud Scheduler e un target HTTP, Cloud Scheduler crea un token intestazione in base all'account del 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.

Aggiungi manualmente il ruolo Agente di servizio Cloud Scheduler all'account di servizio Cloud Scheduler

Questo è necessario solo se una delle seguenti condizioni è vera:

  • Hai attivato 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 vanno a buon fine. Puoi aggiungere il ruolo Agente di servizio Cloud Scheduler all'account di servizio Cloud Scheduler dalla console Google Cloud o utilizzando la gcloud CLI:

Console

  1. Nella console Google Cloud, vai alla pagina API Cloud Scheduler.

    Vai all'API Cloud Scheduler

    Se è presente un campo Stato e lo stato indicato è Attivato, procedo. In caso contrario, fai clic su Attiva.

  2. Nella console Google Cloud, vai alla pagina Impostazioni.

    Vai alle impostazioni

  3. Trova e copia il numero del progetto.

  4. Nella console Google Cloud, vai alla pagina IAM.

    Vai a IAM

  5. Fai clic su Concedi accesso. Viene visualizzato il riquadro Concedi l'accesso.

  6. Nel campo Nuove entità, aggiungi un indirizzo email con il seguente formato:

    service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
    

    Sostituisci PROJECT_NUMBER con il numero del tuo progetto Google Cloud.

  7. Nell'elenco Seleziona un ruolo, cerca e seleziona Agente servizio Cloud Scheduler.

  8. Fai clic su Salva.

gcloud

  1. Verifica che l'API Cloud Scheduler sia abilitata per il tuo progetto:

    gcloud services list --enabled \
     --filter=cloudscheduler.googleapis.com
    • Se viene visualizzato 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
  2. Trova il numero del progetto:

    gcloud projects describe PROJECT_ID --format='table(projectNumber)'
    

    Sostituisci PROJECT_ID con l'ID progetto.

  3. Copia il numero.

  4. 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 progetto
    • PROJECT_NUMBER: il numero del progetto che hai copiato in precedenza