Configura l'identità del servizio

Un servizio o una revisione Cloud Run ha un'identità di servizio utilizzata come account autenticato per accedere alle API Google Cloud dal container dell'istanza Cloud Run. Per saperne di più sull'identità del servizio, consulta la guida Introduzione all'identità del servizio.

Come viene utilizzata l'identità del servizio

In Cloud Run, l'identità di servizio è un account di servizio che è sia una risorsa che un'entità.

  • Identità di servizio come risorsa: per collegare un account di servizio come identità di servizio, l'account del deployment deve avere accesso alla risorsa di identità del servizio. Alcune operazioni, come la creazione o l'aggiornamento di un servizio o di una revisione, richiedono che l'account del deployment disponga delle autorizzazioni per la risorsa di identità del servizio.
  • Identità di servizio come entità: per accedere alle API Google Cloud da un servizio o da una revisione Cloud Run, devi concedere all'identità di servizio le autorizzazioni o i ruoli richiesti per le operazioni che vuoi che il servizio o la revisione eseguano.

La prossima sezione illustra i ruoli richiesti per concedere all'account del deployment l'accesso alla risorsa di identità di servizio e concedere l'accesso per l'entità dell'account di servizio.

Ruoli obbligatori

Tu o l'amministratore dovete concedere ruoli e autorizzazioni IAM per l'account del deployment e l'identità del servizio.

Fai clic per visualizzare i ruoli richiesti per l'account del deployment

Per ottenere le autorizzazioni necessarie per collegare un account di servizio come identità di servizio sul servizio o sulla revisione, tu o l'amministratore dovete concedere all'account del deployment il ruolo Utente account di servizio (roles/iam.serviceAccountUser) nell'account di servizio utilizzato come identità di servizio.

Questo ruolo predefinito contiene l'autorizzazione iam.serviceAccounts.actAs, necessaria per collegare un account di servizio al servizio o alla revisione. Potresti anche essere in grado di ottenere questa autorizzazione configurando i ruoli personalizzati o utilizzando altri ruoli predefiniti.

Per istruzioni su come concedere all'account del deployment questo ruolo sull'identità di servizio, consulta le autorizzazioni per il deployment. Se l'account di servizio si trova in un progetto diverso dal servizio o dalla revisione Cloud Run, tu o l'amministratore dovete anche configurare un ruolo IAM per l'agente di servizio Cloud Run e impostare un criterio dell'organizzazione. Per maggiori dettagli, consulta la pagina relativa all'utilizzo degli account di servizio in altri progetti.

Fai clic per visualizzare i ruoli richiesti per l'identità del servizio

Per consentire all'identità di servizio di accedere alle API Google Cloud da Cloud Run, tu o l'amministratore dovete concedere all'identità di servizio le autorizzazioni o i ruoli richiesti dalle operazioni che vuoi eseguire. Per accedere a librerie client specifiche di Cloud, consulta la documentazione di Google Cloud per il servizio Google Cloud.

Se un servizio o una revisione Cloud Run non accede ad altri servizi Google Cloud, non è necessario concedere all'identità di servizio ruoli o autorizzazioni e puoi utilizzare l'account di servizio predefinito assegnato al progetto.

Ricevi suggerimenti per creare account di servizio dedicati

Quando crei un nuovo account di servizio dalla console Google Cloud, il passaggio facoltativo "Concedi a questo account di servizio l'accesso al progetto" riguarda eventuali accessi aggiuntivi richiesti. Ad esempio, un servizio Cloud Run potrebbe richiamare un altro servizio Cloud Run privato oppure accedere a un database Cloud SQL, entrambi che richiedono ruoli IAM specifici. Per ulteriori informazioni, consulta la documentazione sulla gestione dell'accesso.

Inoltre, il servizio per suggerimenti fornisce automaticamente suggerimenti per creare account di servizio dedicati con l'insieme di autorizzazioni minimo richiesto.

