Crea y habilita cuentas de servicio para instancias

Las apps que se ejecutan en tus instancias pueden interactuar con las API de Google Cloud y autorizarlas a través de una cuenta de servicio. Las cuentas de servicio con las funciones de IAM de  Compute Engine necesarias pueden permitir que tu código de aplicación ejecute solicitudes específicas a la API.

Para obtener más información sobre las cuentas de servicio, consulta la descripción general de las cuentas de servicio.

Antes de comenzar

Crea una cuenta de servicio nueva

Puedes usar IAM para crear y configurar una cuenta de servicio nueva. Después de crear una cuenta, otórgale una o más funciones de IAM y, luego, autoriza que una instancia de máquina virtual se ejecute como esa cuenta de servicio.

Para crear una cuenta de servicio nueva, sigue estos pasos:

  1. Crea una cuenta de servicio nueva según cómo se describe en la sección sobre cómo crear una cuenta de servicio.

  2. Obtén el correo electrónico de la cuenta de servicio. Necesitas el correo electrónico para configurar una instancia que se ejecute como esta cuenta de servicio. Para verificar el correo electrónico de la cuenta de servicio en la consola, sigue estos pasos:

    1. Ve a la página de cuentas de servicio.

      Ir a Cuentas de servicio

    2. Si se te solicita, selecciona un proyecto.

    3. Busca tu cuenta de servicio nueva y toma nota del correo electrónico de la cuenta de servicio.

    Por lo general, el correo electrónico de la cuenta de servicio se deriva del ID de esta cuenta, con el siguiente formato:

    [SERVICE-ACCOUNT-NAME]@[PROJECT_ID].iam.gserviceaccount.com
    
  3. Otorga funciones de IAM a la cuenta de servicio. Si no otorgas ninguna función, la cuenta de servicio no tendrá acceso a ningún servicio. Para obtener una lista completa de las funciones de IAM, consulta la página Comprende las funciones en el documento de IAM.

  4. A continuación, configura una instancia con el fin de que se ejecute como una cuenta de servicio. Sigue las instrucciones para configurar una instancia con el fin de que se ejecute como una cuenta de servicio.

Configura una instancia nueva para que se ejecute como una cuenta de servicio

Después de crear una cuenta de servicio nueva, puedes crear instancias de máquina virtual nuevas para ejecutarlas como cuenta de servicio. Si deseas asignar o cambiar una cuenta de servicio para una instancia existente, consulta la sección sobre cómo cambiar la cuenta de servicio y los niveles de acceso para una instancia.

Puedes habilitar varias instancias de máquina virtual para que usen la misma cuenta de servicio, pero una instancia de máquina virtual solo puede tener una identidad de cuenta de servicio. Si asignas la misma cuenta de servicio a varias instancias de máquina virtual, cualquier cambio posterior que realices en la cuenta de servicio afectará a las instancias que la usen. Esto incluye cualquier cambio que realices en las funciones de IAM otorgadas a la cuenta de servicio. Por ejemplo, si quitas una función, todas las instancias que usen la cuenta de servicio perderán los permisos que otorga esa función.

En general, puedes establecer el permiso de acceso cloud-platform para permitir el acceso a la mayoría de las API de Cloud y, luego, otorgar a la cuenta de servicio solo funciones de IAM relevantes. La combinación de niveles de acceso otorgados a la instancia de máquina virtual y las funciones de IAM otorgadas a la cuenta de servicio determina la cantidad de acceso que tiene la cuenta de servicio para esa instancia. La cuenta de servicio puede ejecutar métodos de la API solo si están permitidos tanto por el nivel de acceso como por sus funciones de IAM.

De forma alternativa, puedes optar por configurar permisos específicos que autoricen el acceso a los métodos particulares de la API a los que llamará el servicio. Por ejemplo, para llamar al método instances.insert, se requiere autorización del alcance https://www.googleapis.com/auth/compute o del alcance https://www.googleapis.com/auth/cloud-platform combinado con una función de IAM que otorga acceso a ese método. Puedes establecer el permiso compute en lugar de cloud-platform, lo que le otorgaría al servicio acceso para llamar a métodos en Compute Engine, pero no le permite llamar a métodos de la API fuera de Compute Engine.

Puedes configurar una instancia nueva para que se ejecute como una cuenta de servicio mediante Google Cloud Console, la herramienta de línea de comandos gcloud o a través de la API.

