Esta página describe cómo usar cuentas de servicio para permitir que las aplicaciones que se ejecutan en sus instancias de máquina virtual (VM) se autentiquen en Google Cloud API y autorizar el acceso a los recursos.
Para usar cuentas de servicio para la autenticación, primero debe asegurarse de que su VM esté configurada para usar una cuenta de servicio. Para hacer esto complete uno de los siguientes procedimientos:
- Para configurar una cuenta de servicio durante la creación de VM, consulte Crear una VM que utilice una cuenta de servicio administrada por el usuario .
- Para configurar una cuenta de servicio en una máquina virtual existente, consulte Cambiar la cuenta de servicio adjunta .
Antes de comenzar
- Revise la descripción general de las cuentas de servicio .
- Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:
Para usar las muestras de Python de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
- Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.
Para obtener más información, consulta Set up authentication for a local development environment.
Descripción general
Después de haber configurado una instancia de VM para que se ejecute con una cuenta de servicio, una aplicación que se ejecuta en la instancia de VM puede usar uno de los siguientes métodos de autenticación:
- Para la mayoría de las aplicaciones, elija una de las siguientes:
- Para aplicaciones que requieren un token de acceso OAuth2, solicite y utilice tokens de acceso directamente desde el servidor de metadatos.
Autenticar aplicaciones utilizando credenciales de cuenta de servicio
Después de configurar una instancia para que se ejecute como una cuenta de servicio, puede usar las credenciales de la cuenta de servicio para autenticar las aplicaciones que se ejecutan en la instancia.
Autenticar aplicaciones con una biblioteca cliente
Las bibliotecas cliente pueden utilizar las credenciales predeterminadas de la aplicación para autenticarse con las API de Google y enviar solicitudes a esas API. Las credenciales predeterminadas de la aplicación permiten que las aplicaciones obtengan automáticamente credenciales de múltiples fuentes para que puedas probar tu aplicación localmente y luego 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, consulte Proporcionar credenciales a las credenciales predeterminadas de la aplicación .
En este ejemplo, se utiliza la biblioteca cliente de Python para autenticarse y realizar una solicitud a la API de Cloud Storage para enumerar los depósitos de un proyecto. El ejemplo utiliza el siguiente procedimiento:
- Obtenga las credenciales de autenticación necesarias para la API de Cloud Storage e inicialice el servicio de Cloud Storage con el método
build()
y las credenciales. - Enumerar depósitos en Cloud Storage.
Puedes ejecutar este ejemplo en una instancia que tenga acceso para administrar depósitos en Cloud Storage.
Autenticar aplicaciones directamente con tokens de acceso
Para la mayoría de las aplicaciones, puede autenticarse utilizando las Credenciales predeterminadas de la aplicación , que encuentra las credenciales y administra los tokens por usted. Sin embargo, si tu aplicación requiere que proporciones un token de acceso OAuth2, 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 utilizar estos tokens de acceso para autenticar sus aplicaciones. Por ejemplo, puede usar curl
para crear una solicitud simple o usar un lenguaje de programación como Python para obtener más flexibilidad.
rizo
Para usar curl
para solicitar un token de acceso y enviar una solicitud a una API:
En la instancia donde se ejecuta su aplicación, consulte 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:
{ "access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_QtAS08i85nHq39HE3C2LTrCARA", "expires_in":3599, "token_type":"Bearer" }
Para las solicitudes de API, debe incluir el valor
access_token
, no la respuesta completa. Si tiene instalado el procesador JSON de línea de comandos jq, puede 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'`
Copie el valor de la propiedad
access_token
de la respuesta y utilícelo para enviar solicitudes a la API. Por ejemplo, la siguiente solicitud imprime una lista de instancias en su proyecto desde una zona determinada:$ curl https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances \ -H "Authorization":"Bearer ACCESS_TOKEN"
Reemplace lo siguiente:
-
PROJECT_ID
: el ID del proyecto para esta solicitud. -
ZONE
: la zona desde la que enumerar las máquinas virtuales. -
ACCESS_TOKEN
: el valor del token de acceso que obtuviste en el paso anterior.
Para obtener información sobre los parámetros que puede establecer en su solicitud, consulte la documentación de Parámetros del sistema .
-
Pitón
Este ejemplo demuestra cómo solicitar un token para acceder a la API de Cloud Storage en una aplicación Python. El ejemplo utiliza el siguiente procedimiento:
- Solicite un token de acceso al servidor de metadatos.
- Extraiga el token de acceso de la respuesta del servidor.
- Utilice el token de acceso para realizar una solicitud a Cloud Storage.
- Si la solicitud tiene éxito, el script imprime la respuesta.
Los tokens de acceso caducan después de un corto período de tiempo. El servidor de metadatos almacena en caché los tokens de acceso hasta que les quedan 5 minutos antes de que caduquen. Si los tokens no se pueden almacenar en caché, las solicitudes que superen las 50 consultas por segundo podrían tener una velocidad limitada. Sus aplicaciones deben tener un token de acceso válido para que sus llamadas a la API se realicen correctamente.
Herramientas de autenticación en una instancia usando 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 otorgados a la cuenta de servicio. Específicamente, si otorgas las funciones correctas a la cuenta de servicio, puedes usar la CLI de gcloud desde tus instancias sin tener que usar gcloud auth login
.
Este reconocimiento de cuenta de servicio ocurre automáticamente y se aplica solo a la CLI de gcloud que se incluye con la instancia. Si crea nuevas herramientas o agrega herramientas personalizadas, debe autorizar su aplicación mediante una biblioteca cliente o mediante tokens de acceso directamente en su aplicación .
Para aprovechar el reconocimiento automático de la cuenta de servicio, otorgue las funciones de IAM adecuadas a la cuenta de servicio y adjunte la cuenta de servicio a la instancia . Por ejemplo, si otorgas a una cuenta de servicio la función roles/storage.objectAdmin
, la CLI de gcloud puede administrar y acceder automáticamente a los objetos de Cloud Storage.
Del mismo modo, si habilita roles/compute.instanceAdmin.v1
para la cuenta de servicio, la herramienta gcloud compute
puede administrar instancias automáticamente.
¿Qué sigue?
- Autenticar cargas de trabajo en otras cargas de trabajo a través de mTLS .
- Obtenga más información sobre las cuentas de servicio .
- Obtenga más información sobre los roles y permisos de IAM de Compute Engine .
- Obtenga más información sobre las mejores prácticas para trabajar con cuentas de servicio .
Pruébalo por ti mismo
Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de Compute Engine en escenarios del mundo real. Los nuevos clientes también obtienen $300 en créditos gratuitos para ejecutar, probar e implementar cargas de trabajo.
Prueba Compute Engine gratis