En esta página se describe cómo usar audiencias personalizadas para la autorización.
Los clientes que llamen a un servicio de Cloud Run protegido por Gestión de Identidades y Accesos deben proporcionar un token de ID válido que incluya una reclamación de audiencia que coincida con la URL *.run.app
del servicio receptor. En el caso de los clientes que no conozcan esta URL, puede usar un valor de audiencia personalizado.
Información sobre las audiencias personalizadas
Cloud Run proporciona un rol de invocador (roles/run.invoker
) para admitir el control de acceso con IAM.
El control de acceso de IAM usa tokens de ID firmados por Google, que se empaquetan como JSON Web Tokens (JWTs).
El contenido de estos tokens se ajusta a un estándar de OIDC.
Un campo de audiencia se codifica en el token para especificar el objetivo al que se dirige y que puede usar el token. De esta forma, se limita el riesgo de que se produzca un ataque de repetición, en el que se repite un token interceptado que se iba a usar con un servicio en otro servicio.
Por convención, la audiencia es la URL completa del servicio de destino. De forma predeterminada en Cloud Run, se trata de la URL generada por Google de un servicio que termina en run.app
.
Sin embargo, un servicio de Cloud Run puede estar detrás de una URL distinta de la URL generada de forma predeterminada, como en los siguientes casos:
- Cuando se usa un dominio personalizado para acceder a un servicio en el que el cliente no conoce la URL generada por Google.
- Cuando se implementan varios servicios detrás de un balanceador de carga y un cliente no puede predecir a qué servicio regional llega una solicitud. Las URLs generadas por Google para los servicios son específicas de la región, aunque el nombre del servicio sea el mismo.
En estos casos, debe configurar un servicio para que acepte valores de audiencia personalizados que permitan añadir segmentaciones conocidas por un cliente. La URL predeterminada generada por Google siempre se mantiene como valor de audiencia aceptado.
Definir y actualizar audiencias personalizadas
Las audiencias personalizadas de Cloud Run se definen a nivel de servicio y se aplican a todas las revisiones de servicio, de forma similar a la pertenencia a la autorización de gestión de identidades y accesos.
Puedes definir varias audiencias personalizadas, siempre que la codificación JSON de las audiencias como lista de cadenas no supere los 32.768 caracteres.
Cualquier cambio en la configuración conlleva la creación de una nueva revisión. Las revisiones posteriores también recibirán automáticamente este ajuste de configuración, a menos que hagas cambios explícitos para modificarlo.
gcloud
Puedes definir audiencias personalizadas en un servicio con el siguiente comando:
gcloud run services update SERVICE --add-custom-audiences=AUDIENCE
Sustituir
- SERVICE con el nombre de tu servicio de Cloud Run
- AUDIENCE con una cadena de la audiencia personalizada que quieras admitir. Por ejemplo,
myservice
ohttps://myservice.example.com
.
Para quitar todas las audiencias personalizadas de un servicio, usa el siguiente comando:
gcloud run services update SERVICE --clear-custom-audiences
YAML
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Define la anotación
run.googleapis.com/custom-audiences
en los metadatos de Service (no en los metadatos detemplate
):apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/custom-audiences: '["AUDIENCE"]' spec: template: ...
Sustituir
- SERVICE con el nombre de tu servicio de Cloud Run
- AUDIENCE con una cadena de la audiencia personalizada que quieras admitir. Por ejemplo,
myservice
ohttps://myservice.example.com
.
Ten en cuenta que el valor del atributo es una matriz JSON de cadenas entre comillas, por lo que se deben usar comillas dobles y simples.
Sustituye el servicio por su nueva configuración con el siguiente comando:
gcloud run services replace service.yaml
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Añade lo siguiente a un recursogoogle_cloud_run_v2_service
en tu configuración de Terraform:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
custom_audiences = ["AUDIENCE"]
template {
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
}
}
Sustituye:
- SERVICE con el nombre de tu servicio de Cloud Run.
- REGION con la región Google Cloud . Por ejemplo,
europe-west1
. - AUDIENCE con una cadena de la audiencia personalizada que quieras admitir. Por ejemplo,
myservice
.
Verificar audiencias personalizadas
Obtener un token de ID de una cuenta de servicio que tenga permiso de gestión de identidades y accesos para invocar el servicio. Fíjate en el uso de la audiencia personalizada AUDIENCE.
export TOKEN=$(gcloud auth print-identity-token --impersonate-service-account SERVICE_ACCOUNT_EMAIL --audiences='AUDIENCE')
Sustituye:
- SERVICE_ACCOUNT_EMAIL con el correo de la cuenta de servicio. Termina con
.iam.gserviceaccount.com
. - AUDIENCE con el valor de audiencia personalizada que hayas definido en el servicio.
- SERVICE_ACCOUNT_EMAIL con el correo de la cuenta de servicio. Termina con
Llama al endpoint del servicio con ese token de ID.
curl -H "Authorization: Bearer ${TOKEN}" ENDPOINT
Sustituye ENDPOINT por el endpoint para acceder a tu servicio, por ejemplo, su dominio personalizado o la URL
.run.app
.Confirma que la solicitud está autorizada y que ves la respuesta esperada de tu servicio.