Console

  1. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. Especifica los detalles de la VM.

  3. En la sección Identidad y acceso a la API, elige la cuenta de servicio que deseas usar de la lista desplegable.

  4. Continúa con el proceso de creación de VM.

gcloud

Para crear una instancia nueva y autorizar a que se ejecute como una cuenta de servicio personalizada mediante la herramienta de línea de comandos de gcloud, proporciona el correo electrónico de la cuenta de servicio y los alcances de acceso de la instancia.

gcloud compute instances create [INSTANCE_NAME] \
    --service-account [SERVICE_ACCOUNT_EMAIL] \
    --scopes [SCOPES,...]

Donde:

  • [SERVICE_ACCOUNT_EMAIL] es el correo electrónico de la cuenta de servicio que deseas usar. Por ejemplo: my-sa-123@my-project-123.iam.gserviceaccount.com. Si no sabes cuál es el correo electrónico, aprende cómo obtener un correo electrónico de cuenta de servicio.
  • [INSTANCE_NAME] es el nombre de la instancia.
  • [SCOPES] es una lista separada por comas de URI de alcance completo o alias de alcance proporcionados en la descripción de la marca --scopes.

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

La herramienta de gcloud también ofrece alias de alcance en lugar de los URI de mayor alcance. Por ejemplo, el alcance del acceso completo a Cloud Storage es https://www.googleapis.com/auth/devstorage.full_control. El alias de este alcance es storage-full.

Puedes ver una lista de alcances y alias de alcance en la página instances create de la descripción de la marca --scopes. Con la ayuda del comando instances create, también se genera una lista de estos alcances y alias:

gcloud compute instances create --help

Especifica el alias de la misma manera en que lo harías con el URI de alcance normal. Por ejemplo:

gcloud compute instances create [INSTANCE_NAME] \
    --service-account [SERVICE_ACCOUNT_EMAIL] \
    --scopes cloud-platform

API

En la API, genera una solicitud estándar para crear una instancia , pero incluye la propiedad serviceAccounts. Obtén el correo electrónico de tu cuenta de servicio y, luego, inclúyelo en la propiedad email, junto con los niveles de acceso deseados para la instancia.

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances

{
  "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
  "name": "[INSTANCE_NAME]",
  "serviceAccounts": [
   {
    "email": "[SERVICE_ACCOUNT_EMAIL]",
    "scopes": ["https://www.googleapis.com/auth/cloud-platform"]
   }
  ],
  ...
}

Después de configurar una instancia para que se ejecute como cuenta de servicio, puedes usar las credenciales de la cuenta de servicio desde una instancia de varias maneras:

Autentica aplicaciones mediante credenciales de cuenta de servicio

Después de configurar una instancia con el fin de que se ejecute como una cuenta de servicio, puedes usar las credenciales de la cuenta de servicio para autenticar las aplicaciones que se ejecutan en la instancia.

Autentica aplicaciones con una biblioteca cliente

Las bibliotecas cliente pueden usar 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 credenciales de varias fuentes para que pruebes tu aplicación localmente y, luego, la implementes en una instancia de Compute Engine sin cambiar el código de la aplicación. Mientras desarrollas tu aplicación de modo local, esta puede autenticarse mediante una variable de entorno o el SDK de Cloud. Cuando la aplicación se ejecuta en una instancia, puede autenticarse por intermedio de la cuenta de servicio que se habilitó en la instancia.

En este ejemplo, se usa la biblioteca cliente de Python para autenticar y realizar una solicitud a la API de Cloud Storage con el fin de enumerar los depósitos en un proyecto. En el ejemplo, se usa el siguiente procedimiento:

  1. Obtener las credenciales de autenticación necesarias para la API de Cloud Storage y, a continuación, inicializar el servicio de Cloud Storage con el método build() y las credenciales
  2. Enumerar los depósitos en Cloud Storage

Puedes ejecutar este ejemplo en una instancia que tenga acceso para administrar depósitos en Cloud Storage.

.

import argparse

import googleapiclient.discovery

def create_service():
    # Construct the service object for interacting with the Cloud Storage API -
    # the 'storage' service, at version 'v1'.
    # Authentication is provided by application default credentials.
    # When running locally, these are available after running
    # `gcloud auth application-default login`. When running on Compute
    # Engine, these are available from the environment.
    return googleapiclient.discovery.build('storage', 'v1')

def list_buckets(service, project_id):
    buckets = service.buckets().list(project=project_id).execute()
    return buckets

