Introducción a la identidad del servicio

En esta página, se describen las dos identidades de Cloud Run y cómo Cloud Run usa la identidad de servicio para llamar a las bibliotecas cliente de Cloud. Algunos ejemplos de bibliotecas cliente de Cloud son Cloud Storage, Firestore, Cloud SQL, Pub/Sub y Cloud Tasks. Esta página está destinada a administradores, operadores o desarrolladores que administran las políticas de la organización y el acceso de los usuarios, o cualquier persona que desee obtener información sobre estos temas.

Identidades de Cloud Run

Para usar Cloud Run, Google Cloud requiere que el usuario de Cloud Run y la instancia de Cloud Run tengan una identidad cada uno.

  • La identidad del usuario de Cloud Run se conoce como la cuenta de implementador de Cloud Run. Cuando administras una revisión o un trabajo, usas esta identidad para realizar solicitudes a la API de Cloud Run Admin.
  • La identidad de la instancia de Cloud Run se conoce como la identidad del servicio de Cloud Run. Cuando el servicio o trabajo de Cloud Run interactúa con las bibliotecas cliente de Cloud, usas esta identidad para realizar solicitudes a las APIs de Google Cloud desde Cloud Run.

Para acceder y realizar solicitudes a las APIs de Google Cloud, cada identidad debe tener los permisos adecuados otorgados a ellas en Identity and Access Management (IAM).

Llama a la API de Cloud Run Admin con la cuenta del implementador

Puedes llamar a la API de Cloud Run Admin desde Cloud Run con la cuenta de implementador de Cloud Run. La cuenta del implementador puede ser una cuenta de usuario o una cuenta de servicio, y representa la cuenta que accedió al entorno de Google Cloud.

Cuando la cuenta del implementador usa Cloud Run, IAM verifica si la cuenta del implementador 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 de Cloud Run Admin para implementar una revisión nueva desde la consola de Google Cloud:

Llama a la API de Cloud Run Admin desde la consola de Google Cloud.
Figura 1. Un usuario usa la consola de Google Cloud para implementar una revisión nueva mediante el envío de una solicitud con un token de acceso a la API de Cloud Run Admin. IAM usa ese token de acceso para verificar que la cuenta de usuario esté autenticada para acceder a la API de Cloud Run Admin antes de realizar la operación.

Llama a las APIs de Google Cloud con la identidad del servicio

Cuando una instancia de Cloud Run interactúa con bibliotecas cliente de Cloud a través del código de la aplicación o funciones integradas, como las integraciones de Cloud Run o las activaciones de volúmenes de Cloud Storage, el entorno de Google Cloud usa las credenciales predeterminadas de la aplicación (ADC) para detectar automáticamente si la identidad del servicio de Cloud Run es autenticado 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 implementas una revisión o ejecutas un trabajo.

Una cuenta de servicio que se usa como cuenta de implementador solo se usará como la identidad del servicio si configuras la misma cuenta de servicio en la configuración de Cloud Run.

En el resto de esta guía, se describe cómo un servicio o trabajo de Cloud Run usa la identidad de servicio para llamar y acceder a los servicios y las APIs de Google. Si deseas obtener más información sobre la configuración de identidad del servicio, consulta las páginas de configuración de identidad del servicio para servicios y trabajos.

Tipos de cuentas de servicio para la identidad de servicio

Cuando tu instancia de Cloud Run realiza llamadas a las APIs de Google Cloud para realizar las operaciones que necesita, Cloud Run usa de forma automática una cuenta de servicio como la identidad del servicio. Los dos tipos de cuentas de servicio que se pueden usar como identidad de servicio son los siguientes:

  • Cuenta de servicio administrada por el usuario (recomendado): Crea esta cuenta de servicio de forma manual y determina el conjunto de permisos más mínimo que la cuenta de servicio necesita para acceder a recursos específicos de Google Cloud. La cuenta de servicio administrada por el usuario tiene el formato SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • Cuenta de servicio predeterminada de Compute Engine: Cloud Run proporciona de forma automática la cuenta de servicio predeterminada de Compute Engine como la identidad del servicio predeterminada. La cuenta de servicio predeterminada de Compute Engine tiene el formato PROJECT_NUMBER-compute@developer.gserviceaccount.com.

