Consentire l'accesso pubblico (non autenticato)

Esistono due modi per creare un servizio Cloud Run pubblico:

  • Disabilita il controllo IAM di Cloud Run Invoker (opzione consigliata).
  • Assegna il ruolo IAM Invoker di Cloud Run al tipo di membro allUsers.

Ruoli obbligatori

Per disattivare o riattivare il controllo IAM Invoker su un servizio, devi disporre delle seguenti autorizzazioni:

  • run.services.create
  • run.services.update
  • run.services.setIamPolicy

Queste autorizzazioni sono incluse nel ruolo Cloud Run Admin (roles/run.admin). Consulta Ruoli IAM di Cloud Run per l'elenco completo dei ruoli e delle relative autorizzazioni.

Disabilita il controllo IAM di Cloud Run Invoker

Il modo consigliato per creare un servizio pubblico è disabilitare il controllo IAM di Cloud Run Invoker. Cloud Run applica questo controllo per impostazione predefinita. Utilizza questa soluzione quando il progetto è soggetto al vincolo di limitazione del dominio in una policy dell'organizzazione.

Per disattivare il controllo:

Console

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

    Vai a Cloud Run

  2. Seleziona Servizi dal menu di navigazione di Cloud Run:

    1. Se stai configurando un nuovo servizio, fai clic su Esegui il deployment del container e compila la pagina delle impostazioni iniziali del servizio.

    2. Se stai configurando un servizio esistente, fai clic sul servizio, quindi sulla scheda Sicurezza.

  3. Seleziona Consenti accesso pubblico.

  4. Fai clic su Crea per un nuovo servizio. Fai clic su Visualizza differenze e fai di nuovo il deployment, quindi su Esegui il deployment delle modifiche per un servizio esistente.

gcloud

  • Per un nuovo servizio, utilizza il comando gcloud run deploy con il flag --no-invoker-iam-check:

    gcloud run deploy SERVICE_NAME --no-invoker-iam-check

    Sostituisci SERVICE_NAME con il nome del servizio.

  • Per un servizio esistente, utilizza il comando gcloud run services update con il flag --no-invoker-iam-check:

    gcloud run services update SERVICE_NAME --no-invoker-iam-check

Sostituisci SERVICE_NAME con il nome del servizio.

YAML

  1. Per visualizzare e scaricare la configurazione:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Aggiorna l'annotazione run.googleapis.com/invoker-iam-disabled::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
        annotations:
          run.googleapis.com/invoker-iam-disabled: 'true'
        name: SERVICE_NAME

    Sostituisci SERVICE_NAME con il nome del tuo servizio Cloud Run.

  3. Sostituisci il servizio con la nuova configurazione 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:
resource "google_cloud_run_v2_service" "default" {
   name     = "SERVICE"
   location = "REGION"
   invoker_iam_disabled = true

   template {
      containers {
      image = "IMAGE_URL"
      }
   }
}

Sostituisci quanto segue:

  • SERVICE: il nome del servizio Cloud Run.
  • REGION: la regione Google Cloud , ad esempio europe-west1.
  • IMAGE_URL: 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 segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

Verifica che il controllo sia disabilitato dopo il deployment andando all'endpoint HTTPS del servizio.

Riattiva il controllo IAM di Cloud Run Invoker

Per riattivare il controllo:

Console

  1. Nella console Google Cloud , vai alla pagina Servizi di Cloud Run:

    Vai a Cloud Run

  2. Fai clic sul servizio, quindi sulla scheda Sicurezza.

  3. Seleziona Richiedi autenticazione e seleziona Identity and Access Management (IAM).

  4. Fai clic su Visualizza differenze e fai di nuovo il deployment, quindi su Esegui il deployment delle modifiche.

gcloud

  • Aggiorna il servizio passando il flag --invoker-iam-check:

    gcloud run services update SERVICE_NAME --invoker-iam-check

    Sostituisci SERVICE_NAME con il nome del servizio.