def main(project_id):
    service = create_service()
    buckets = list_buckets(service, project_id)
    print(buckets)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('project_id', help='Your Google Cloud Project ID.')

    args = parser.parse_args()

    main(args.project_id)

Autentica aplicaciones directamente con tokens de acceso

Para algunas aplicaciones, es posible que debas solicitar un token de acceso OAuth2 y usarlo sin pasar por una biblioteca cliente, o usar las herramientas gcloud o gsutil. Hay varias opciones para obtener y usar estos tokens de acceso con el objetivo de autenticar tus aplicaciones. Por ejemplo, puedes usar curl con el objetivo de crear una solicitud simple o usar un lenguaje de programación, como Python, para lograr una mayor flexibilidad.

cURL

Para usar curl con el fin de solicitar un token de acceso y enviar una solicitud a una API, sigue estos pasos:

  1. En la instancia donde se ejecuta tu aplicación, usa el siguiente comando para realizar una consulta al servidor de metadatos con el fin de obtener un token de acceso:

    $ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \
    -H "Metadata-Flavor: Google"

    La solicitud muestra una respuesta similar a la siguiente:

    {
          "access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_QtAS08i85nHq39HE3C2LTrCARA",
          "expires_in":3599,
          "token_type":"Bearer"
     }
  2. Copia el valor de la propiedad access_token de la respuesta y úsalo para enviar solicitudes a la API. Por ejemplo, la siguiente solicitud imprime una lista de instancias de tu proyecto desde una zona determinada:

    $ curl https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances \
    -H "Authorization":"Bearer [ACCESS_TOKEN]"
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • [PROJECT_ID] es el ID del proyecto de esta solicitud.
    • [ZONE] es la zona desde la cual se enumeran las instancias.
    • [ACCESS_TOKEN] es el valor del token de acceso que obtuviste en el paso 1.

    Para obtener información sobre los parámetros que puedes configurar en tu solicitud, consulta el documento de los parámetros.

Python

En este ejemplo, se muestra cómo solicitar un token para acceder a la API de Cloud Storage en una aplicación de Python. En el ejemplo, se usa el siguiente procedimiento:

  1. Solicitar un token de acceso al servidor de metadatos
  2. Extrae el token de acceso de la respuesta del servidor.
  3. Usa el token de acceso para realizar una solicitud a Cloud Storage.
  4. Si la solicitud es exitosa, la secuencia de comandos imprime la respuesta

import argparse

import requests

METADATA_URL = 'http://metadata.google.internal/computeMetadata/v1/'
METADATA_HEADERS = {'Metadata-Flavor': 'Google'}
SERVICE_ACCOUNT = 'default'

def get_access_token():
    url = '{}instance/service-accounts/{}/token'.format(
        METADATA_URL, SERVICE_ACCOUNT)

    # Request an access token from the metadata server.
    r = requests.get(url, headers=METADATA_HEADERS)
    r.raise_for_status()

    # Extract the access token from the response.
    access_token = r.json()['access_token']

    return access_token

def list_buckets(project_id, access_token):
    url = 'https://www.googleapis.com/storage/v1/b'
    params = {
        'project': project_id
    }
    headers = {
        'Authorization': 'Bearer {}'.format(access_token)
    }

    r = requests.get(url, params=params, headers=headers)
    r.raise_for_status()

    return r.json()

def main(project_id):
    access_token = get_access_token()
    buckets = list_buckets(project_id, access_token)
    print(buckets)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('project_id', help='Your Google Cloud project ID.')

    args = parser.parse_args()

    main(args.project_id)

Los tokens de acceso vencen después de un período corto. El servidor de metadatos almacena en caché los tokens de acceso hasta que queden 5 minutos de tiempo restante antes de que venzan. Puedes solicitar nuevos tokens con la frecuencia que desees, pero tus aplicaciones deben tener un token de acceso válido para que sus llamadas a la API tengan éxito.

Autentica herramientas en una instancia mediante una cuenta de servicio

Algunas aplicaciones pueden usar comandos de las herramientas gcloud y gsutil, que están configurados de forma predeterminada en la mayoría de las imágenes de Compute Engine. Estas herramientas reconocen automáticamente la cuenta de servicio de una instancia y los permisos relevantes otorgados a la cuenta de servicio. De manera específica, si otorgas las funciones correctas a la cuenta de servicio, podrás usar las herramientas de gcloud y gsutil de tus instancias sin necesidad de emplear gcloud auth login.

