En esta página, se describe cómo funcionan las cuentas de servicio con Compute Engine.
Para obtener información sobre cómo crear y usar cuentas de servicio, lee la documentación Crea y habilita cuentas de servicio para instancias.
Para obtener información sobre las prácticas recomendadas a fin de crear y administrar cuentas de servicio, lee la documentación Prácticas recomendadas para trabajar con cuentas de servicio.
Pruébalo tú mismo
Si es la primera vez que usas Google Cloud, crea una cuenta para evaluar el rendimiento de Compute Engine en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
Probar Compute Engine gratis¿Qué es una cuenta de servicio?
Una cuenta de servicio es un tipo especial de cuenta que usa una carga de trabajo de aplicación o procesamiento, en lugar de una persona. Las cuentas de servicio se administran mediante la administración de identidades y accesos (IAM).
Cómo usa Compute Engine las cuentas de servicio
Compute Engine usa dos tipos de cuentas de servicio:
Se puede conectar una cuenta de servicio administrada por el usuario a una instancia de Compute Engine para proporcionar credenciales a las aplicaciones que se ejecutan en la instancia. La aplicación usa estas credenciales para la autenticación en las API de Google Cloud y la autorización a fin de acceder a los recursos de Google Cloud. Solo las cuentas de servicio administradas por el usuario se pueden conectar a una instancia, y una instancia solo puede tener una cuenta de servicio conectada. Puedes cambiar la cuenta de servicio que está conectada a una instancia en el momento de la creación o posterior.
La instancia usa las cuentas de servicio administradas por Google para acceder a los procesos internos en tu nombre.
Además, puedes crear reglas de firewall que permitan o denieguen el tráfico hacia y desde instancias según la cuenta de servicio que asocies con cada instancia.
Cómo se determina la autorización
La autorización proporcionada a las aplicaciones alojadas en una instancia de Compute Engine está limitada por dos configuraciones distintas: los roles otorgadas a la cuenta de servicio conectada y los permisos de acceso que configuraste en la instancia. Ambas configuraciones deben permitir el acceso antes de que la aplicación que se ejecuta en la instancia pueda acceder a un recurso.
Supongamos que tienes una app que lee y escribe archivos en Cloud Storage. Primero debe autenticarse en la API de Cloud Storage. Puedes crear una instancia con el permiso cloud-platform
y adjuntar una cuenta de servicio a la instancia. Luego, puedes otorgar funciones de IAM a la cuenta de servicio para otorgarle a tu app acceso a los recursos adecuados. Tu app usa las credenciales de la cuenta de servicio para autenticarse en la API de Cloud Storage sin incorporar ninguna clave secreta ni credencial de usuario en tu instancia, imagen o código de app. Tu app también usa la autorización que proporcionan las funciones de IAM en la cuenta de servicio para acceder a los recursos.
Para obtener más información sobre la autorización, consulta Autorización en esta página.
Cuentas de servicio administradas por el usuario
Las cuentas de servicio administradas por el usuario incluyen cuentas de servicio nuevas que creas explícitamente y la cuenta de servicio predeterminada de Compute Engine.
Cuentas de servicio nuevas
Usa IAM para crear y administrar tus propias cuentas de servicio. Después de crear una cuenta, otórgale roles de IAM y configura instancias para que se ejecuten como cuenta de servicio. Las aplicaciones que se ejecutan en instancias con la cuenta de servicio adjunta pueden usar las credenciales de la cuenta para realizar solicitudes a otras API de Google.
Si deseas crear y configurar una cuenta de servicio nueva, consulta la documentación Crea y habilita cuentas de servicio para instancias.
Cuenta de servicio predeterminada de Compute Engine
Los proyectos nuevos que tengan habilitada la API de Compute Engine tienen una cuenta de servicio predeterminada de Compute Engine, que tiene el siguiente correo electrónico:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
La cuenta de servicio predeterminada de Compute Engine tiene los siguientes atributos:
- Se crean de forma automática, con un nombre y una dirección de correo electrónico generados automáticamente, y se agregan a tu proyecto cuando habilitas la API de Compute Engine. Tienes el control total de la cuenta.
- Se otorga de forma automática el rol de editor básica de IAM, si no inhabilitaste este comportamiento. Puedes modificar los roles de la cuenta de servicio para controlar el acceso de la cuenta de servicio a las APIs de Google.
- Vinculada de forma predeterminada a todas las VMs que creaste mediante Google Cloud CLI o la consola de Google Cloud. Puedes anular este comportamiento si especificas una cuenta de servicio diferente cuando creas la VM o si especificas de forma explícita que no haya ninguna cuenta de servicio conectada a la VM.
Puedes inhabilitar o borrar esta cuenta de servicio del proyecto, pero esto podría provocar la falla de cualquier aplicación que dependa de las credenciales de la cuenta de servicio. Si borras de forma accidental la cuenta de servicio predeterminada de Compute Engine, puedes intentar recuperarla en un período de 30 días. Para obtener más información, consulta Borra y recupera cuentas de servicio.
Cuentas de servicio administradas por Google
Estas cuentas de servicio (a veces conocidas como agentes de servicio) las crea y administra Google, y se asignan a tu proyecto automáticamente. Estas cuentas representan diferentes servicios de Google y cada cuenta tiene cierto nivel de acceso a tu proyecto de Google Cloud.
No puedes adjuntar cuentas de servicio administradas por Google a una instancia de Compute Engine.
Agente de servicios de las API de Google
Además de la cuenta de servicio predeterminada, todos los proyectos habilitados con Compute Engine tienen un agente de servicio de las API de Google, que se puede identificar mediante el correo electrónico:
PROJECT_NUMBER@cloudservices.gserviceaccount.com
Esta cuenta de servicio está diseñada específicamente para ejecutar procesos internos de Google en tu nombre. La cuenta es propiedad de Google y no figura en la sección Cuentas de servicio de la consola de Google Cloud. De forma predeterminada, la cuenta recibe el rol de editor de proyecto de manera automática en el proyecto y aparece en la sección IAM de la consola de Google Cloud. Esta cuenta de servicio solo se borra cuando se borra el proyecto. Sin embargo, puedes cambiar las funciones otorgadas a esta cuenta, incluida la revocación de todo tipo de acceso a tu proyecto.
Ciertos recursos dependen de esta cuenta de servicio y de los permisos de editor predeterminados otorgados a la cuenta de servicio. Por ejemplo, los grupos de instancias administrados y el ajuste de escala automático usan las credenciales de esta cuenta para crear, borrar y administrar instancias. Si revocas los permisos a la cuenta de servicio, o modificas los permisos de tal manera que no otorguen permisos para crear instancias, esto hará que los grupos de instancias administrados y el ajuste de escala automático dejen de funcionar.
Por estos motivos, no debes modificar las funciones de esta cuenta de servicio, a menos que una recomendación de función sugiera de forma explícita que las modificas.
Agente de servicio de Compute Engine
Todos los proyectos que habilitaron la API de Compute Engine tienen un agente de servicio de Compute Engine, que tiene el siguiente correo electrónico:
service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
Esta cuenta de servicio está diseñada específicamente para que Compute Engine realice las tareas de servicio en tu proyecto.
Se basa en la Política de IAM de agente de servicios otorgada en tu proyecto de Google Cloud. También es la cuenta de servicio de Compute Engine que se usa para acceder a la cuenta de servicio del cliente en instancias de VM. Google es el propietario de esta cuenta, pero es específica para tu proyecto. Esta cuenta está oculta en la página de IAM en Console, a menos que selecciones Incluye asignaciones de funciones proporcionadas por Google.
De forma predeterminada, a la cuenta se le otorga la función compute.serviceAgent
en tu proyecto automáticamente.
Esta cuenta de servicio se borra solo cuando borras tu proyecto. Puedes cambiar las funciones otorgadas a esta cuenta y revocar todo acceso a tu proyecto desde la cuenta. Si revocas o cambias los permisos de esta cuenta de servicio, Compute Engine no podrá acceder a las identidades de tus cuentas de servicio en las VM, y es posible que se produzcan interrupciones del software que se ejecuta dentro de tus VM.
Por estos motivos evita hacer modificaciones en las funciones de esta cuenta de servicio tanto como sea posible.
Adjunta una cuenta de servicio a una instancia
Para evitar otorgar permisos excesivos a una aplicación, te recomendamos que crees una cuenta de servicio administrada por el usuario, le otorgues solo las funciones que tu aplicación necesita para funcionar correctamente y la conectes a tu instancia de Compute Engine. El código puede usar credenciales predeterminadas de la aplicación para autenticarse con las credenciales que proporciona la cuenta de servicio.
Puedes adjuntar una cuenta de servicio a una instancia de Compute Engine cuando creas la instancia o después. Solo se puede conectar una cuenta de servicio a una instancia a la vez. Si conectas una cuenta de servicio a una instancia que ya tiene una cuenta de servicio adjunta, la cuenta de servicio anterior ya no la usa.
Cuando adjuntas una cuenta de servicio a una instancia de Compute Engine, también debes asegurarte de que los alcances establecidos en la instancia sean correctos. De lo contrario, es posible que tu app no pueda acceder a todas las API que necesita. Para obtener más información, consulta los Permisos de acceso en esta página.
Para obtener información paso a paso sobre cómo conectar una cuenta de servicio a una instancia de Compute Engine, consulta Crea y habilita cuentas de servicio para instancias.
Autorización
Cuando configuras una instancia para que se ejecute como una cuenta de servicio, debes determinar el nivel de acceso que tiene la cuenta de servicio mediante los roles de IAM que le otorgas. Si la cuenta de servicio no tiene roles de IAM, no se puede acceder a ningún recurso con la cuenta de servicio en esa instancia.
Además, los niveles de acceso de una instancia definen los alcances de OAuth predeterminados para las solicitudes que se realizan a través de la CLI de gcloud y las bibliotecas cliente en la instancia. Como resultado, los niveles de acceso limitan potencialmente aún más el acceso a los métodos de la API cuando se autentica mediante OAuth. Sin embargo, no se extienden a otros protocolos de autenticación como gRPC.
Se recomienda configurar el nivel de acceso cloud-platform
completo en la instancia y, a continuación, controlar el acceso a la cuenta de servicio con las funciones de IAM.
Básicamente:
- IAM restringe el acceso a las API según las funciones de IAM que se otorgan a la cuenta de servicio.
- Los niveles de acceso limitan potencialmente aún más el acceso a los métodos de la API.
Tanto los niveles de acceso como las funciones de IAM se describen en detalle en las secciones a continuación.
Funciones de IAM
Debes otorgar las funciones de IAM apropiadas a una cuenta de servicio para permitir que esa cuenta de servicio acceda a los métodos de la API relevantes.
Por ejemplo, puedes otorgar las funciones de IAM a una cuenta de servicio para administrar objetos de Cloud Storage, administrar depósitos de Cloud Storage, o ambos, lo que limita la cuenta a los permisos otorgados por esas funciones.
Cuando otorgas una función de IAM a una cuenta de servicio, cualquier aplicación que se ejecute en una instancia que tenga esa cuenta de servicio tendrá la autorización que le otorgará esa función.
Algunas cosas que debes recordar:
Algunas funciones de IAM se encuentran actualmente en versión beta.
Si no hay un rol predefinido para el nivel de acceso que deseas, puedes crear y otorgar roles personalizados.
Debes configurar niveles de acceso en la instancia para autorizar el acceso.
Si bien el nivel de acceso de una cuenta de servicio está determinado por los roles de IAM otorgados a la cuenta de servicio, los niveles de acceso de una instancia determinan los alcances de OAuth predeterminados para las solicitudes que se realizan a través de la CLI de gcloud y las bibliotecas cliente en la instancia. Como resultado, los niveles de acceso limitan potencialmente aún más el acceso a los métodos de la API cuando se autentica mediante OAuth.
Permisos de acceso
Los permisos de acceso son el método heredado que permite especificar autorización para tu instancia. En cambio, definen los niveles predeterminados de OAuth que se usan en las solicitudes de la CLI de gcloud o las bibliotecas cliente. (Los permisos de acceso no se aplican a las llamadas realizadas mediante gRPC).
Los niveles de acceso se aplican por instancia. Configuras los niveles de acceso cuando creas una instancia y estos persisten solo durante la vida útil de la instancia.
En general, la documentación de cada método de la API enumera los alcances necesarios para ese método. Por ejemplo, el método instances.insert
proporciona una lista de niveles válidos en la sección autorización.
Los niveles de acceso no tienen efecto si no habilitaste la API relacionada en el proyecto al que pertenece la cuenta de servicio. Por ejemplo, si otorgas niveles de acceso para Cloud Storage en una instancia de máquina virtual, esto permite que la instancia realice una llamada a la API de Cloud Storage solo si habilitaste la API de Cloud Storage en el proyecto.
Permisos predeterminados
Cuando creas una instancia nueva de Compute Engine, se configura de forma automática con los siguientes niveles de acceso:
- Acceso de solo lectura a Cloud Storage:
https://www.googleapis.com/auth/devstorage.read_only
- Acceso de escritura para escribir registros de Compute Engine:
https://www.googleapis.com/auth/logging.write
- Acceso de escritura para publicar datos de métricas en tus proyectos de Google Cloud:
https://www.googleapis.com/auth/monitoring.write
- Acceso de solo lectura a las funciones de administración de servicios requeridas para Google Cloud Endpoints (Alfa):
https://www.googleapis.com/auth/service.management.readonly
- Acceso de lectura y escritura a las funciones de Control de servicios requeridas para Google Cloud Endpoints (Alfa):
https://www.googleapis.com/auth/servicecontrol
- El acceso de escritura a Cloud Trace permite que una aplicación que se ejecuta en una VM escriba datos de seguimiento en un proyecto.
https://www.googleapis.com/auth/trace.append
Prácticas recomendadas sobre los permisos
Hay muchos niveles de acceso disponibles para elegir, pero se recomienda configurar el permiso de acceso cloud-platform
, que es un nivel de OAuth para la mayoría de Google Cloud servicios y, luego, controlar el acceso de la cuenta de servicio mediante los roles de IAM.
https://www.googleapis.com/auth/cloud-platform
Ejemplos de permisos
De acuerdo con la práctica recomendada de los permisos, si habilitaste el nivel de acceso cloud-platform
en una instancia y luego otorgaste los siguientes roles de IAM predefinidas:
roles/compute.instanceAdmin.v1
roles/storage.objectViewer
roles/compute.networkAdmin
Entonces, la cuenta de servicio solo tiene los permisos incluidos en esos tres roles de IAM. Las aplicaciones que simulan esa cuenta de servicio no pueden realizar acciones fuera de estos roles a pesar del nivel de acceso de Google Cloud.
Por otro lado, si otorgas un nivel más restrictivo en la instancia, como el nivel de solo lectura de Cloud Storage (https://www.googleapis.com/auth/devstorage.read_only
), y estableces el rol de administrador roles/storage.objectAdmin
en la cuenta de servicio, entonces, de manera predeterminada, las solicitudes desde la CLI de gcloud y las bibliotecas cliente no podrán administrar los objetos de Cloud Storage desde esa instancia, incluso aunque hayas otorgado el rol roles/storage.ObjectAdmin
a la cuenta de servicio. Esto se debe a que el nivel de solo lectura de Cloud Storage no autoriza a la instancia a manipular datos de Cloud Storage.
Estos son algunos ejemplos de permisos de acceso:
https://www.googleapis.com/auth/cloud-platform
. Visualiza y administra tus datos en la mayoría de los servicios de Google Cloud en el proyecto de Google Cloud especificado.https://www.googleapis.com/auth/compute
. Control total de acceso a los métodos de Compute Engine.https://www.googleapis.com/auth/compute.readonly
. Otorga acceso de solo lectura a los métodos de Compute Engine.https://www.googleapis.com/auth/devstorage.read_only
. Otorga acceso de solo lectura a Cloud Storage.https://www.googleapis.com/auth/logging.write
. Otorga acceso de escritura a los registros de Compute Engine.
¿Qué sigue?
- Crea y habilita cuentas de servicio para instancias.
- Obtén más información sobre cómo crear y administrar cuentas de servicio.
- Obtén más información sobre cómo otorgar o revocar roles para las cuentas de servicio.
- Obtén más información sobre IAM.
- Obtén más información sobre otras opciones de control de acceso de Compute Engine.
- Descubre cómo ver los registros de auditoría para supervisar la forma en que se modifican los recursos de Compute Engine.
- Si necesitas usar una cuenta de servicio de un proyecto diferente, consulta Configura cuentas de servicio para un recurso en un proyecto diferente.