Evita la cuenta de servicio predeterminada cuando configures la identidad del servicio

Según la configuración predeterminada, la cuenta de servicio predeterminada de Compute Engine se crea automáticamente. Si no especificas una cuenta de servicio cuando se crea el servicio o el trabajo de Cloud Run, Cloud Run usa esta cuenta de servicio.

El propósito de la cuenta de servicio predeterminada es ayudar a que tu instancia de Cloud Run se ponga en funcionamiento sin errores de permisos. A este principal se le otorga el rol de editor, que otorga permisos de lectura y escritura en todos los recursos de tu proyecto de Google Cloud. Para seguir el principio de privilegio mínimo, Google recomienda que crees una cuenta de servicio nueva y le otorgues a la cuenta de servicio el conjunto de permisos más mínimo para acceder a recursos específicos de Google Cloud.

Cómo funciona la identidad del servicio

Cuando tu código llama a las bibliotecas cliente de Cloud o realiza solicitudes a ellas, sucede lo siguiente:

  1. Las bibliotecas cliente detectan que se realiza una solicitud a una API de Google Cloud o a bibliotecas cliente de Cloud y solicitan un token de acceso de OAuth 2.0 para la identidad del servicio desde el servidor de metadatos de la instancia.
  2. El servidor de metadatos de la instancia proporciona un token de acceso de IAM para la cuenta de servicio que se configura como la identidad del servicio.
  3. La solicitud a la API de Google Cloud se envía con un token de acceso de OAuth 2.0.
  4. IAM verifica la identidad del servicio a la que se hace referencia en el token de acceso para obtener los permisos necesarios y verifica las vinculaciones de políticas antes de reenviar la llamada al extremo de la API.
  5. La API de Google Cloud realiza la operación.
Llama a la API de Google Cloud desde Cloud Run.
Figura 1. Cloud Run genera un token de acceso desde el servidor de metadatos, e IAM lo usa para verificar que la identidad del servicio de Cloud Run asignada se autentique para acceder a las APIs de Google Cloud.

Genera un token de acceso para la solicitud de Cloud Run para llamar a las APIs de Google Cloud

Si tu código de Cloud Run usa bibliotecas cliente de Cloud, configura la identidad de servicio en Cloud Run mediante la asignación de una cuenta de servicio en la implementación o ejecución. Esto permite que la biblioteca adquiera de forma automática un token de acceso para autenticar la solicitud de tu código. Para asignar una cuenta de servicio como la identidad del servicio, consulta las siguientes guías:

Sin embargo, si usas tu propio código personalizado o necesitas realizar solicitudes de manera programática, puedes usar el servidor de metadatos directamente para recuperar manualmente los tokens de identidad y 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 cargas de trabajo que se ejecutan en Google Cloud.

Recupera los tokens de ID y acceso con el servidor de metadatos

Los dos tipos de tokens que puedes recuperar con el servidor de metadatos son los siguientes:

Para recuperar un token, sigue las instrucciones en la pestaña correspondiente para el tipo de token que usas:

Tokens de acceso

Por ejemplo, si deseas crear un tema de Pub/Sub, usa el método projects.topics.create.

  1. Usa el servidor de metadatos de Compute para recuperar un token de acceso:

    curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \
        --header "Metadata-Flavor: Google"
    

    Este extremo muestra una respuesta JSON con un atributo access_token.

  2. En tu solicitud de 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: Bearer ACCESS_TOKEN
    

    Aquí:

    • PROJECT_ID es el ID del proyecto.
    • TOPIC_ID es el ID del tema.
    • ACCESS_TOKEN es el token de acceso que recuperaste en el paso anterior.

    Respuesta:

    {
        "name": "projects/PROJECT_ID/topics/TOPIC_ID"
    }
    

Tokens de ID

Usa el servidor de metadatos de Compute para recuperar un token de identidad con un público específico:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
    --header "Metadata-Flavor: Google"

En el ejemplo anterior, AUDIENCE es el JWT Audience solicitado.

Para los servicios de Cloud Run, el público debe ser la URL del servicio que invocas o un público personalizado, como un dominio personalizado, configurado para el servicio.

https://service.domain.com

Para otros recursos, es probable que sea el ID de cliente de OAuth de un recurso protegido por IAP:

1234567890.apps.googleusercontent.com

Próximos pasos