En esta página, se describe cómo funcionan las cuentas de servicio con Compute Engine.
Para obtener información paso a paso sobre cómo conectar una cuenta de servicio a una instancia de máquina virtual (VM), revisa uno de los siguientes documentos:
- Para configurar la cuenta de servicio durante la creación de la VM, consulta Crea una VM que use una cuenta de servicio administrada por el usuario.
- Para configurar una cuenta de servicio en una VM existente, consulta Cambia la cuenta de servicio conectada.
Para obtener información de las prácticas recomendadas para 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 a través de la Identity and Access Management (IAM).
Ten en cuenta lo siguiente cuando uses cuentas de servicio con tus VMs:
- Puedes conectar la misma cuenta de servicio a varias VMs, pero una sola VM puede tener solo una cuenta de servicio.
- Si conectas la misma cuenta de servicio a varias VM, cualquier cambio posterior que realices en la cuenta de servicio afectará a todas las VMs que usen la cuenta de servicio. Esto incluye cualquier cambio que realices en los roles de IAM otorgados a la cuenta de servicio. Por ejemplo, si quitas una función, todas las VMs que usan la cuenta de servicio pierden los permisos que otorga ese rol.
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 para 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 los agentes de servicio 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 roles de Identity and Access Management (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 los roles de IAM en la cuenta de servicio para acceder a los recursos.
Para obtener más información de 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 de forma explícita 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.
Para crear y configurar una cuenta de servicio nueva, consulta Crea una VM que use una cuenta de servicio administrada por el usuario.
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.
- Vinculada de forma predeterminada a todas las VMs que creaste a través de 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.
-
Según la configuración de la política de la organización, es posible que a la cuenta de servicio predeterminada se le otorgue automáticamente el rol de editor en tu proyecto. Te recomendamos inhabilitar la concesión automática de roles; para ello, aplica la restricción de la política de la organización
iam.automaticIamGrantsForDefaultServiceAccounts
. Si creaste tu organización después del 3 de mayo de 2024, esta restricción se aplica de forma predeterminada.Si inhabilitas la concesión automática de roles, debes decidir qué roles se deben otorgar a las cuentas de servicio predeterminadas y, luego, otorgar estos roles a ti mismo.
Si la cuenta de servicio predeterminada ya tiene el rol de editor, te recomendamos que reemplaces el rol de editor por roles menos permisivos. Para modificar de forma segura los roles de la cuenta de servicio, usa Policy Simulator para ver el impacto del cambio y, luego, otorga y revoca los roles adecuados.
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.
Si la cuenta de servicio predeterminada de Compute Engine se borró hace más de 30 días, puedes intentar recuperar la cuenta de servicio a través de el proceso en Soluciona problemas de cuentas de servicio predeterminadas.
Agentes de servicio
Google Cloud crea y administra los agentes de servicio, y los asigna a tu proyecto automáticamente. Estas cuentas representan diferentes servicios de Google Cloud y, por lo general, cada una tiene cierto nivel de acceso a tus recursos de Google Cloud.
No puedes adjuntar agentes de servicio 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 a través de el correo electrónico:
PROJECT_NUMBER@cloudservices.gserviceaccount.com
Este agente de servicio está diseñada en específico para ejecutar procesos internos de Google en tu nombre. Este agente de servicio es propiedad de Google y no aparece en la sección Cuentas de servicio de la consola de Google Cloud. De forma predeterminada, a este agente de servicio se le otorga automáticamente el rol de editor de proyecto y aparece en la sección IAM de la consola de Google Cloud. Este agente de servicio solo se borra cuando se borra el proyecto. Sin embargo, puedes cambiar los roles otorgados a esta cuenta, incluida la revocación de todo tipo de acceso a tu proyecto.
Ciertos recursos dependen de los permisos de editor predeterminados otorgados a este agente de servicio. Por ejemplo, los grupos de instancias administrados y el ajuste de escala automático usan las credenciales de este agente de servicio para crear, borrar y administrar instancias. Si revocas los permisos de este agente de servicio o los modificas 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 este agente 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
Este agente de servicio está diseñada en específico 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 el agente de servicio que Compute Engine usa para acceder a la cuenta de servicio administrada por el usuario en instancias de VM. Google es el propietario de esta cuenta, pero es específica para tu proyecto. Este agente de servicio está oculto en la página de IAM en la consola, a menos que selecciones Incluye asignaciones de roles proporcionados por Google.
De forma predeterminada, a este agente de servicio se le otorga automáticamente el rol compute.serviceAgent
en tu proyecto.
Este agente de servicio se borra solo cuando borras tu proyecto. Puedes cambiar los roles otorgados a este agente de servicio y revocar todo acceso a tu proyecto desde este agente. Si revocas o cambias los permisos de este agente 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 este agente 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 de forma correcta 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, revisa uno de los siguientes documentos:
- Crear una VM que use una cuenta de servicio administrada por el usuario
- Cambiar la cuenta de servicio conectada
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 a través de 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 gcloud CLI 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 a través de 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 los roles 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 los roles de IAM se describen en detalle en las siguientes secciones.
Roles 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 gcloud CLI 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 a través de OAuth.
Permisos de acceso
Los permisos de acceso son el método heredado que permite especificar autorización para tu instancia de VM. En cambio, definen los niveles predeterminados de OAuth que se usan en las solicitudes de gcloud CLI o las bibliotecas cliente. Los permisos de acceso no se aplican a las llamadas realizadas mediante gRPC.
Los permisos de acceso se aplican por VM y persisten solo durante la vida útil de la VM. Puedes configurar permisos de acceso cuando creas una VM o actualizar el permiso de acceso en una VM existente.
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 o 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 los servicios de Google Cloud y, luego, controlar el acceso de la cuenta de servicio a través de 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 gcloud CLI 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 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?
- Autentica cargas de trabajo a través de cuentas de servicio.
- Obtén más información acerca de cómo crear y administrar cuentas de servicio.
- Obtén más información de IAM.
- Obtén más información acerca de 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.