Configura l'identità del servizio

Se non hai ancora creato un account di servizio, puoi crearne uno gestito dall'utente in IAM o in Cloud Run.

Per configurare l'identità del servizio, utilizza la console Google Cloud, gcloud CLI, l'API (YAML) quando crei un nuovo servizio o esegui il deployment di una nuova revisione oppure Terraform:

Console

  1. Nella console Google Cloud, vai a Cloud Run:

    Vai a Cloud Run

  2. Fai clic su Crea servizio se stai configurando un nuovo servizio in cui stai eseguendo il deployment. Se stai configurando un servizio esistente, fai clic sul servizio e poi su Modifica ed esegui il deployment di nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina iniziale delle impostazioni del servizio in base alle tue esigenze, quindi fai clic su Container, volumi, networking, sicurezza per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Sicurezza.

    immagine

    • Fai clic sul menu a discesa Account di servizio e seleziona un account di servizio esistente oppure fai clic su Crea un nuovo account di servizio, se applicabile.
  5. Fai clic su Crea o Esegui il deployment.

gcloud

Se non hai ancora creato un account di servizio, puoi crearne uno gestito dall'utente in IAM.

Puoi aggiornare un servizio esistente in modo che abbia un nuovo account di servizio utilizzando il seguente comando:

gcloud run services update SERVICE --service-account SERVICE_ACCOUNT

Sostituisci:

  • SERVICE con il nome del servizio.
  • SERVICE_ACCOUNT con l'account di servizio associato alla nuova identità: questo valore è l'indirizzo email dell'account di servizio, ad esempio example@myproject.iam.gserviceaccount.com.

Puoi anche impostare un account di servizio durante il deployment utilizzando il comando:

gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT

Sostituisci:

  • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, è necessario già creare il repository REPO_NAME. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • SERVICE_ACCOUNT con l'account di servizio associato alla nuova identità: questo valore è l'indirizzo email dell'account di servizio, ad esempio example@myservice.iam.gserviceaccount.com.

YAML

Se non hai ancora creato un account di servizio, puoi crearne uno gestito dall'utente in IAM.

  1. Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Aggiorna l'attributo serviceAccountName::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: SERVICE_ACCOUNT
    

    Sostituisci

    • SERVICE con il nome del tuo servizio Cloud Run.
    • SERVICE_ACCOUNT con l'account di servizio associato alla nuova identità: questo valore è l'indirizzo email dell'account di servizio, ad esempio SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  3. Crea o aggiorna il servizio utilizzando il seguente comando:

    gcloud run services replace service.yaml

Terraform

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Per creare un account di servizio, aggiungi la seguente risorsa al tuo file main.tf esistente:

resource "google_service_account" "cloudrun_service_identity" {
  account_id = "my-service-account"
}

Crea o aggiorna un servizio Cloud Run e includi il tuo account di servizio:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloud-run-srv"
  location = "us-central1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    service_account = google_service_account.cloudrun_service_identity.email
  }
}

Usa account di servizio in altri progetti

