Cree una máquina virtual que utilice una cuenta de servicio administrada por el usuario


Este documento explica cómo crear una instancia de máquina virtual (VM) que esté configurada para usar una cuenta de servicio administrada por el usuario. Una cuenta de servicio es un tipo especial de cuenta que normalmente utiliza una aplicación o carga de trabajo informática para realizar llamadas API autorizadas.

Las cuentas de servicio son necesarias para escenarios en los que una carga de trabajo, como una aplicación personalizada, necesita acceder Google Cloud recursos o realizar acciones sin la participación del usuario final. Para obtener más información sobre cuándo usar cuentas de servicio, consulte Mejores prácticas para usar cuentas de servicio .

Si tienes aplicaciones que necesitan hacer llamadas a Google Cloud API, Google recomienda adjuntar una cuenta de servicio administrada por el usuario a la máquina virtual en la que se ejecuta la aplicación o carga de trabajo. Luego, otorga a la cuenta de servicio funciones de IAM, lo que le otorga a la cuenta de servicio (y, por extensión, a las aplicaciones que se ejecutan en la máquina virtual) acceso aGoogle Cloud recursos.

Antes de comenzar

  • 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:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. Terraform

      Para usar las muestras de Terraform 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.

      1. Install the Google Cloud CLI.
      2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      3. To initialize the gcloud CLI, run the following command:

        gcloud init
      4. 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.

      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.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .

Roles requeridos

Para obtener los permisos que necesita para crear máquinas virtuales que utilicen cuentas de servicio, solicite a su administrador que le otorgue las siguientes funciones de IAM en el proyecto:

Para obtener más información sobre cómo otorgar roles, consulte Administrar el acceso a proyectos, carpetas y organizaciones .

Estos roles predefinidos contienen los permisos necesarios para crear máquinas virtuales que utilicen cuentas de servicio. Para ver los permisos exactos que se requieren, expanda la sección Permisos requeridos :

Permisos requeridos

Se requieren los siguientes permisos para crear máquinas virtuales que utilicen cuentas de servicio:

  • Para crear cuentas de servicio: todos los permisos en el rol iam.serviceAccountCreator
  • Para otorgar permisos a la cuenta de servicio: todos los permisos en el rol resourcemanager.projectIamAdmin
  • Para crear máquinas virtuales:
    • compute.instances.create en el proyecto.
    • Para usar una imagen personalizada para crear la VM: compute.images.useReadOnly en la imagen
    • Para usar una instantánea para crear la VM: compute.snapshots.useReadOnly en la instantánea
    • Para usar una plantilla de instancia para crear la VM: compute.instanceTemplates.useReadOnly en la plantilla de instancia
    • Para asignar una red heredada a la VM: compute.networks.use en el proyecto
    • Para especificar una dirección IP estática para la VM: compute.addresses.use en el proyecto
    • Para asignar una dirección IP externa a la VM cuando se usa una red heredada: compute.networks.useExternalIp en el proyecto
    • Para especificar una subred para la VM: compute.subnetworks.use en el proyecto o en la subred elegida
    • Para asignar una dirección IP externa a la VM cuando se usa una red VPC: compute.subnetworks.useExternalIp en el proyecto o en la subred elegida
    • Para configurar metadatos de instancia de VM para la VM: compute.instances.setMetadata en el proyecto
    • Para configurar etiquetas para la VM: compute.instances.setTags en la VM
    • Para configurar etiquetas para la VM: compute.instances.setLabels en la VM
    • Para configurar una cuenta de servicio para que la use la VM: compute.instances.setServiceAccount en la VM
    • Para crear un nuevo disco para la VM: compute.disks.create en el proyecto
    • Para conectar un disco existente en modo de solo lectura o lectura-escritura: compute.disks.use en el disco
    • Para conectar un disco existente en modo de solo lectura: compute.disks.useReadOnly en el disco

Es posible que también pueda obtener estos permisos con roles personalizados u otros roles predefinidos .

Descripción general

