Roles para la autenticación de cuentas de servicio

Las principales pueden usar cuentas de servicio para autenticarse de diferentes maneras. Cada tipo de autenticación requiere que la principal tenga permisos específicos de Identity and Access Management (IAM) en la cuenta de servicio.

En esta página, se describen los roles que puedes otorgar a las principales para permitirles actuar en nombre de cuentas de servicio o conectar cuentas de servicio a los recursos. También se describen los permisos que necesitas en situaciones comunes.

Para obtener información sobre las diferentes formas de autenticarse con una cuenta de servicio, consulta Credenciales de la cuenta de servicio y Robo de identidad de la cuenta de servicio.

Roles de la cuenta de servicio

En esta sección, se describen los roles que permiten a las principales autenticarse con cuentas de servicio. Para obtener información sobre cómo otorgar y revocar estos roles, consulta Administra el acceso a las cuentas de servicio.

Función de usuario de cuenta de servicio

El rol del usuario de cuenta de servicio (roles/iam.serviceAccountUser) permite que una principal adjunte una cuenta de servicio a un recurso. Cuando el código que se ejecuta en ese recurso necesita autenticarse, puede obtener credenciales para la cuenta de servicio conectada.

Este rol no permite que las principales creen credenciales de corta duración para cuentas de servicio o usen la marca --impersonate-service-account en Google Cloud CLI. Para completar estas tareas, necesitas el rol de creador de tokens de cuentas de servicio en la cuenta de servicio.

Función de creador de tokens de cuenta de servicio

El rol de creador de tokens de cuentas de servicio (roles/iam.serviceAccountTokenCreator) permite que las principales creen credenciales de corta duración para una cuenta de servicio.

El rol de creador de tokens de cuentas de servicio te permite crear los siguientes tipos de credenciales de corta duración:

  • Tokens de acceso de OAuth 2.0, que puedes usar para autenticar con las API de Google.
  • Tokens de ID de OpenID Connect (OIDC)
  • Tokens web JSON (JWT) firmados y BLOB binarios

El rol de creador de tokens de cuenta de servicio también permite que las principales usen la marca --impersonate-service-account para la CLI de gcloud. Cuando usas esta marca, lgcloud CLI crea credenciales de corta duración para la cuenta de servicio automáticamente.

Los permisos de la función incluyen lo siguiente:

  • iam.serviceAccounts.getAccessToken: Te permite crear tokens de acceso de OAuth 2.0.
  • iam.serviceAccounts.getOpenIdToken: Te permite crear tokens de ID de OpenID Connect (OIDC).
  • iam.serviceAccounts.implicitDelegation: Permite que las cuentas de servicio obtengan tokens en una cadena de delegación.
  • iam.serviceAccounts.signBlob: Te permite firmar BLOB binarios.
  • iam.serviceAccounts.signJwt: Te permite firmar JWT.

Creador de tokens de identidad de OpenID Connect para cuentas de servicio

El rol de creador de tokens de identidad de OpenID Connect para cuentas de servicio (roles/iam.serviceAccountOpenIdTokenCreator) permite que las principales creen tokens de ID de OIDC de corta duración. Si solo necesitas crear tokens de ID de OIDC, usa este rol. Si necesitas crear otros tipos de tokens, usa el rol de Creador de tokens de cuenta de servicio.

El rol incluye el permiso iam.serviceAccounts.getOpenIdToken, que te permite crear un token de ID de OIDC.

Rol del usuario de Workload Identity

El rol del usuario de Workload Identity (roles/iam.workloadIdentityUser) permite que las principales actúen en nombre de cuentas de servicio desde cargas de trabajo de GKE.

Los permisos de la función incluyen lo siguiente:

  • iam.serviceAccounts.getAccessToken: Te permite crear tokens de acceso de OAuth 2.0.
  • iam.serviceAccounts.getOpenIdToken: Te permite crear tokens de ID de OpenID Connect (OIDC).

Permisos de cuentas de servicio para situaciones comunes

