En esta página se describe cómo usar cuentas de servicio para permitir que las aplicaciones que se ejecutan en tus instancias de máquina virtual (VM) se autentiquen en las APIs de Google Cloud y autoricen el acceso a los recursos.
Para usar cuentas de servicio en la autenticación, primero debes asegurarte de que tu máquina virtual esté configurada para usar una cuenta de servicio. Para ello, completa uno de los siguientes procedimientos:
- Para configurar una cuenta de servicio durante la creación de una VM, consulta el artículo Crear una VM que use una cuenta de servicio gestionada por el usuario.
- Para configurar una cuenta de servicio en una VM que ya tengas, consulta Cambiar la cuenta de servicio vinculada.
Antes de empezar
- Consulta el artículo Resumen de las cuentas de servicio.
-
Si aún no lo has hecho, configura la autenticación.
La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:
Para usar las Python muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
Instala Google Cloud CLI.
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
Para obtener más información, consulta Set up authentication for a local development environment.
Información general
Una vez que hayas configurado una instancia de VM para que se ejecute con una cuenta de servicio, una aplicación que se ejecute en la instancia de VM podrá usar uno de los siguientes métodos para autenticarse:
- En la mayoría de las aplicaciones, elige una de las siguientes opciones:
- En el caso de las aplicaciones que requieren un token de acceso OAuth2, solicita y usa tokens de acceso directamente desde el servidor de metadatos.
Autenticar aplicaciones con credenciales de cuenta de servicio
Después de configurar una instancia para que se ejecute como una cuenta de servicio, puedes usar las credenciales de la cuenta de servicio para autenticar las aplicaciones que se ejecutan en la instancia.
Autenticar aplicaciones con una biblioteca de cliente
Las bibliotecas de cliente pueden usar las credenciales predeterminadas de la aplicación para autenticarse en las APIs de Google y enviar solicitudes a esas APIs. Las credenciales predeterminadas de la aplicación permiten que las aplicaciones obtengan automáticamente credenciales de varias fuentes para que puedas probar tu aplicación de forma local y, a continuación, implementarla en una instancia de Compute Engine sin cambiar el código de la aplicación.
Para obtener información sobre cómo configurar las credenciales predeterminadas de la aplicación, consulta Proporcionar credenciales a las credenciales predeterminadas de la aplicación.
En este ejemplo se usa la biblioteca de cliente de Python para autenticar y hacer una solicitud a la API Cloud Storage con el fin de enumerar los contenedores de un proyecto. En el ejemplo se sigue el siguiente procedimiento:
- Obtén las credenciales de autenticación necesarias para la API de Cloud Storage
e inicializa el servicio de Cloud Storage con el método
build()
y las credenciales. - Lista los segmentos de Cloud Storage.
Puedes ejecutar este ejemplo en una instancia que tenga acceso para gestionar segmentos en Cloud Storage.
Autenticar aplicaciones directamente con tokens de acceso
En la mayoría de las aplicaciones, puedes autenticarte mediante las credenciales de aplicación predeterminadas, que buscan credenciales y gestionan tokens por ti. Sin embargo, si tu aplicación requiere que proporciones un token de acceso de OAuth 2.0, Compute Engine te permite obtener un token de acceso de su servidor de metadatos para usarlo en tu aplicación.
Hay varias opciones para obtener y usar estos tokens de acceso para autenticar tus aplicaciones. Por ejemplo, puedes usar curl
para crear una solicitud sencilla o usar un lenguaje de programación como Python para tener más flexibilidad.
cURL
Para usar curl
para solicitar un token de acceso y enviar una solicitud a una API, sigue estos pasos:
En la instancia en la que se ejecuta tu aplicación, consulta el servidor de metadatos para obtener un token de acceso ejecutando el siguiente comando:
$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ -H "Metadata-Flavor: Google"
La solicitud devuelve una respuesta similar a la siguiente:
{ "access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_QtAS08i85nHq39HE3C2LTrCARA", "expires_in":3599, "token_type":"Bearer" }
En las solicitudes de la API, debe incluir el valor
access_token
, no toda la respuesta. Si tienes instalado el procesador JSON de línea de comandos jq, puedes usar el siguiente comando para extraer el valor del token de acceso de la respuesta:$ ACCESS_TOKEN=`curl \ "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ -H "Metadata-Flavor: Google" | jq -r '.access_token'`
Copia el valor de la propiedad
access_token
de la respuesta y úsalo para enviar solicitudes a la API. Por ejemplo, la siguiente solicitud imprime una lista de instancias de tu proyecto de una zona determinada:$ curl https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances \ -H "Authorization":"Bearer ACCESS_TOKEN"
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto de esta solicitud.ZONE
: la zona de la que se van a enumerar las VMs.ACCESS_TOKEN
: el valor del token de acceso que has obtenido en el paso anterior.
Para obtener información sobre los parámetros que puede definir en su solicitud, consulte la documentación sobre los parámetros del sistema.
Python
En este ejemplo se muestra cómo solicitar un token para acceder a la API Cloud Storage en una aplicación Python. En el ejemplo se usa el siguiente procedimiento:
- Solicita un token de acceso al servidor de metadatos.
- Extrae el token de acceso de la respuesta del servidor.
- Usa el token de acceso para hacer una solicitud a Cloud Storage.
- Si la solicitud se realiza correctamente, la secuencia de comandos imprime la respuesta.
Los tokens de acceso caducan al cabo de un breve periodo. El servidor de metadatos almacena en caché los tokens de acceso hasta que les queden 5 minutos antes de caducar. Si no se pueden almacenar en caché los tokens, es posible que se limite la frecuencia de las solicitudes que superen las 50 consultas por segundo. Tus aplicaciones deben tener un token de acceso válido para que sus llamadas a la API se realicen correctamente.
Autenticar herramientas en una instancia mediante una cuenta de servicio
Algunas aplicaciones pueden usar comandos de la CLI de gcloud, que se incluye de forma predeterminada en la mayoría de las imágenes de Compute Engine. La CLI de gcloud reconoce automáticamente la cuenta de servicio de una instancia y los permisos relevantes concedidos a la cuenta de servicio. En concreto, si asignas los roles correctos a la cuenta de servicio, puedes usar la interfaz de línea de comandos gcloud desde tus instancias sin tener que usar gcloud auth login
.
El reconocimiento de la cuenta de servicio se produce automáticamente y solo se aplica a la CLI de gcloud incluida en la instancia. Si creas herramientas nuevas o añades herramientas personalizadas, debes autorizar tu aplicación mediante una biblioteca de cliente o usando tokens de acceso directamente en tu aplicación.
Para aprovechar el reconocimiento automático de cuentas de servicio, asigna los roles de gestión de identidades y accesos adecuados a la cuenta de servicio y asocia la cuenta de servicio a la instancia.
Por ejemplo, si asignas el rol roles/storage.objectAdmin
a una cuenta de servicio, la CLI de gcloud puede gestionar y acceder automáticamente a objetos de Cloud Storage.
Del mismo modo, si habilitas roles/compute.instanceAdmin.v1
en la cuenta de servicio, la herramienta gcloud compute
podrá gestionar las instancias automáticamente.
Siguientes pasos
- Autenticar cargas de trabajo en otras cargas de trabajo mediante mTLS .
- Consulta más información sobre las cuentas de servicio.
- Consulta más información sobre los roles y permisos de gestión de identidades y accesos de Compute Engine.
- Consulta más información sobre las prácticas recomendadas para trabajar con cuentas de servicio.
Pruébalo
Si es la primera vez que utilizas Google Cloud, crea una cuenta para evaluar el rendimiento de Compute Engine en situaciones reales. Los nuevos clientes también reciben 300 USD en crédito gratuito para ejecutar, probar y desplegar cargas de trabajo.
Probar Compute Engine gratis