Se recomienda configurar cuentas de servicio para sus máquinas virtuales de la siguiente manera:

  1. Cree una nueva cuenta de servicio administrada por el usuario en lugar de utilizar la cuenta de servicio predeterminada de Compute Engine y otorgue funciones de IAM a esa cuenta de servicio solo para los recursos y operaciones que necesita.
  2. Adjunte la cuenta de servicio a su VM.
  3. Configure el alcance de la plataforma en la nube ( https://www.googleapis.com/auth/cloud-platform ) en su máquina virtual. Esto permite que la cuenta de servicio de la VM llame al Google Cloud API para las que tiene permiso de uso.
    • Si especifica la cuenta de servicio mediante la consola de Google Cloud, el alcance de acceso de la VM se establece automáticamente de forma predeterminada en el alcance cloud-platform .
    • Si especifica la cuenta de servicio mediante la CLI de Google Cloud o la API de Compute Engine, puede usar el parámetro scopes para establecer el alcance de acceso.

Configurar una cuenta de servicio

Cree una cuenta de servicio y asigne los roles de IAM necesarios. Asigne tantas funciones de IAM como sea necesario. Puede modificar las funciones de IAM en su cuenta de servicio según sea necesario.

Google recomienda que limite los privilegios de las cuentas de servicio y verifique periódicamente los permisos de su cuenta de servicio para asegurarse de que estén actualizados.

Utilice uno de los siguientes métodos para configurar la cuenta de servicio.

Consola

    In the Google Cloud console, go to the Create service account page.

    Go to Create service account
  1. Select your project.
  2. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

    In the Service account description field, enter a description. For example, Service account for quickstart.

  3. Click Create and continue.
  4. Grant the required roles to the service account.

    To grant a role, find the Select a role list, then select the role.

    To grant additional roles, click Add another role and add each additional role.

  5. Click Continue.
  6. In the Service account users role field, enter the identifier for the principal that will attach the service account to other resources, such as Compute Engine instances.

    This is typically the email address for a Google Account.

  7. Click Done to finish creating the service account.

nube de gcloud

    Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. To provide access to your project and your resources, grant a role to the service account:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
      • ROLE: the role to grant
    3. To grant another role to the service account, run the command as you did in the previous step.
    4. Grant the required role to the principal that will attach the service account to other resources.

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
      • USER_EMAIL: the email address for a Google Account

Terraformar

Para crear una cuenta de servicio, puede utilizar el recurso google_service_account .

resource "google_service_account" "default" {
  account_id   = "service-account-id"
  display_name = "Service Account"
}

Recuerde reemplazar los valores del marcador de posición para los atributos account_id y display_name .

Para aprender cómo aplicar o eliminar una configuración de Terraform, consulte Comandos básicos de Terraform .

Cree una VM y adjunte la cuenta de servicio

Después de crear la cuenta de servicio, cree una máquina virtual y adjunte la cuenta de servicio que creó en la sección anterior. También configure el alcance de acceso de la VM en cloud-platform .

Si ya tiene una máquina virtual existente y desea configurarla para que use una cuenta de servicio diferente, consulte Cambiar la cuenta de servicio adjunta .

Utilice uno de los siguientes métodos para crear una máquina virtual y adjuntar la cuenta de servicio.

Consola

  1. En la consola de Google Cloud, vaya a la página Crear una instancia .

    Ir a Crear una instancia

  2. Para adjuntar una cuenta de servicio, haga lo siguiente:

    1. En el menú de navegación, haga clic en Seguridad .
    2. En la lista de cuentas de servicio , seleccione la cuenta de servicio que creó.
    3. Para Ámbitos de acceso , seleccione Permitir acceso completo a todas las API de la nube .
  3. Opcional: especifique otras opciones de configuración. Para obtener más información, consulte Opciones de configuración durante la creación de instancias .

  4. Para crear e iniciar la instancia, haga clic en Crear .

nube de gcloud

Para crear una nueva instancia de VM y configurarla para usar una cuenta de servicio personalizada mediante la CLI de Google Cloud, use el comando gcloud compute instances create y proporcione el correo electrónico de la cuenta de servicio y el alcance de acceso a cloud-platform a la instancia de VM.

gcloud compute instances create VM_NAME \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=https://www.googleapis.com/auth/cloud-platform

Reemplace lo siguiente:

  • SERVICE_ACCOUNT_EMAIL : la dirección de correo electrónico de la cuenta de servicio que creó. Por ejemplo: my-sa-123@my-project-123.iam.gserviceaccount.com . Para ver la dirección de correo electrónico, consulte Listado de 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 puede especificar el alcance utilizando el alias: --scopes=cloud-platform . Estos alias solo los reconoce la CLI de gcloud. La API y otras bibliotecas no reconocen estos alias, por lo que debes especificar el URI de alcance completo.

Terraformar

Para configurar una nueva máquina virtual para usar una cuenta de servicio, puede usar el recurso google_compute_instance .

resource "google_compute_instance" "default" {
  name         = "my-test-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  // Local SSD disk
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"

    access_config {
      // Ephemeral public IP
    }
  }

  service_account {
    # Google recommends custom service accounts with `cloud-platform` scope with
    # specific permissions granted via IAM Roles.
    # This approach lets you avoid embedding secret keys or user credentials
    # in your instance, image, or app code
    email  = google_service_account.default.email
    scopes = ["cloud-platform"]
  }
}