Este reconocimiento de cuenta de servicio se realiza automáticamente y se aplica solo a las herramientas de gcloud y gsutil que se incluyen con la instancia. Si creas herramientas nuevas o agregas herramientas personalizadas, debes autorizar tu aplicación mediante una biblioteca cliente o por intermedio de tokens de acceso directamente en tu aplicación.

Para aprovechar el reconocimiento automático de la cuenta de servicio, otorga las funciones de IAM apropiadas a esa cuenta y configura una instancia para que se ejecute como una cuenta de servicio. Por ejemplo, si otorgas la función roles/storage.objectAdmin a una cuenta de servicio, la herramienta de gsutil puede administrar y acceder automáticamente a los objetos de Cloud Storage.

Del mismo modo, si habilitas roles/compute.instanceAdmin.v1 en la cuenta de servicio, la herramienta de gcloud compute podrá administrar las instancias de forma automática.

Cambia la cuenta de servicio y los niveles de acceso para una instancia

Si deseas ejecutar la VM como una identidad diferente o determinas que la instancia necesita un conjunto diferente de alcances para llamar a las API requeridas, puedes cambiar la cuenta de servicio y los niveles de acceso de una instancia existente. Por ejemplo, puedes cambiar los permisos de acceso para otorgar acceso a una API nueva, quitar la cuenta de servicio y los permisos de acceso a fin de evitar que una VM acceda a cualquier servicio de Google Cloud, o puedes cambiar un VM para que se ejecute como una cuenta de servicio que creaste en lugar de la cuenta de servicio predeterminada de Compute Engine. Sin embargo, Google recomienda que uses las políticas de IAM detalladas en lugar de depender de los permisos de acceso para controlar el acceso a los recursos de la cuenta de servicio.

Para cambiar la cuenta de servicio de una instancia y los niveles de acceso, la instancia debe detenerse temporalmente. Con el fin de detener tu instancia, lee el documento con información sobre cómo detener una instancia. Después de cambiar la cuenta de servicio o los niveles de acceso, no olvides reiniciar la instancia. Usa uno de los siguientes métodos para cambiar la cuenta de servicio o los niveles de acceso de la instancia detenida.

Console

  1. Ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el nombre de la instancia de VM para la que deseas cambiar la cuenta de servicio.

  3. Si la instancia no se detiene, haz clic en Detener. Espera a que se detenga la instancia.

  4. Luego, haz clic en Editar.

  5. Desplázate hacia abajo hasta la sección Cuenta de servicio.

  6. En la lista desplegable, selecciona la cuenta de servicio que se asignará a la instancia.

    • Si eliges la cuenta de servicio predeterminada, puedes modificar los permisos de acceso en Cloud Console.
      • Para cambiar los permisos, en la sección Permiso de acceso, selecciona Configurar acceso para cada API y configura los permisos adecuados según tus necesidades.
      • Si no sabes con certeza qué niveles de acceso configurar, elige Permitir acceso completo a todas las API de Cloud y, luego, asegúrate de restringir el acceso mediante la configuración de las funciones de IAM en la cuenta de servicio.
    • Si eliges una cuenta de servicio diferente, el permiso de acceso de la VM se establecerá de forma predeterminada en el permiso cloud-platform. Puedes modificar el permiso mediante la herramienta de gcloud o la API de Compute Engine.
    • Para obtener más información sobre la configuración de los permisos de acceso, consulta Prácticas recomendadas.
  7. Haz clic en Guardar para guardar los cambios.

gcloud

Usa el comando instances set-service-account y proporciona el nombre de la instancia, el correo electrónico de la cuenta de servicio y los alcances deseados. Para obtener más información sobre la configuración de los permisos de acceso, consulta Prácticas recomendadas.

gcloud compute instances set-service-account [INSTANCE_NAME] \
   [--service-account [SERVICE_ACCOUNT_EMAIL] | --no-service-account] \
   [--no-scopes | --scopes [SCOPES,...]]

Donde:

  • [SERVICE_ACCOUNT_EMAIL] es el correo electrónico de la cuenta de servicio que deseas usar. Por ejemplo: my-sa-123@my-project-123.iam.gserviceaccount.com
  • [INSTANCE_NAME] es el nombre de la instancia.
  • [SCOPES] es una lista separada por comas de URI de alcance completo o alias de alcance proporcionados en la descripción de la marca --scopes. Si quieres quitar todos los permisos de la instancia, usa la marca --no-scopes en su lugar.

