En este documento, se explica cómo crear una instancia de máquina virtual (VM) configurada para usar una cuenta de servicio administrada por el usuario. Una cuenta de servicio es un tipo especial de cuenta que, por lo general, es usada por una carga de trabajo de aplicación o procesamiento para realizar llamadas autorizadas a la API.
Las cuentas de servicio son necesarias para situaciones en las que una carga de trabajo, como una aplicación personalizada, necesita acceder a los recursos de Google Cloud o realizar acciones sin la participación del usuario final. Si deseas obtener más información sobre cuándo usar las cuentas de servicio, consulta Prácticas recomendadas para usar cuentas de servicio.
Si tienes aplicaciones que necesitan realizar llamadas a las APIs de Google Cloud, Google recomienda que conectes una cuenta de servicio administrada por el usuario a la VM en la que se ejecuta la aplicación o la carga de trabajo. Luego, otorgas los roles de IAM de la cuenta de servicio, que otorga a la cuenta de servicio (y, por extensión, a las aplicaciones que se ejecutan en la VM) acceso a los recursos de Google Cloud.
Antes de comenzar
-
Configura la autenticación.
Selecciona la pestaña sobre cómo planeas usar las muestras en esta página:
Consola
Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud, no necesitas configurar la autenticación.
gcloud
-
Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:
gcloud init
- Configura una región y una zona predeterminadas.
Terraform
Para usar las muestras de Terraform de esta página desde un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
Crea credenciales de autenticación locales para tu Cuenta de Google:
gcloud auth application-default login
Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
REST
Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.
Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:
gcloud init
-
Funciones obligatorias
Para obtener los permisos que necesitas para crear VMs que usen cuentas de servicio, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Administrador de instancias de Compute (v1) (
roles/compute.instanceAdmin.v1
) -
Crea cuentas de servicio (
roles/iam.serviceAccountCreator
)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.
Estos roles predefinidos contienen los permisos necesarios para crear VMs que usen cuentas de servicio. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Los siguientes permisos son necesarios para crear VMs que usen cuentas de servicio:
-
Para crear cuentas de servicio, haz lo siguiente: Todos los permisos del rol
serviceAccountCreator
-
Para crear VMs, sigue estos pasos:
compute.instances.create
en el proyectocompute.instances.updateShieldedVmConfig
si planeas crear una instancia de VM protegida y deseas poder modificar cualquiera de las opciones de configuración de VM protegidacompute.networks.use
en el proyecto si se usa una red heredadacompute.subnetworks.use
en todo el proyecto o en la subred elegida (redes de VPC)compute.networks.useExternalIp
en el proyecto si necesitas asignar una dirección IP externa (efímera o estática) a la instancia con una red heredadacompute.subnetworks.useExternalIp
en todo el proyecto o en la subred elegida si necesitas asignar una dirección IP externa (efímera o estática) a la instancia con una red de VPCcompute.addresses.use
en el proyecto si se especifica una dirección estática en el proyectocompute.instances.setMetadata
si se establecen metadatoscompute.instances.setTags
en la instancia si se configuran rótulos identificadorescompute.instances.setLabels
en la instancia si se configuran etiquetascompute.instances.setServiceAccount
en la instancia, si se configura la cuenta de serviciocompute.images.useReadOnly
en la imagen si se crea un disco persistente raíz nuevocompute.disks.create
en el proyecto si se crea un disco persistente raíz nuevo con esta instanciacompute.disks.useReadOnly
en el disco si se conecta un disco persistente existente en modo de solo lecturacompute.disks.use
en el disco si se conecta un disco existente en modo de lectura y escrituracompute.disks.setLabels
en el disco si se configuran etiquetascompute.snapshots.create
en el proyecto para crear una instantánea nueva si se crea una instancia a partir de una instantáneacompute.snapshots.useReadOnly
en la instantánea si se crea una instancia a partir de una instantáneacompute.instanceTemplates.useReadOnly
en la plantilla de instancias si se crea una instancia a partir de la plantilla de instancias
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Descripción general
Se recomienda que configures las cuentas de servicio para las VMs de la siguiente manera:
- Crea una cuenta de servicio nueva administrada por el usuario en lugar de usar la cuenta de servicio predeterminada de Compute Engine y otórgale roles de IAM solo a los recursos y las operaciones que necesita.
- Conecta la cuenta de servicio a tu VM.
- Configura el permiso de la plataforma en la nube (
https://www.googleapis.com/auth/cloud-platform
) en tu VM. Esto permite que la cuenta de servicio de la VM llame a las APIs de Google Cloud que tiene permiso para usar.- Si especificas la cuenta de servicio con la consola de Google Cloud, el permiso de acceso de la VM se establece automáticamente en el permiso
cloud-platform
. - Si especificas la cuenta de servicio con Google Cloud CLI o la API de Compute Engine, puedes usar el parámetro
scopes
para configurar el permiso de acceso.
- Si especificas la cuenta de servicio con la consola de Google Cloud, el permiso de acceso de la VM se establece automáticamente en el permiso
Configurar una cuenta de servicio
Crea una cuenta de servicio y asigna los roles de IAM necesarios. Asigna tantos roles de IAM como sea necesario. Puedes modificar los roles de IAM en tu cuenta de servicio según sea necesario.
Google recomienda que limites los privilegios de las cuentas de servicio y verifiques con regularidad los permisos de tu cuenta de servicio para asegurarte de que estén actualizados.
Usa uno de los siguientes métodos para configurar la cuenta de servicio.
Consola
- Selecciona tu proyecto.
-
Ingresa un nombre en el campo Nombre de cuenta de servicio. La consola de Google Cloud completa el campo ID de cuenta de servicio en función de este nombre.
Opcional: en el campo Descripción de la cuenta de servicio, ingresa una descripción. Por ejemplo,
Service account for quickstart
. - Haz clic en Crear y continuar.
-
Otorga los roles necesarios a la cuenta de servicio:
Para otorgar un rol, busca la lista Selecciona un rol y, luego, selecciona el rol.
Para otorgar roles adicionales, haz clic en
Agregar otro rol y agrega cada rol adicional. - Haga clic en Continuar.
- En el cuadro Rol de los usuarios de la cuenta de servicio, ingresa la dirección de correo electrónico de tu Cuenta de Google.
-
Haz clic en Listo para terminar de crear la cuenta de servicio.
En la consola de Google Cloud, ve a la página Crear cuenta de servicio.
Ve a Crear cuenta de serviciogcloud
-
Crea la cuenta de servicio:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Reemplaza
SERVICE_ACCOUNT_NAME
por un nombre para la cuenta de servicio. -
Para proporcionar acceso a tu proyecto y tus recursos, otorga un rol a la cuenta de servicio:
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Reemplaza lo siguiente:
SERVICE_ACCOUNT_NAME
: el nombre de la cuenta de servicioPROJECT_ID
: el ID del proyecto en el que creaste la cuenta de servicioROLE
: el rol a otorgar
- Para otorgar otro rol a la cuenta de servicio, ejecuta el comando como lo hiciste en el paso anterior.
-
Otorga a tu Cuenta de Google un rol que te permita usar los roles de la cuenta de servicio y conectar la cuenta de servicio a otros recursos:
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser
Reemplaza lo siguiente:
SERVICE_ACCOUNT_NAME
: el nombre de la cuenta de servicioPROJECT_ID
: el ID del proyecto en el que creaste la cuenta de servicioUSER_EMAIL
: La dirección de correo electrónico de tu Cuenta de Google
Configura la autenticación:
Terraform
Para crear una cuenta de servicio, puedes usar el recurso google_service_account
.
Recuerda reemplazar los valores de marcador de posición por los atributos account_id
y display_name
.
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Crea una VM y conecta la cuenta de servicio
Después de crear la cuenta de servicio, crea una VM y conecta la cuenta de servicio que creaste en la sección anterior. Establece también el permiso de acceso de la VM en cloud-platform
.
Si ya tienes una VM existente y deseas configurarla para usar una cuenta de servicio diferente, consulta Cambia la cuenta de servicio conectada.
Usa uno de los siguientes métodos para crear una VM y conectar la cuenta de servicio.
Consola
- En la consola de Google Cloud, ve a la página Instancias de VM.
- Selecciona el proyecto y haz clic en Continuar.
- Haz clic en Crear instancia.
- Especifica un Nombre para la VM.
- Ve a la sección Identidad y acceso a la API.
- En la lista Cuenta de servicio, selecciona la cuenta de servicio que creaste. Cuando conectas una cuenta de servicio a una VM, el permiso de acceso
cloud-platform
del permiso de acceso de Google Cloud se establece de forma automática en la VM. - Realiza personalizaciones de VM adicionales, según sea necesario.
- Para crear y, también, iniciar la VM, haz clic en Crear.
gcloud
Para crear una instancia de VM nueva y configurarla para usar una cuenta de servicio personalizada mediante Google Cloud CLI, usa el comando gcloud compute instances create
y proporciona la cuenta de servicio correo electrónico y el permiso de acceso cloud-platform
para la instancia de VM.
gcloud compute instances create VM_NAME \ --service-account=SERVICE_ACCOUNT_EMAIL \ --scopes=https://www.googleapis.com/auth/cloud-platform
Reemplaza lo siguiente:
SERVICE_ACCOUNT_EMAIL
: La dirección de correo electrónico de la cuenta de servicio que creaste. Por ejemplo:my-sa-123@my-project-123.iam.gserviceaccount.com
Para ver la dirección de correo electrónico, consulta Enumera cuentas de servicio.VM_NAME
: El nombre de la instancia de VM
Por ejemplo:
gcloud compute instances create example-vm \ --service-account 123-my-sa@my-project-123.iam.gserviceaccount.com \ --scopes=https://www.googleapis.com/auth/cloud-platform
También puedes especificar el alcance mediante el alias: --scopes=cloud-platform
.
Solo la CLI de gcloud reconoce estos alias. La API y otras bibliotecas no reconocen estos alias, por lo que debes especificar el URI de alcance completo.
Terraform
Si deseas configurar una VM nueva para que use una cuenta de servicio, puedes usar el recurso google_compute_instance
.
REST
Usa el método instances.insert
para crear la VM y especifica el correo electrónico de la cuenta de servicio y el permiso de acceso para la instancia de VM.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/ZONE
/instances { "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name":"VM_NAME
", "disks":[ { "initializeParams":{ "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot":true } ], "networkInterfaces":[ { "network":"global/networks/NETWORK_NAME" } ], "serviceAccounts": [ { "email": "SERVICE_ACCOUNT_EMAIL", "scopes": ["https://www.googleapis.com/auth/cloud-platform"] } ], "shieldedInstanceConfig":{ "enableSecureBoot":"ENABLE_SECURE_BOOT" } }
Reemplaza lo siguiente:
PROJECT_ID
: ID del proyecto en el que se creará la VMZONE
: Zona en la que se creará la VMMACHINE_TYPE_ZONE
: Zona que contiene el tipo de máquina que se usará para la VM nuevaMACHINE_TYPE
: El tipo de máquina, predefinido o personalizado de la VM nuevaVM_NAME
: Nombre de la VM nuevaIMAGE_PROJECT
: El proyecto que contiene la imagen
Por ejemplo, si especificasdebian-10
como familia de imágenes, especificadebian-cloud
como proyecto de imagen.IMAGE or IMAGE_FAMILY
: Especifica una de las siguientes opciones:IMAGE
: Una versión específica de una imagen pública
Por ejemplo,"sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"
IMAGE_FAMILY
: Una familia de imágenes
Esto crea la VM a partir de la imagen de SO no obsoleta más reciente. Por ejemplo, si especificas"sourceImage": "projects/debian-cloud/global/images/family/debian-10"
, Compute Engine crea una VM a partir de la última versión de la imagen de SO en la familia de imágenesDebian 10
.
NETWORK_NAME
: La red de VPC que deseas usar para la VM. Puedes especificardefault
para usar tu red predeterminadaSERVICE_ACCOUNT_EMAIL
: La dirección de correo electrónico de la cuenta de servicio que creaste. Por ejemplo:my-sa-123@my-project-123.iam.gserviceaccount.com
. Para ver la dirección de correo electrónico, consulta Obtén un correo electrónico de cuenta de servicio.ENABLE_SECURE_BOOT
: Opcional: Si eliges una imagen que admite funciones de VM protegida, Compute Engine habilita de forma predeterminada el módulo virtual de plataforma de confianza (vTPM) y la supervisión de la integridad. Compute Engine no habilita el Inicio seguro de forma predeterminada.Si especificas
true
paraenableSecureBoot
, Compute Engine crea una VM con las tres funciones de VM protegida habilitadas. Después de que Compute Engine inicie la VM, debes detenerla para modificar las opciones de VM protegida.
Accede a otros servicios de Google Cloud y úsalos
Después de que tu VM esté configurada para usar la cuenta de servicio, las aplicaciones pueden usar la cuenta de servicio para autenticarse. El método más común es autenticarse mediante el uso de credenciales predeterminadas de la aplicación y una biblioteca cliente. Algunas herramientas de Google Cloud, como la CLI de gcloud y gsutil
, pueden usar de forma automática la cuenta de servicio para acceder a las API de Google Cloud desde una VM. Para obtener más información, consulta Autentica cargas de trabajo con cuentas de servicio.
Si se borra una cuenta de servicio, las aplicaciones ya no tendrán acceso a los recursos de Google Cloud a través de esa cuenta. Si borras las cuentas de servicio predeterminadas de App Engine y Compute Engine, las instancias ya no tendrán acceso a los recursos del proyecto. Si no tienes en claro si se está usando una cuenta de servicio, te recomendamos que inhabilites la cuenta de servicio antes de borrarla. Las cuentas de servicio inhabilitadas se pueden volver a habilitar si aún son necesarias.
Ejemplo: Accede a los recursos de Cloud Storage desde tu VM
Después de configurar tu VM para usar una cuenta de servicio que tenga el rol storage.admin
, puedes usar herramientas como la CLI de gcloud y gsutil
para administrar los archivos que almacenaste. Cloud Storage Para acceder a tus recursos de Cloud Storage, completa los siguientes pasos:
Asegúrate de que la cuenta de servicio conectada a tu VM tenga el rol
roles/storage.admin
.Si tu VM usa una imagen de SO personalizada, instala la CLI de gcloud. De forma predeterminada, la CLI de gcloud está instalada en la mayoría de las imágenes de SO públicas que proporciona Google Cloud.
Conéctate a la VM.
Desde la VM, usa una de las siguientes herramientas para administrar tus recursos de Cloud Storage.
- Usa
gsutil
- Usa Google Cloud CLI
- Usa
Próximos pasos
- Aprende a autenticar cargas de trabajo mediante cuentas de servicio.
- Obtén más información sobre cómo cambiar la cuenta de servicio conectada a una VM.
- Obtén información sobre cómo enumerar y editar cuentas de servicio.
- Revisa las prácticas recomendadas para trabajar con cuentas de servicio y mitiga los riesgos de seguridad.