YAML

  1. Per visualizzare e scaricare la configurazione:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Aggiorna l'annotazione run.googleapis.com/invoker-iam-disabled::

    apiVersion: serving.knative.dev/v1
     kind: Service
     metadata:
        annotations:
           run.googleapis.com/invoker-iam-disabled: 'false'
        name: SERVICE_NAME

    Sostituisci SERVICE_NAME con il nome del tuo servizio Cloud Run.

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:
resource "google_cloud_run_v2_service" "default" {
   name     = "SERVICE"
   location = "REGION"
   invoker_iam_disabled = false

   template {
      containers {
      image = "IMAGE_URL"
      }
   }
}

Sostituisci quanto segue:

  • SERVICE: il nome del servizio Cloud Run.
  • REGION: la regione Google Cloud , ad esempio europe-west1.
  • IMAGE_URL: 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 segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

Verifica che il controllo sia stato riattivato dopo il deployment andando all'endpoint HTTPS del servizio.

Configura la policy dell'organizzazione per il controllo IAM dell'invoker di Cloud Run

Se sei un amministratore, puoi limitare la possibilità di disabilitare il controllo IAM Invoker utilizzando il vincolo gestito constraints/run.managed.requireInvokerIam. Questo vincolo non viene applicato per impostazione predefinita.

Assegna il ruolo Cloud Run IAM Invoker al tipo di iscrizione allUsers

Puoi consentire l'accesso pubblico a un servizio assegnando il ruolo IAM Invoker di Cloud Run al tipo di membro allUsers.

Devi disporre dell'autorizzazione run.services.setIamPolicy per configurare l'autenticazione su un servizio Cloud Run. Questa autorizzazione è inclusa nel ruolo Amministratore Cloud Run. Consulta Ruoli IAM di Cloud Run per l'elenco completo dei ruoli e delle relative autorizzazioni.

Console

Per un servizio Cloud Run esistente:

  1. Nella console Google Cloud , vai alla pagina Servizi di Cloud Run:

    Vai alla console Google Cloud

  2. A sinistra del servizio che vuoi rendere pubblico, fai clic sulla casella di controllo. Non fare clic sul servizio stesso.

  3. Nel riquadro delle informazioni nell'angolo in alto a destra, fai clic sulla scheda Autorizzazioni. Se il riquadro informazioni non è visibile, potresti dover fare clic su Mostra riquadro informazioni, quindi su Autorizzazioni.

  4. Fai clic su Aggiungi entità.

Nel campo Nuove entità, inserisci il valore allUsers.

  1. Nel menu Seleziona un ruolo, seleziona il ruolo Cloud Run Invoker.

  2. Fai clic su Salva.

  3. Ti verrà chiesto di confermare che vuoi rendere pubblica questa risorsa. Fai clic su Consenti accesso pubblico per applicare la modifica alle impostazioni IAM del servizio.

Per un nuovo servizio che stai creando, crea il servizio e seleziona Consenti accesso pubblico nella sezione Autenticazione per renderlo disponibile pubblicamente. Per rendere privato un servizio, seleziona Richiedi autenticazione.

gcloud

Per rendere un servizio accessibile pubblicamente, utilizza il comando gcloud run services per aggiungere il tipo di membro speciale allUsers a un servizio e concedergli il ruolo roles/run.invoker:

  gcloud run services add-iam-policy-binding [SERVICE_NAME] \
    --member="allUsers" \
    --role="roles/run.invoker"

Esegui il comando gcloud run deploy per rendere il servizio accessibile pubblicamente quando ne esegui il deployment:

gcloud run deploy [SERVICE_NAME] ... --allow-unauthenticated

YAML

Crea un file denominato policy.yaml con i seguenti contenuti:

bindings:
- members:
  - allUsers
  role: roles/run.invoker

Consenti l'accesso pubblico per SERVICE esistente utilizzando:

gcloud run services set-iam-policy SERVICE policy.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:
resource "google_cloud_run_v2_service" "default" {
  name     = "public-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

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

Per aggiornare l'associazione IAM del servizio per roles/run.invoker, aggiungi la seguente risorsa che fa riferimento al tuo servizio Cloud Run:

resource "google_cloud_run_service_iam_binding" "default" {
  location = google_cloud_run_v2_service.default.location
  service  = google_cloud_run_v2_service.default.name
  role     = "roles/run.invoker"
  members = [
    "allUsers"
  ]
}

Questa associazione è autorevole solo per il ruolo specificato. Le altre associazioni IAM all'interno della policy IAM del servizio vengono conservate.