Utilizzare l'autenticazione con target HTTP

Cloud Scheduler può chiamare destinazioni HTTP che richiedono l'autenticazione se configuri un account di servizio associato con le credenziali appropriate.

Configura un service account

Un service account viene in genere utilizzato da un'applicazione o da un workload di computing ed è identificato dal rispettivo indirizzo email, che è univoco per l'account.

Le applicazioni possono utilizzare i service account per effettuare chiamate API autorizzate autenticandosi come account di servizio stesso e accedendo a tutte le risorse a cui il account di servizio ha l'autorizzazione di accedere.

Il modo più comune per consentire a un'applicazione di autenticarsi come account di servizio è collegare unaccount di serviziot alla risorsa che esegue l'applicazione. Poi, puoi concedere alaccount di serviziot i ruoli IAM (Identity and Access Management) per consentirgli di accedere alle risorse Google Cloud .

  1. 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 l'agente di servizio 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 risposte 403 agli endpoint che richiedono l'autenticazione, anche se il service account del job dispone del ruolo appropriato.

  2. Se la destinazione si trova all'interno di Google Cloud, concedi i ruoli IAM necessari al tuaccount di serviziont. Ogni servizio all'interno di Google Cloud richiede un ruolo specifico e il servizio ricevente verifica automaticamente il token generato.

    Ad esempio, per Cloud Run e l'ultima versione di Cloud Run Functions, devi concedere il ruolo Cloud Run Invoker (roles/run.invoker), mentre per Cloud Run Functions (1ª generazione.) devi concedere il ruolo Invoker di Cloud Functions (roles/cloudfunctions.invoker).

    Per ottenere l'autorizzazione necessaria per collegare un account di servizio a una risorsa, chiedi all'amministratore di concederti il ruolo IAM Utente service account (roles/iam.serviceAccountUser) sul account di servizio. Questo ruolo predefinito contiene l'autorizzazione iam.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 un account di servizio specifico per richiamare il servizio a cui fa riferimento il job Cloud Scheduler, puoi seguire il principio del privilegio minimo associando l'account e la relativa autorizzazione di invoker al servizio di destinazione:

    Console

    1. Nella console Google Cloud , nella pagina di selezione del progetto, seleziona un Google Cloud progetto.

      Vai al selettore di progetti

    2. Vai alla pagina del tipo di risorsa che stai richiamando. Ad esempio, se richiami un servizio Cloud Run, vai alla pagina che elenca i servizi Cloud Run.

    3. Seleziona la casella di controllo a sinistra del servizio che vuoi richiamare. Non fare clic sul servizio stesso.

    4. Fai clic sulla scheda Autorizzazioni.

      Se il riquadro delle informazioni non è visibile, potrebbe essere necessario fare clic su Mostra riquadro informazioni > Autorizzazioni.

    5. Fai clic su Aggiungi entità.

    6. Nel campo Nuove entità, inserisci l'indirizzo email del account di servizio che hai creato.

    7. Dall'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à.

    8. Fai clic su Salva.

    gcloud

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL \
        --role=ROLE
    

    Sostituisci quanto segue:

    • RESOURCE_TYPE: il tipo di risorsa della destinazione. Ad esempio, run services per una destinazione del servizio Cloud Run.
    • RESOURCE_ID: l'identificatore del target. Ad esempio, il nome di un servizio 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 l'invocazione. Ad esempio, roles/run.invoker per una destinazione del servizio Cloud Run. Per i target delle funzioni Cloud Run, ti consigliamo di utilizzare il comando add-invoker-policy-binding.

    Esempi:

    • Utilizza il comando gcloud run services add-iam-policy-binding per concedere il ruolo IAM Cloud Run Invoker (roles/run.invoker) al account di servizio my-service-account@my-project.iam.gserviceaccount.com sul servizio Cloud Run my-service:

      gcloud run services add-iam-policy-binding my-service \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --role=roles/run.invoker
      
    • Utilizza il comando gcloud functions add-invoker-policy-binding per concedere il ruolo appropriato al account di servizio my-service-account@my-project.iam.gserviceaccount.com nella funzione Cloud Run my-cloud-function.

      Per l'ultima versione di Cloud Run Functions, questa operazione aggiunge l'associazione Cloud Run Invoker (roles/run.invoker) al criterio IAM del servizio Cloud Run sottostante della funzione specificata. Per Cloud Run Functions 1ª generazionen.), questo aggiunge l'associazione Invoker Cloud Functions (roles/cloudfunctions.invoker) al criterio IAM della funzione specificata:

      gcloud functions add-invoker-policy-binding my-cloud-function \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
      

    Per un esempio di utilizzo di Terraform per creare un account di servizio con l'autorizzazione per richiamare un servizio Cloud Run, consulta Creazione di uaccount di serviziont per Cloud Scheduler.

  3. Se la tua destinazione si trova al di fuori di Google Cloud, il servizio di ricezione deve verificare manualmente il token.

  4. L'agente di servizio Cloud Scheduler predefinito viene configurato automaticamente quando abiliti l'API Cloud Scheduler, a meno che tu non l'abbia abilitata prima del 19 marzo 2019, nel qual caso devi concedere il ruolo Agente di servizio Cloud Scheduler. in modo che possa generare token di intestazione per conto del account di servizio per l'autenticazione alla destinazione.