Las cuentas de servicio se pueden usar en muchas situaciones diferentes, y cada una de ellas requiere permisos específicos. En esta sección, se describen situaciones comunes y los permisos necesarios.

Conecta cuentas de servicio a recursos

Si deseas iniciar un trabajo de larga duración que se autentica como una cuenta de servicio, debes conectar una cuenta de servicio al recurso que ejecutará el trabajo.

Permisos:

  • Permisos para crear el recurso
  • iam.serviceAccounts.actAs

Busca las funciones que incluyen estos permisos en la lista de funciones de los permisos.

Existen varios recursos diferentes de Google Cloud que pueden ejecutar trabajos de larga duración como cuentas de servicio. Algunos ejemplos de estos recursos incluyen los siguientes:

  • VMs de Compute Engine
  • Apps de App Engine
  • Funciones de Cloud Run

Cuando creas estos recursos, tienes la opción de conectar una cuenta de servicio. Esta cuenta de servicio actúa como la identidad del recurso.

Para crear un recurso y conectar una cuenta de servicio, necesitas permisos para crear ese recurso y conectar la cuenta de servicio a los recursos. Permiso para conectar cuentas de servicio a recursos que proporciona cualquier rol que incluya el permiso iam.serviceAccounts.actAs, por ejemplo, el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser).

Después de crear el recurso y conectarle una cuenta de servicio, puedes iniciar un trabajo de larga duración en el recurso. El trabajo se ejecuta como la cuenta de servicio conectada al recurso y usa esa cuenta de servicio para autorizar solicitudes a las API de Google Cloud.

Para obtener más información sobre cómo conectar cuentas de servicio a recursos, consulta Conecta una cuenta de servicio a un recurso.

Actúa en nombre de una cuenta de servicio

Permisos:

  • iam.serviceAccounts.getAccessToken
  • iam.serviceAccounts.signBlob
  • iam.serviceAccounts.signJwt
  • iam.serviceAccounts.implicitDelegation

Funciones:

  • roles/iam.serviceAccountTokenCreator (Creador de tokens de cuenta de servicio)

Una vez que se le otorgan los permisos necesarios, un usuario (o cualquier otra cuenta de servicio) puede usar la identidad de la cuenta de servicio en algunas situaciones comunes.

Primero, el usuario puede autenticarse como la cuenta de servicio. Por ejemplo, pueden obtener credenciales de corta duración para la cuenta de servicio mediante el permiso iam.serviceAccounts.getAccessToken y a través de una llamada al método generateAccessToken(). También pueden usar la marca --impersonate-service-account de gcloud CLI para suplantar la identidad de la cuenta de servicio. Cuando un usuario se autentica como una cuenta de servicio, puede ejecutar comandos en Google Cloud y acceder a todos los recursos a los que tiene acceso la cuenta de servicio.

En segundo lugar, el usuario puede obtener artefactos firmados por la clave privada administrada por Google de la cuenta de servicio mediante el permiso iam.serviceAccounts.signBlob y a través de una llamada a los métodos signBlob() o signJwt(). La clave privada administrada por Google siempre se mantiene guardada y nunca se expone directamente. signBlob() permite la firma de cargas útiles arbitrarias (como URLs firmadas por Cloud Storage), mientras que signJwt() solo permite firmar JWT con el formato correcto.

Por último, el usuario puede suplantar la identidad de la cuenta de servicio sin tener que recuperar una credencial para la cuenta de servicio. Este es un caso de uso avanzado y solo se admite para el acceso programático mediante el método generateAccessToken(). En situaciones con al menos 3 cuentas de servicio, como A, B y C: la cuenta de servicio A puede obtener un token de acceso para la cuenta de servicio C si a la cuenta de servicio A se le otorga el permiso iam.serviceAccounts.implicitDelegation en B y B recibe el permiso iam.serviceAccounts.getAccessToken en C.

Genera tokens de ID de OpenID Connect (OIDC)

Permisos:

  • iam.serviceAccounts.getOpenIdToken

Funciones:

  • roles/iam.serviceAccountOpenIdTokenCreator (Creador de tokens de identidad de OpenID Connect para cuentas de servicio)

