Configura públicos (servicios) personalizados

En esta página, se describe cómo usar los públicos personalizados para la autorización.

Los clientes que llaman a un servicio de Cloud Run protegido por Identity and Access Management deben proporcionar un token de ID válido que incluya una reclamación de público que coincida con la URL de *.run.app del servicio de recepción. Para los clientes que no conocen esta URL, puedes usar un valor de público personalizado.

Información sobre los públicos personalizados

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 tokens web JSON (JWT). El contenido de estos tokens cumple con un estándar de OIDC.

Un campo de público está codificado en el token para especificar el objetivo previsto que puede usar el token. Esto limita el riesgo de un ataque de repetición, en los que un token interceptado pretende para usarse con un servicio se vuelve a reproducir en otro.

Por convención, el público es la URL completa del servicio de destino. De forma predeterminada, en Cloud Run, esta es la URL generada por Google para un servicio que termina en run.app.

Sin embargo, un servicio de Cloud Run puede estar detrás de una URL que no sea la predeterminada que se genera, como en las siguientes situaciones:

  • Cuando se usa un dominio personalizado para llegar 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 cargas y un cliente no puede anticipar a qué servicio regional llegan las solicitudes. Las URLs generadas por Google para los servicios son específicas de la región, incluso si el nombre del servicio es el mismo.

En estas situaciones, debes configurar un servicio para que acepte valores de público personalizados que permitan destinos adicionales conocidos por un cliente. La URL predeterminada generada por Google siempre sigue siendo un valor de público aceptado.

Establece y actualiza públicos personalizados

La configuración de públicos personalizados para Cloud Run se realiza a nivel de servicio y se aplica a todas las revisiones activas, de manera similar a la membresía de autorización de IAM.

Puedes establecer varios públicos personalizados, siempre que la codificación JSON de los públicos como una lista de strings no supere los 32,768 caracteres.

Cualquier cambio en la configuración conlleva la creación de una revisión nueva. Las revisiones posteriores también adoptarán esta configuración de manera automática, a menos que realices actualizaciones explícitas para cambiarla.

gcloud

Puedes configurar públicos personalizados en un servicio con el siguiente comando:

gcloud run services update SERVICE --add-custom-audiences=AUDIENCE

Reemplazar

  • SERVICE por el nombre del servicio de Cloud Run
  • AUDIENCE por una string para el público personalizado que deseas admitir, por ejemplo, myservice o https://myservice.example.com

Puedes quitar todos los públicos personalizados de un servicio mediante el siguiente comando:

gcloud run services update SERVICE --clear-custom-audiences

YAML

  1. Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Configura la anotación run.googleapis.com/custom-audiences en los metadatos del Service (no en los metadatos template):

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
        run.googleapis.com/custom-audiences: '["AUDIENCE"]'
    spec:
      template:
        ...

    Reemplazar

    • SERVICE por el nombre del servicio de Cloud Run
    • AUDIENCE por una string para el público personalizado que deseas admitir, por ejemplo, myservice o https://myservice.example.com

    Ten en cuenta que el valor del atributo es un array de strings JSON entrecomillado que requiere el uso de comillas dobles y simples.

  3. Reemplaza el trabajo por su nueva configuración con el siguiente comando:

    gcloud run services replace service.yaml

Verifica los públicos personalizados

  1. Obtén un token de ID para una cuenta de servicio que tenga permiso de IAM a fin de invocar el servicio. Ten en cuenta el uso del público personalizado AUDIENCE.

    export TOKEN=$(gcloud auth print-identity-token --impersonate-service-account SERVICE_ACCOUNT_EMAIL --audiences='AUDIENCE')

    Reemplaza lo siguiente:

    • SERVICE_ACCOUNT_EMAIL por el correo electrónico de la cuenta de servicio Termina con .iam.gserviceaccount.com.
    • AUDIENCE por el valor del público personalizado que estableces en el servicio.
  2. Llama al extremo del servicio con ese token de ID

    curl -H "Authorization: Bearer ${TOKEN}" ENDPOINT

    Reemplaza ENDPOINT por el extremo para acceder a tu servicio, por ejemplo, su dominio personalizado o la URL de .run.app.

  3. Confirma que la solicitud esté autorizada y veas la respuesta esperada de tu servicio.