Se configuri un account di servizio da un progetto Google Cloud diverso dalla risorsa Cloud Run:

  1. Tu o il tuo amministratore dovete concedere il ruolo Utente account di servizio (roles/iam.serviceAccountUser) all'account di servizio che utilizzi come identità di servizio.

    Console

    1. Vai alla pagina Account di servizio della console Google Cloud:

      Vai ad Account di servizio

    2. Seleziona l'indirizzo email dell'account di servizio che stai utilizzando come identità di servizio.

    3. Fai clic sulla scheda Autorizzazioni.

    4. Fai clic sul pulsante Concedi l'accesso.

    5. Inserisci l'indirizzo email dell'account del deployment che corrisponde all'entità a cui stai concedendo il ruolo Amministratore o Sviluppatore.

    6. Nell'elenco a discesa Seleziona un ruolo, seleziona il ruolo Account di servizio > Utente account di servizio.

    7. Fai clic su Salva.

    gcloud

    Utilizza il comando gcloud iam service-accounts add-iam-policy-binding, sostituendo le variabili evidenziate con i valori appropriati:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="PRINCIPAL" \
        --role="roles/iam.serviceAccountUser"
    

    Sostituisci:

    • SERVICE_ACCOUNT_NAME: il nome dell'account di servizio a cui stai collegando la risorsa Cloud Run.
    • SERVICE_ACCOUNT_PROJECT_ID: l'ID progetto in cui si trova l'account di servizio.
    • PRINCIPAL con l'account del deployment per cui stai aggiungendo l'associazione, utilizzando il formato user|group|serviceAccount:email o domain:domain. Ad esempio:

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
  2. Tu o il tuo amministratore dovete concedere all'agente di servizio della risorsa Cloud Run il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) nell'account di servizio che utilizzi come identità di servizio. L'agente di servizio segue il formato service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    Console

    1. Vai alla pagina Account di servizio della console Google Cloud:

      Vai ad Account di servizio

    2. Seleziona l'indirizzo email dell'account di servizio che stai utilizzando come identità di servizio.

    3. Fai clic sulla scheda Autorizzazioni.

    4. Fai clic sul pulsante Concedi l'accesso.

    5. Inserisci l'indirizzo email dell'agente di servizio. Ad esempio: service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    6. Nell'elenco a discesa Seleziona un ruolo, seleziona il ruolo Account di servizio > Creatore token account di servizio.

    7. Fai clic su Salva.

    gcloud

    Usa il comando gcloud iam service-accounts add-iam-policy-binding:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator"
    

    Sostituisci i seguenti valori:

    • SERVICE_ACCOUNT_NAME: il nome dell'account di servizio a cui stai collegando la risorsa Cloud Run.
    • SERVICE_ACCOUNT_PROJECT_ID: l'ID progetto in cui si trova l'account di servizio.
    • CLOUD_RUN_RESOURCE_PROJECT_NUMBER: il numero del progetto in cui si trova Cloud Run.

    Il comando stampa il criterio di autorizzazione aggiornato per l'account di servizio gestito dall'utente.

  3. Il progetto contenente questo account di servizio richiede che il criterio dell'organizzazione iam.disableCrossProjectServiceAccountUsage sia impostato su false o non venga applicato forzatamente a livello di cartella o ereditato dalle impostazioni a livello di progetto. Il valore predefinito è true.

    Console

    1. Vai alla pagina Criteri dell'organizzazione nella console Google Cloud:

      Vai a Criteri dell'organizzazione

    2. Dal selettore dei progetti, scegli l'organizzazione e il progetto per i quali vuoi disabilitare l'utilizzo degli account di servizio tra progetti.

    3. Seleziona il criterio per disabilita l'utilizzo degli account di servizio tra progetti.

    4. Fai clic su Gestisci criterio.

    5. In Origine criterio, seleziona Sostituisci criterio della risorsa padre.

    6. Fai clic su Aggiungi una regola.

    7. In Applicazione, seleziona Off.

    8. Per applicare il criterio, fai clic su Imposta criterio.

    gcloud

    Nel progetto che contiene l'account di servizio, assicurati che il vincolo del criterio dell'organizzazione iam.disableCrossProjectServiceAccountUsage non venga applicato in modo forzato. Questo vincolo viene applicato per impostazione predefinita.

    Per disabilitare questo vincolo del criterio dell'organizzazione, esegui:

    gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage
        --project=SERVICE_ACCOUNT_PROJECT_ID
    

    Sostituisci SERVICE_ACCOUNT_PROJECT_ID con l'ID progetto che contiene l'account di servizio.

Puoi applicare le appartenenze ai ruoli direttamente alla risorsa dell'account di servizio o ereditare dai livelli superiori nella gerarchia delle risorse.

Passaggi successivi