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:
- VM de Compute Engine
- Aplicaciones de App Engine
- Cloud Run functions
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 actuar como 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 API de Google no aceptan directamente estos tokens sin que tu organización implemente una federación de identidades adicional para otorgar acceso a Google. Existen algunas excepciones, por ejemplo, Identity-Aware Proxy, que permite el acceso basado en OIDC a aplicaciones ejecutadas por el usuario.
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 |
|
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