En esta página se describen las dos identidades de Cloud Run y cómo usan las bibliotecas de cliente de Cloud la identidad de servicio para llamar a las Google Cloud APIs. Entre los ejemplos de Google Cloud productos que tienen bibliotecas de cliente de Cloud se incluyen Cloud Storage, Firestore, Cloud SQL, Pub/Sub y Cloud Tasks. Esta página está dirigida a administradores, operadores o desarrolladores que gestionan políticas de la organización y acceso de usuarios, o a cualquier persona que quiera obtener información sobre estos temas.
Identidades de Cloud Run
Para usar Cloud Run, Google Cloud es necesario que tanto el usuario de Cloud Run como la instancia de Cloud Run tengan una identidad.
- La identidad del usuario de Cloud Run se denomina cuenta de implementación de Cloud Run. Cuando gestionas una revisión o un trabajo, usas esta identidad para enviar solicitudes a la API Admin de Cloud Run.
- La identidad de la instancia de Cloud Run se denomina identidad del servicio de Cloud Run. Cuando el código de Cloud Run que has escrito interactúa con las bibliotecas de cliente de Cloud o llama a otro servicio de Cloud Run para comunicarse entre servicios, usas esta identidad para hacer solicitudes de Cloud Run aGoogle Cloud APIs u otros servicios de Cloud Run.
Para acceder a las Google Cloud APIs o comunicarse entre servicios, cada identidad debe tener los permisos adecuados concedidos en Gestión de Identidades y Accesos (IAM).
Llama a la API Admin de Cloud Run con la cuenta de implementador
Puedes llamar a la API Admin de Cloud Run desde Cloud Run mediante la cuenta de implementador de Cloud Run. La cuenta de implementación puede ser una cuenta de usuario o una cuenta de servicio, y representa la cuenta con la que se ha iniciado sesión en el entorno de Google Cloud .
Cuando la cuenta de implementación usa Cloud Run, IAM comprueba si tiene los permisos necesarios para realizar la operación de Cloud Run. En el siguiente diagrama se muestra cómo una cuenta de usuario llama a la API Admin de Cloud Run para desplegar una nueva revisión desde la consolaGoogle Cloud :
Llamar a las APIs con la identidad de servicio Google Cloud
Cuando una instancia de Cloud Run interactúa con otros servicios de Cloud Run autenticados con IAM o llama a bibliotecas de cliente de Cloud a través del código de la aplicación o de funciones integradas, como las integraciones de Cloud Run o los montajes de volúmenes de Cloud Storage, el entorno Google Cloud usa las credenciales predeterminadas de la aplicación (ADC) para detectar automáticamente si la identidad del servicio de Cloud Run está autenticada para realizar la operación de la API. La identidad de servicio de Cloud Run es una cuenta de servicio que se asignó como la identidad de la instancia de Cloud Run cuando desplegaste una revisión o ejecutaste un trabajo.
Una cuenta de servicio que se utilice como cuenta de implementación solo se usará como identidad de servicio si configuras la misma cuenta de servicio en tu configuración de Cloud Run.
En el resto de esta guía se describe cómo usa un servicio o un trabajo de Cloud Run la identidad de servicio para llamar y acceder a los servicios y las APIs de Google. Para obtener más información sobre la configuración de la identidad de servicio, consulta las páginas de configuración de la identidad de servicio para servicios y trabajos.
Tipos de cuentas de servicio para la identidad de servicio
Cuando tu instancia de Cloud Run llama a las APIs de Google Cloud para realizar las operaciones que necesita, Cloud Run usa automáticamente una cuenta de servicio como identidad de servicio. Los dos tipos de cuentas de servicio que se pueden usar como identidad de servicio son los siguientes:
- Cuenta de servicio gestionada por el usuario (opción recomendada): creas manualmente esta cuenta de servicio y determinas el conjunto mínimo de permisos que necesita para acceder a recursos específicos de Google Cloud . La cuenta de servicio gestionada por el usuario sigue el formato
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
. - Cuenta de servicio predeterminada de Compute Engine: Cloud Run proporciona automáticamente la cuenta de servicio predeterminada de Compute Engine como identidad de servicio predeterminada. La cuenta de servicio predeterminada de Compute Engine sigue el formato
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.
Evitar la cuenta de servicio predeterminada al configurar la identidad de servicio
De forma predeterminada, la cuenta de servicio predeterminada de Compute Engine se crea automáticamente. Si no especificas una cuenta de servicio al crear el servicio o el trabajo de Cloud Run, Cloud Run usará esta cuenta de servicio.
En función de la configuración de la política de tu organización, es posible que se conceda automáticamente el rol Editor a la cuenta de servicio predeterminada de tu proyecto. Te recomendamos que inhabilites la asignación automática de roles
aplicando la restricción de la política de organización iam.automaticIamGrantsForDefaultServiceAccounts
. Si has creado tu organización después del 3 de mayo del 2024, esta restricción se aplica de forma predeterminada.
Si inhabilitas la concesión automática de roles, debes decidir qué roles quieres conceder a las cuentas de servicio predeterminadas y, a continuación, concederlos tú mismo.
Si la cuenta de servicio predeterminada ya tiene el rol Editor, te recomendamos que lo sustituyas por roles con menos permisos.Para modificar los roles de la cuenta de servicio de forma segura, usa Simulador de políticas para ver el impacto del cambio y, a continuación, asigna y revoca los roles adecuados.
Cómo funciona la identidad del servicio
Cuando tu código llama o envía solicitudes a las bibliotecas de cliente de Cloud, ocurre lo siguiente:
- Las bibliotecas de cliente detectan que se ha hecho una solicitud a una Google Cloud API o a bibliotecas de cliente de Cloud, y solicitan un token de acceso de OAuth 2.0 para la identidad de servicio al servidor de metadatos de la instancia.
- El servidor de metadatos de la instancia proporciona un token de acceso de gestión de identidades y accesos para la cuenta de servicio configurada como identidad de servicio.
- La solicitud a la API Google Cloud se envía con un token de acceso de OAuth 2.0.
- IAM verifica la identidad del servicio a la que se hace referencia en el token de acceso para comprobar si tiene los permisos necesarios y comprueba los enlaces de políticas antes de reenviar la llamada al endpoint de la API.
- La API Google Cloud realiza la operación.
Generar un token de acceso para la solicitud de Cloud Run para llamar a las Google Cloud APIs
Si tu código de Cloud Run usa bibliotecas de cliente de Cloud, puedes configurar la identidad de servicio en Cloud Run asignando una cuenta de servicio durante el despliegue o la ejecución. De esta forma, la biblioteca puede obtener automáticamente un token de acceso para autenticar la solicitud de tu código. Si tu código de Cloud Run se comunica con otros servicios de Cloud Run autenticados, debes añadir el token de acceso a tus solicitudes.
Para asignar una cuenta de servicio como identidad de servicio, consulta las siguientes guías:
- Configurar la identidad de servicio para los servicios
- Configurar la identidad de servicio para los trabajos
Sin embargo, si usas tu propio código personalizado o necesitas hacer solicitudes de forma programática, puedes usar el servidor de metadatos directamente para obtener manualmente los tokens de identidad y los tokens de acceso que se describen en la siguiente sección. Ten en cuenta que no puedes consultar este servidor directamente desde tu máquina local, ya que el servidor de metadatos solo está disponible para las cargas de trabajo que se ejecutan enGoogle Cloud.
Obtener tokens de ID y de acceso mediante el servidor de metadatos
Los dos tipos de tokens que puedes obtener con el servidor de metadatos son los siguientes:
- Tokens de acceso de OAuth 2.0, que se usan para llamar a la mayoría de las bibliotecas de cliente de las APIs de Google.
- Tokens de ID, que se usan para llamar a otros servicios de Cloud Run o para invocar cualquier servicio para validar un token de ID.
Para obtener un token, siga las instrucciones de la pestaña correspondiente al tipo de token que esté usando:
Tokens de acceso
Por ejemplo, si quieres crear un tema de Pub/Sub, usa el método projects.topics.create
.
Usa el servidor de metadatos de Compute para obtener un token de acceso:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ --header "Metadata-Flavor: Google"
Este endpoint devuelve una respuesta JSON con un atributo
access_token
.En la solicitud del protocolo HTTP, la solicitud debe autenticarse con un token de acceso en el encabezado
Authorization
:PUT https://pubsub.googleapis.com/v1/projects/
PROJECT_ID
/topics/TOPIC_ID
Authorization: BearerACCESS_TOKEN
Donde:
PROJECT_ID
es el ID del proyecto.- El ID de tu tema es
TOPIC_ID
. ACCESS_TOKEN
es el token de acceso que has obtenido en el paso anterior.
Respuesta:
{ "name": "projects/
PROJECT_ID
/topics/TOPIC_ID
" }
Tokens de ID
Usa el servidor de metadatos de Compute para obtener un token de identidad con una audiencia específica:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
--header "Metadata-Flavor: Google"
Donde AUDIENCE
es la audiencia de JWT solicitada.
En el caso de los servicios de Cloud Run, la audiencia debe ser la URL del servicio que estás invocando o una audiencia personalizada, como un dominio personalizado, configurada para el servicio.
https://service.domain.com
En el caso de otros recursos, es probable que se trate del ID de cliente de OAuth de un recurso protegido por IAP:
1234567890.apps.googleusercontent.com
Pasos siguientes
- Configura la identidad de servicio para servicios o trabajos.
- Consulta cómo gestionar el acceso o autenticar de forma segura a desarrolladores, servicios y usuarios finales a tus servicios.
- Para ver un tutorial completo sobre una aplicación que usa la identidad de servicio para minimizar los riesgos de seguridad, consulta el tutorial sobre cómo proteger los servicios de Cloud Run.