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.createrun.services.updaterun.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
Nella console Google Cloud , vai a Cloud Run:
Seleziona Servizi dal menu di navigazione di Cloud Run:
Se stai configurando un nuovo servizio, fai clic su Esegui il deployment del container e compila la pagina delle impostazioni iniziali del servizio.
Se stai configurando un servizio esistente, fai clic sul servizio, quindi sulla scheda Sicurezza.
Seleziona Consenti accesso pubblico.
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 deploycon il flag--no-invoker-iam-check:gcloud run deploy SERVICE_NAME --no-invoker-iam-check
Sostituisci
SERVICE_NAMEcon il nome del servizio.Per un servizio esistente, utilizza il comando
gcloud run services updatecon 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
Per visualizzare e scaricare la configurazione:
gcloud run services describe SERVICE --format export > service.yaml
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.
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 risorsagoogle_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 esempious-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formatoLOCATION-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
Nella console Google Cloud , vai alla pagina Servizi di Cloud Run:
Fai clic sul servizio, quindi sulla scheda Sicurezza.
Seleziona Richiedi autenticazione e seleziona Identity and Access Management (IAM).
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_NAMEcon il nome del servizio.
YAML
Per visualizzare e scaricare la configurazione:
gcloud run services describe SERVICE --format export > service.yaml
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_NAMEcon 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 risorsagoogle_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 esempious-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formatoLOCATION-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:
Nella console Google Cloud , vai alla pagina Servizi di Cloud Run:
A sinistra del servizio che vuoi rendere pubblico, fai clic sulla casella di controllo. Non fare clic sul servizio stesso.
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.
Fai clic su Aggiungi entità.
Nel campo Nuove entità, inserisci il valore allUsers.
Nel menu Seleziona un ruolo, seleziona il ruolo Cloud Run Invoker.
Fai clic su Salva.
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 risorsagoogle_cloud_run_v2_service nella configurazione Terraform:Per aggiornare l'associazione IAM del servizio per roles/run.invoker, aggiungi la seguente risorsa che fa riferimento al tuo servizio Cloud Run:
Questa associazione è autorevole solo per il ruolo specificato. Le altre associazioni IAM all'interno della policy IAM del servizio vengono conservate.