Un usuario (o servicio) puede generar un token JWT compatible con OpenID Connect (OIDC) firmado por el proveedor de OIDC de Google (accounts.google.com) que represente la identidad de la cuenta de servicio que tiene el permiso iam.serviceAccounts.getOpenIdToken.

La mayoría de las APIs de Google no aceptan directamente estos tokens sin que tu organización implemente una federación de identidades adicional para otorgar acceso a Google.

Genera claves privadas externas

Permisos:

  • iam.serviceAccountKeys.create

Funciones:

  • roles/editor (Editor)
  • Administrador de claves de cuentas de servicio (roles/iam.serviceAccountKeyAdmin)

Un usuario o servicio puede generar material de la clave privada externa (RSA) que se puede usar para autenticarse directamente en Google como la cuenta de servicio. Este material de la clave se puede usar con bibliotecas de credenciales predeterminadas de la aplicación (ADC) o con el comando gcloud auth activate-service-account. Cualquier persona que obtenga acceso al material de la clave tendrá acceso completo a todos los recursos a los que tenga acceso la cuenta de servicio. Este material de la clave privada debe tratarse con mucho cuidado y debe considerarse menos seguro cuanto más tiempo exista. Por lo tanto, rotar el material de la clave privada es fundamental para mantener una seguridad sólida.

Permisos de la cuenta de servicio que habilitan otras funciones

Algunos permisos para las credenciales de la cuenta de servicio habilitan varias funciones. Por ejemplo, iam.serviceAccounts.signBlob y iam.serviceAccounts.signJwt también permiten que las principales generen tokens de acceso y tokens de ID para una cuenta de servicio. Además, como iam.serviceAccounts.signBlob permite que los principales firmen cualquier tipo de datos, también permite que firmen JWT.

Antes de agregar cualquiera de estos permisos a los roles personalizados, asegúrate de comprender qué acciones habilita cada permiso.

En la siguiente tabla, se muestran las operaciones habilitadas por estos permisos:

Permiso Operaciones habilitadas
iam.serviceAccounts.getAccessToken Obtén un token de acceso para la cuenta de servicio
iam.serviceAccounts.getOpenIdToken Obtén un token de ID para la cuenta de servicio
iam.serviceAccounts.signJwt
iam.serviceAccounts.signBlob
  • Firma cualquier tipo de BLOB, incluidos los JWT
  • Obtén un token de acceso o de ID para la cuenta de servicio con un token del portador de JWT.

Prácticas recomendadas para otorgar roles en cuentas de servicio

En los casos en los que una cuenta de servicio tiene permisos para llevar a cabo operaciones con muchos privilegios, ten cuidado cuando otorgues el rol de usuario de cuenta de servicio o sus permisos incluidos a un usuario en esa cuenta de servicio.

Las cuentas de servicio representan la seguridad a nivel de servicio. La seguridad del servicio se determina según las personas que tienen funciones de IAM que permiten administrar y usar las cuentas de servicio, y las personas que tienen claves de cuentas de servicio para esas cuentas de servicio. Las siguientes son recomendaciones para garantizar la seguridad:

  • Usa la API de IAM para auditar las cuentas de servicio, las claves y las políticas en esas cuentas de servicio.
  • Si tus cuentas de servicio no necesitan claves de cuenta de servicio, inhabilitalas o bórralas.
  • Si los usuarios no necesitan permiso para administrar o usar cuentas de servicio, quítalos de la política de permisos aplicable.
  • Comprende cómo otorgar ciertos permisos a las cuentas de servicio puede habilitar otras funciones de manera eficaz.
  • Asegúrate de que las cuentas de servicio tengan la menor cantidad de permisos posible. Usa las cuentas de servicio predeterminadas con precaución, ya que se les otorga de forma automática la función de editor (roles/editor) en el proyecto.

Para obtener más información sobre las prácticas recomendadas, consulta Prácticas recomendadas para trabajar con cuentas de servicio.

Pruébalo tú mismo

Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.

Comenzar gratis