DESCANSAR

Utilice el método instances.insert para crear la VM y especificar el correo electrónico de la cuenta de servicio y el alcance 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"
   }
}

Reemplace lo siguiente:

  • PROJECT_ID : ID del proyecto para crear la VM en
  • ZONE : zona para crear la VM en
  • MACHINE_TYPE_ZONE : zona que contiene el tipo de máquina que se utilizará para la nueva VM
  • MACHINE_TYPE : tipo de máquina, predefinida o personalizada , para la nueva VM
  • VM_NAME : nombre de la nueva VM
  • IMAGE_PROJECT : proyecto que contiene la imagen
    Por ejemplo, si especifica debian-10 como familia de imágenes, especifique debian-cloud como proyecto de imagen.
  • IMAGE : especifique uno de los siguientes:
    • 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 máquina virtual a partir de la imagen del sistema operativo más reciente y no obsoleta. Por ejemplo, si especifica "sourceImage": "projects/debian-cloud/global/images/family/debian-10" , Compute Engine crea una VM a partir de la última versión de la imagen del sistema operativo en la familia de imágenes Debian 10 .

  • NETWORK_NAME : la red VPC que desea utilizar para la VM. Puede especificar default para usar su red predeterminada.
  • SERVICE_ACCOUNT_EMAIL : la dirección de correo electrónico de la cuenta de servicio que creó. Por ejemplo: my-sa-123@my-project-123.iam.gserviceaccount.com . Para ver la dirección de correo electrónico, consulte obtener un correo electrónico de cuenta de servicio .
  • ENABLE_SECURE_BOOT : Opcional: si eliges una imagen que admita funciones de VM protegida , Compute Engine, de forma predeterminada, habilita el módulo de plataforma virtual confiable (vTPM) y el monitoreo de integridad . Compute Engine no habilita el arranque seguro de forma predeterminada.

    Si especificas true para enableSecureBoot , Compute Engine crea una VM con las tres funciones de VM protegida habilitadas. Después de que Compute Engine inicie su VM, para modificar las opciones de la VM protegida , debe detener la VM.

Acceder y utilizar otros Google Cloud servicios

Una vez que su 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 las credenciales predeterminadas de la aplicación y una biblioteca cliente. Alguno Google Cloud herramientas como la CLI de gcloud pueden usar automáticamente la cuenta de servicio para acceder Google Cloud API de una máquina virtual. Para obtener más información, consulte Autenticar cargas de trabajo mediante cuentas de servicio .

Si se elimina una cuenta de servicio, las aplicaciones ya no tendrán acceso aGoogle Cloud recursos a través de esa cuenta de servicio. Si elimina las cuentas de servicio predeterminadas de App Engine y Compute Engine, sus máquinas virtuales ya no tendrán acceso a los recursos del proyecto. Si no está seguro de si se está utilizando una cuenta de servicio, Google recomienda desactivarla antes de eliminarla. Las cuentas de servicio deshabilitadas se pueden volver a habilitar si aún son necesarias.

Ejemplo: acceder a los recursos de Cloud Storage desde su VM

Una vez que hayas configurado tu VM para usar una cuenta de servicio que tenga la función storage.admin , puedes usar herramientas como la CLI de gcloud para administrar los archivos que hayas almacenado en Cloud Storage. Para acceder a sus recursos de Cloud Storage, complete lo siguiente:

  1. Asegúrese de que la cuenta de servicio adjunta a su máquina virtual tenga la función roles/storage.admin .

  2. Si tu VM usa una imagen de sistema operativo personalizada, instala la CLI de gcloud . De forma predeterminada, la CLI de gcloud se instala en la mayoría de las imágenes públicas del sistema operativo proporcionadas por Google Cloud.

  3. Conéctese a la máquina virtual.

  4. Desde la VM, use la CLI de Google Cloud para administrar sus recursos de Cloud Storage.

¿Qué sigue?