Utilizza l'autenticazione con destinazioni HTTP

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Cloud Scheduler può chiamare i target HTTP che richiedono l'autenticazione se hai configurato un account di servizio associato che dispone delle credenziali appropriate.

Configura l'account di servizio

  1. Se non hai ancora un account di servizio che vuoi utilizzare per i job di 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'account di servizio Cloud Scheduler predefinito (service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com). Questo account di servizio gestito da Google, noto anche come agente di servizio, non può essere utilizzato a questo scopo.

    • Non rimuovere l'account di servizio Cloud Scheduler predefinito dal progetto o dal ruolo Cloud Scheduler Service Agent (roles/cloudscheduler.serviceAgent). In questo modo, le risposte 403 agli endpoint che richiedono l'autenticazione anche se l'account di servizio del job ha il ruolo appropriato.

  2. Se il tuo target è 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 destinazione verifica automaticamente il token generato. Ad esempio, per 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 deployer deve avere l'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 nell'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, valuta di seguire il principio del privilegio minimo (best practice di sicurezza) associando l'account e l'autorizzazione di callback al servizio di destinazione. Puoi farlo utilizzando la console Google Cloud o l'interfaccia a riga di comando gcloud:

    Console

    1. Apri la console Google Cloud.

    Vai alla console

    2. Seleziona il progetto.

    3. Vai alla pagina per il tipo di risorsa che stai richiamando. Ad esempio, se richiami 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.

    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 un target di Cloud Run.
    • RESOURCE_ID: identificatore del target. Ad esempio, il nome del servizio per una destinazione Cloud Run.
    • PRINCIPAL: identificatore del tuo account di servizio. Il formato è il seguente: 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.invoker per un target di Cloud Run o di Cloud Functions di seconda generazione.

    Esempi:

    • Target Cloud Run: il seguente comando concede il ruolo Invoker di Cloud Run 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=my-service-account@my-project.iam.gserviceaccount.com \
      --role=roles/run.invoker
      
    • Target Cloud Functions: il seguente comando concede il ruolo Invoker di Cloud Run richiesto dalle funzioni di Cloud Functions di seconda generazione all'account di servizio my-service-account@my-project.iam.gserviceaccount.com per la funzione di Cloud Functions di seconda generazione my-gen2-function:

      gcloud functions add-iam-policy-binding my-gen2-function \
      --member=my-service-account@my-project.iam.gserviceaccount.com \
      --role=roles/run.invoker --gen2
      
  3. Se la destinazione è esterna a Google Cloud, il servizio di destinazione deve verificare manualmente il token.

  4. L'account di servizio Cloud Scheduler predefinito viene configurato automaticamente quando abiliti l'API Cloud Scheduler, a meno che non l'hai abilitata prima del 19 marzo 2019, nel qual caso devi aggiungere manualmente il ruolo Cloud Scheduler Service Agent. In questo modo può generare token di intestazione per conto del tuo account di servizio client per eseguire l'autenticazione nella destinazione.

    Puoi verificare che l'account di servizio predefinito di Cloud Scheduler sia configurato nel progetto e che abbia il ruolo Cloud Scheduler Service Agent concesso 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 dello 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 richiesta create-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 Intestazione Auth, seleziona il tipo di token. Tieni presente che il OIDC (token ID) viene generalmente utilizzato tranne per le API di Google ospitate su *.googleapis.com poiché queste API prevedono un token di accesso OAuth.
  5. In Account di servizio, specifica l'indirizzo email dell'account di servizio client.
  6. Il 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 segmento di pubblico (inclusi i 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 univoco 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 indica la frequenza con cui viene eseguito il job, ad esempio every 3 hours o every 10 mins. La stringa qui specificata può essere qualsiasi stringa compatibile con Crontab. Anche se non ne consigliamo più l'utilizzo, 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 in genere utilizzato tranne per le API di Google ospitate su *.googleapis.com poiché queste API prevedono un token OAuth.
  • CLIENT_SERVICE_ACCOUNT_EMAIL: l'email dell'account di servizio del cliente.
  • 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 un target HTTP, Cloud Scheduler crea un token di intestazione basato sul tuo account di servizio client, identificato dall'email, e lo invia, utilizzando HTTPS, alla destinazione. Puoi utilizzare un token ID (OIDC) o un token OAuth (accesso). OIDC viene generalmente utilizzata tranne per le API di Google ospitate su *.googleapis.com poiché queste API prevedono un token OAuth.

Aggiungere 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 attivato l'API Cloud Scheduler prima del 19 marzo 2019
  • Hai rimosso il ruolo di 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 di Cloud Scheduler non vanno a buon fine. Puoi aggiungere il ruolo di agente di servizio Cloud Scheduler al tuo account di servizio Cloud Scheduler dalla console Google Cloud o utilizzando l'interfaccia a riga di comando gcloud:

Console

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

    Vai a Impostazioni

  2. Trova e copia il numero del progetto.

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

    Vai a IAM

  4. Fai clic su Add (Aggiungi). Viene visualizzato il riquadro Aggiungi entità.

  5. 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 del tuo progetto Google Cloud.

  6. Nell'elenco Seleziona un ruolo, seleziona Gestione del servizio > Agente di servizio Cloud Scheduler.

  7. Fai clic su Salva.

gcloud

  1. Individua il numero del progetto:

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

    Sostituisci PROJECT_ID con l'ID progetto.

  2. Copia il numero.

  3. 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 di progetto copiato in precedenza