Por ejemplo, el siguiente comando permite asignar la cuenta de servicio my-sa-123@my-project-123.iam.gserviceaccount.com a una instancia llamada example‑instance y establecer permisos de acceso en ella para permitir el acceso de lectura/escritura a Compute Engine y el acceso de solo lectura a Cloud Storage:

gcloud compute instances set-service-account example-instance \
   --service-account my-sa-123@my-project-123.iam.gserviceaccount.com \
   --scopes compute-rw,storage-ro

API

En la API, realiza una solicitud POST al método setServiceAccount:

https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setServiceAccount

En el ejemplo anterior, se ilustra lo siguiente:

  • [PROJECT_ID] es el ID del proyecto de esta solicitud.
  • [ZONE] es la zona a la que pertenece esta instancia.
  • [INSTANCE_NAME] es el nombre de la instancia.

En el cuerpo de la solicitud, proporciona la dirección de correo electrónico de la cuenta de servicio y los URI de alcance deseados para la instancia. Para obtener más información sobre la configuración de los permisos de acceso, consulta Prácticas recomendadas.

{
  "email": "[SERVICE_ACCOUNT_EMAIL]",
  "scopes": [
    "[SCOPE_URI]",
    "[SCOPE_URI]",
    ...
  ]
}

Por ejemplo, la siguiente solicitud utiliza el correo electrónico de la cuenta de servicio my-sa-123@my-project-123.iam.gserviceaccount.com y establece un alcance de Cloud Storage y BigQuery:

{
  "email": "my-sa-123@my-project-123.iam.gserviceaccount.com",
  "scopes": [
    "https://www.googleapis.com/auth/bigquery",
    "https://www.googleapis.com/auth/devstorage.read_only"
  ]
}

Obtén un correo electrónico de cuenta de servicio

Para identificar una cuenta de servicio, necesitas el correo electrónico de la cuenta de servicio. Obtén un correo electrónico de cuenta de servicio a través de una de las siguientes opciones:

Console

  1. Ve a la página de cuentas de servicio.

    Ir a Cuentas de servicio

  2. Si se te solicita, selecciona un proyecto. En la página de cuentas de servicio se enumeran todas las cuentas de servicio del proyecto y sus correos electrónicos.

gcloud

Usa el comando gcloud compute instances describe de tu máquina local:

gcloud compute instances describe [INSTANCE_NAME] --format json
{
      ...
      "serviceAccounts":[
         {
            "email":"123845678986-compute@developer.gserviceaccount.com",
            "scopes":[
               "https://www.googleapis.com/auth/devstorage.full_control"
            ]
         }
      ]
      ...
   }

Si la instancia no usa una cuenta de servicio, recibirás una respuesta sin la propiedad serviceAccounts.

Servidor de metadatos

Consulta el servidor de metadatos desde la propia instancia. Haz una solicitud a http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/:

user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" \
-H "Metadata-Flavor: Google"

Si habilitaste una o más cuentas de servicio cuando creaste la instancia, este comando curl mostrará un resultado similar al siguiente:

123845678986-compute@developer.gserviceaccount.com/
default/

Si la instancia no usa una cuenta de servicio, recibirás una respuesta vacía.

API

Realiza una solicitud a la API de cuentas de servicio.

Usa la cuenta de servicio predeterminada de Compute Engine

Si estás familiarizado con la cuenta de servicio predeterminada de Compute Engine y deseas usar las credenciales proporcionadas por la cuenta de servicio predeterminada en lugar de crear cuentas de servicio nuevas, puedes otorgar funciones de IAM a la cuenta de servicio predeterminada.

De manera predeterminada, todas las instancias de Compute Engine pueden ejecutarse como la cuenta de servicio predeterminada. Cuando creas una instancia con la herramienta de línea de comandos de gcloud o Cloud Console y omites las especificaciones de la cuenta de servicio, la cuenta de servicio predeterminada se asigna a la instancia.

Antes de asignar funciones de IAM a la cuenta de servicio predeterminada, ten en cuenta la siguiente información:

  • Otorgar una función de IAM a la cuenta de servicio predeterminada afecta a todas las instancias que se ejecutan como cuenta de servicio predeterminada. Por ejemplo, si le otorgas a la cuenta de servicio predeterminada la función roles/storage.objectAdmin, todas las instancias que se ejecutan como la cuenta de servicio predeterminada con los niveles de acceso requeridos tendrán los permisos que les otorga la función roles/storage.objectAdmin. Del mismo modo, si limitas el acceso por omisión de ciertas funciones, esto afectará a todas las instancias que se ejecutan como cuenta de servicio predeterminada.

  • Debes revocar el permiso de editor del proyecto para la cuenta de servicio. La cuenta de servicio predeterminada se agrega como editor de proyecto a los proyectos de manera predeterminada. Para usar las funciones de IAM, debes revocar el permiso de editor del proyecto.

