Configurare l'identità del servizio per i servizi

Un servizio o una revisione Cloud Run ha un'identità di servizio utilizzata come account autenticato per accedere alle API dal container dell'istanza Cloud Run. Google Cloud Per scoprire 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à del 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 identità di 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à del servizio come principal: per accedere alle API Google Cloud da un servizio o una revisione Cloud Run, devi concedere all'identità del servizio i ruoli o le autorizzazioni richiesti per le operazioni che vuoi che il servizio o la revisione esegua.

La sezione successiva illustra i ruoli richiesti per concedere all'account di deployment l'accesso alla risorsa di identità del servizio e per concedere i ruoli o le autorizzazioni di cui ha bisogno iaccount di serviziont.

Ruoli obbligatori

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

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

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

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

Per istruzioni su come concedere questo ruolo all'account di deployment nell'identità del servizio, vedi Autorizzazioni di deployment. Se il account di servizio si trova in un progetto diverso dal servizio o dalla revisione Cloud Run, tu o il tuo amministratore dovete anche configurare un ruolo IAM per l'agente di servizio Cloud Run e configurare un criterio dell'organizzazione. Per maggiori dettagli, consulta Utilizzare i service account in altri progetti.

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

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

Se un servizio o una revisione Cloud Run non accede ad altri servizi Google Cloud , non devi concedere ruoli o autorizzazioni all'identità del servizio e puoi utilizzare il service account predefinito assegnato al progetto.

Ricevere consigli per creare service account 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 qualsiasi accesso aggiuntivo richiesto. Ad esempio, un servizio Cloud Run potrebbe richiamare un altro servizio Cloud Run privato o potrebbe accedere a un database Cloud SQL, entrambi i quali richiedono ruoli IAM specifici. Per ulteriori informazioni, consulta la documentazione sulla gestione dell'accesso.

Il servizio Recommender fornisce anche automaticamente consigli per creare service account dedicati con il set minimo di autorizzazioni richieste.

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 deploy un nuova revisione oppure Terraform:

Console

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

    Vai a Cloud Run

  2. Seleziona Servizi dal menu e fai clic su Esegui il deployment del contenitore per configurare un nuovo servizio. Se stai configurando un servizio esistente, fai clic sul servizio, quindi su Modifica ed esegui il deployment della nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina delle impostazioni iniziali del servizio, 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 Service account e seleziona unaccount di serviziot esistente o fai clic su Crea un nuovo service account, 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'account di servizio in IAM.

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

gcloud run services update SERVICE --service-account SERVICE_ACCOUNT

Sostituisci:

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

Puoi anche impostare un account di servizio durante la distribuzione 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, il repository REPO_NAME deve essere già stato creato. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • SERVICE_ACCOUNT con il account di servizio associato alla nuova identità: questo valore è l'indirizzo email del 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'account di servizio 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 il account di servizio associato alla nuova identità: questo valore è l'indirizzo email delaccount di serviziot, 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.

Aggiungi quanto segue a una risorsa google_cloud_run_v2_service nella configurazione Terraform:

Per creare un account di servizio, aggiungi la seguente risorsa al 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     = "id-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

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

Utilizzo degli account di servizio in altri progetti

Se configuri un account di servizio da un Google Cloud progetto diverso dalla risorsa Cloud Run, procedi nel seguente modo:

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

    Console

    1. Vai alla pagina Service Accounts della console Google Cloud :

      Vai ad Account di servizio

    2. Seleziona l'indirizzo email del account di servizio che utilizzi come identità del servizio.

    3. Fai clic sulla scheda Autorizzazioni.

    4. Fai clic sul pulsante Concedi l'accesso.

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

    6. Nel menu 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 del account di servizio a cui stai collegando la risorsa Cloud Run.
    • SERVICE_ACCOUNT_PROJECT_ID: l'ID progetto in cui si trova il account di servizio.
    • PRINCIPAL con l'account di deployment per cui stai aggiungendo il binding, 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 service account (roles/iam.serviceAccountTokenCreator) per il 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 Service Accounts della console Google Cloud :

      Vai ad Account di servizio

    2. Seleziona l'indirizzo email del account di servizio che utilizzi come identità del 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. Nel menu a discesa Seleziona un ruolo, seleziona il ruolo Account di servizio > Creatore token account di servizio.

    7. Fai clic su Salva.

    gcloud

    Utilizza 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 del account di servizio a cui stai collegando la risorsa Cloud Run.
    • SERVICE_ACCOUNT_PROJECT_ID: l'ID progetto in cui si trova il account di servizio.
    • CLOUD_RUN_RESOURCE_PROJECT_NUMBER: Il numero di 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 org-policy iam.disableCrossProjectServiceAccountUsage sia impostato su false o non applicato a livello di cartella o ereditato dalle impostazioni a livello di progetto. Per impostazione predefinita, questo valore è impostato su true.

    Console

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

      Vai a Policy dell'organizzazione

    2. Nel selettore di progetti, seleziona l'organizzazione e il progetto per cui vuoi disattivare l'utilizzo dei account di servizio tra i progetti.

    3. Seleziona il criterio Disabilita l'utilizzo account di servizio tra i progetti.

    4. Fai clic su Gestisci policy.

    5. In Origine criterio, seleziona Esegui override della policy dell'unità organizzativa principale.

    6. Fai clic su Aggiungi una regola.

    7. In Applicazione forzata, seleziona Off.

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

    gcloud

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

    Per disattivare questo vincolo dei criteri 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 il account di servizio.

Puoi applicare le appartenenze ai ruoli direttamente alla risorsa account di servizio o ereditarle dai livelli superiori della gerarchia delle risorse.

Passaggi successivi