Si no estás seguro de otorgar funciones de IAM a la cuenta de servicio predeterminada, crea una nueva cuenta de servicio.

Sigue estas instrucciones para otorgar una función de IAM a la cuenta de servicio predeterminada:

  1. En Google Cloud Console, ve a la página IAM.

    Ir a IAM

  2. Si se te solicita, selecciona un proyecto.

  3. Busca la cuenta de servicio denominada Cuenta de servicio predeterminada de Compute Engine.

  4. En la columna Funciones, expande el menú desplegable para la cuenta de servicio predeterminada de Compute Engine.

  5. Quita el acceso de editor y guarda tus cambios.

  6. A continuación, otorga funciones de IAM a la cuenta de servicio.

Cualquier instancia de máquina virtual que se esté ejecutando en la actualidad como cuenta de servicio predeterminada tendrá ahora acceso a otras API de Google Cloud, de acuerdo con las funciones de IAM que le otorgaste a la cuenta.

Si deseas configurar una instancia nueva para que se ejecute como cuenta de servicio predeterminada, sigue estas instrucciones:

Console

  1. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. Especifica los detalles de la VM.

  3. En la sección Identidad y acceso a la API, elige Cuenta de servicio predeterminada de Compute Engine de la lista desplegable Cuenta de servicio.

  4. Continúa con el proceso de creación de VM.

gcloud

Para crear una instancia nueva y autorizar el acceso completo a todos los servicios de Google Cloud mediante la cuenta de servicio predeterminada, usa el siguiente comando:

gcloud compute instances create [INSTANCE_NAME] \
     --scopes cloud-platform

API

En la API, genera una solicitud estándar para crear una instancia , pero incluye la propiedad serviceAccounts. Obtén tu ID de cuenta de servicio predeterminada y, luego, inclúyela como el email de la cuenta de servicio. Luego, establece uno o más alcances en la propiedad scopes.

POST https://compute.googleapis.com/compute/v1/projects/zones/[ZONE]/instances

{
  "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
  "name": "[INSTANCE_NAME]",
  "serviceAccounts": [
   {
    "email": "[DEFAULT_SERVICE_ACCOUNT_EMAIL]",
    "scopes": ["https://www.googleapis.com/auth/cloud-platform"]
   }
  ],
  ...
}

Prácticas recomendadas

  • Google recomienda que cada instancia de VM que necesite llamar a una API de Google se ejecute como una cuenta de servicio con los permisos mínimos necesarios para que esa VM haga su trabajo.
  • Sigue estas instrucciones a fin de configurar cuentas de servicio para las VM:

    1. Crea una cuenta de servicio nueva en lugar de usar la predeterminada de Compute Engine.
    2. Otorga funciones de IAM a esa cuenta de servicio solo para los recursos que necesita.
    3. Configura la VM para que se ejecute como la cuenta de servicio nueva que creaste.
    4. Otorga el alcance https://www.googleapis.com/auth/cloud-platform a tu VM para permitir el acceso a la mayoría de las API de Google Cloud, de modo que los permisos de IAM de la VM estén determinados por completo por las funciones de IAM que otorgaste a la cuenta de servicio de las VM. La cuenta de servicio solo puede ejecutar los métodos de la API que permitan el nivel de acceso y las funciones específicas de IAM de la cuenta de servicio.
  • Limita los privilegios de las cuentas de servicio y verifica con regularidad los permisos de tu cuenta de servicio para asegurarte de que estén actualizados.

  • Borra las cuentas de servicio con cuidado. Asegúrate de que tus aplicaciones importantes ya no usen la cuenta de servicio antes de borrarla. Si no estás seguro de si se está usando una cuenta de servicio, te recomendamos que inhabilites la cuenta de servicio en lugar de borrarla. Las cuentas de servicio inhabilitadas se pueden volver a habilitar si aún son necesarias.

  • Mitiga los riesgos de seguridad para la cuenta de servicio. Si quieres obtener más información, consulta Prácticas recomendadas para proteger las cuentas de servicio.

¿Qué sigue?

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