Crea y habilita cuentas de servicio para instancias

Las aplicaciones que se ejecutan en tus instancias pueden usar una cuenta de servicio para autorizar a las API de Google Cloud Platform y, también, interactuar con estas. Las cuentas de servicio con las funciones necesarias de Identity and Access Management (IAM) pueden permitir que el código de tu 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 nueva cuenta de servicio

Puedes crear y configurar una nueva cuenta de servicio con Google Cloud Identity and Access Management (IAM). Después de crear una cuenta, otorga a la cuenta 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 como se describe en la documentación de Cuentas de servicio de IAM.

  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. Dirígete a la página Cuentas de servicio en GCP Console.

      Ir a la página 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 sección Comprende las funciones en la documentación 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 documentación Cambia 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.

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

Console

  1. En GCP Console, ve a la página VM Instances.

    Ir a la página Instancias de VM

  2. Haz clic en Crear instancia.
  3. En la página Crear una instancia nueva, llena las propiedades que quieras para tu instancia.
  4. En la sección Identidad y acceso a la API, elige la cuenta de servicio que deseas usar de la lista desplegable.
  5. Haz clic en Crear para crear la instancia.

gcloud

Para crear una instancia nueva y autorizarla con el fin de que se ejecute como una cuenta de servicio personalizada con la herramienta de línea de comandos de gcloud, proporciona el correo electrónico de la cuenta de servicio y los niveles de acceso deseados para esa instancia. En general, puedes configurar directamente el nivel de acceso a cloud-platform. 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 una 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 la función de IAM.

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

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 los URI de alcance completos o los alias de alcance provistos en la descripción del marcador --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 alcance más largos. Por ejemplo, el alcance para el acceso completo a Google 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, en la descripción del marcador --scopes. La ayuda para el comando de instances create también enumera estos alcances y alias:

gcloud compute instances create --help

Especifica el alias de la misma manera que especificarías 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, realiza 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, también, inclúyelo en la propiedad email, junto con los alcances de acceso deseados para la instancia. En general, puedes configurar directamente el nivel de acceso a cloud-platform. La combinación de niveles de acceso y funciones de IAM otorgados a la cuenta de servicio determina la cantidad de acceso que tiene una 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 la función de IAM.

De forma alternativa, puedes optar por configurar alcances específicos que autoricen el acceso a los métodos de la API particulares 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. Puedes establecer el alcance compute en lugar del alcance cloud-platform, lo que otorgaría autorización al servicio para llamar a métodos en Compute Engine, pero no lo autorizaría a llamar a métodos de la API fuera de Compute Engine.

POST https://www.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": "[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 las 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 múltiples fuentes para que puedas probar tu aplicación de forma local y, luego, implementarla en una instancia de Compute Engine sin cambiar el código de la aplicación. Mientras desarrollas tu aplicación de forma local, la aplicación puede autenticarse mediante una variable de entorno o el SDK de Google Cloud. Cuando tu aplicación se ejecuta en una instancia, puede autenticarse con 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, luego, 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 Google 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 directamente sin pasar por una biblioteca cliente o usar las herramientas de 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 fin de crear una solicitud simple o puedes usar un lenguaje de programación como Python para 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 en tu proyecto desde una zona determinada:

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

    donde:

    • [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 la documentación de parámetros.

Python

En este ejemplo, se muestra cómo solicitar un token para acceder a la API de Google 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. Extraer el token de acceso de la respuesta del servidor
  3. Usar el token de acceso para realizar una solicitud a Google 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 60 segundos 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 de gcloud y gsutil, que se incluyen de manera 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. Específicamente, si otorgas las funciones correctas a la cuenta de servicio, puedes usar las herramientas de gcloud y gsutil de tus instancias sin tener que usar gcloud auth login.

Este reconocimiento de cuenta de servicio ocurre automáticamente y se aplica solo a las herramientas de gcloud y gsutil que se incluyen en la instancia. Si creas herramientas nuevas o agregas herramientas personalizadas, debes autorizar tu aplicación mediante una biblioteca cliente o mediante 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 la cuenta de servicio y configura una instancia para que se ejecute como una cuenta de servicio. Por ejemplo, si otorgas a una cuenta de servicio la función roles/storage.objectAdmin, la herramienta de gsutil puede, de forma automática, administrar los objetos de Google Cloud Storage y acceder a estos.

Del mismo modo, si habilitas roles/compute.instanceAdmin.v1 para la cuenta de servicio, la herramienta de gcloud compute puede administrar automáticamente las instancias.

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 niveles de acceso para otorgar acceso a una API nueva, o cambiar una instancia con el fin de que se ejecute como una cuenta de servicio que hayas creado, en lugar de la cuenta de servicio predeterminada de Compute Engine.

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 la documentación para Detener una instancia. Después de cambiar la cuenta de servicio o los niveles de acceso, recuerda 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. Dirígete a la página Instancias de VM en Compute Engine.

    Ir a la página de VM Instances

  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 el botón Detener. Espera a que se detenga la instancia.
  4. Luego, haz clic en el botón Editar.
  5. Desplázate hacia abajo hasta la sección Cuenta de servicio.
  6. En el menú desplegable, selecciona la cuenta de servicio deseada.
  7. Para cambiar los niveles, en la sección Niveles de acceso, configura los niveles adecuados según tus necesidades. Como práctica recomendada, especifica solo los niveles de acceso que requiere tu instancia de VM. Si no estás seguro 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.
  8. Haz clic en el botón Guardar para guardar tus 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 niveles deseados. También puedes quitar la cuenta de servicio y los niveles de acceso de una instancia, lo que evita de forma efectiva que la instancia acceda a cualquiera de los servicios de Google Cloud Platform:

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 los URI de alcance completos o los alias de alcance provistos en la descripción del marcador --scopes. Si deseas quitar todos los alcances de la instancia, usa el marcador --no-scopes.

Por ejemplo, el siguiente comando asigna la cuenta de servicio my-sa-123@my-project-123.iam.gserviceaccount.com a una instancia llamada example-instance y establece los niveles de acceso en esa instancia para permitir acceso de lectura y escritura a Compute Engine y acceso de solo lectura a Google 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://www.googleapis.com/compute/v1/projects[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setServiceAccount

donde:

  • [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.

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

Por ejemplo, la siguiente solicitud usa el correo electrónico de la cuenta de servicio my-sa-123@my-project-123.iam.gserviceaccount.com y configura un alcance de Google Cloud Storage y Google 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. Dirígete a la página Cuentas de servicio en GCP Console.

    Ir a la página Cuentas de servicio

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

gcloud

Usa el comando gcloud compute instances describe desde 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 de curl muestra 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 con GCP Console, y omites cualquier especificación de la cuenta de servicio, se asigna la cuenta de servicio predeterminada 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 otorgas la función roles/storage.objectAdmin a la cuenta de servicio predeterminada, todas las instancias que se ejecuten como cuenta de servicio predeterminada con los niveles de acceso requeridos tendrán permisos otorgados por la función roles/storage.objectAdmin. Del mismo modo, si limitas el acceso omitiendo 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 que deseas otorgar funciones de IAM a la cuenta de servicio predeterminada, debes crear una cuenta de servicio nueva.

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

  1. Dirígete a la página IAM en GCP Console.

    Ir a la página 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 actualmente como cuenta de servicio predeterminada tendrá ahora acceso a otras API de Google Cloud Platform 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. En GCP Console, ve a la página VM Instances.

    Ir a la página Instancias de VM

  2. Haz clic en Crear instancia.
  3. En la página Crear una instancia nueva, llena las propiedades que quieras para tu instancia.
  4. En la sección Identidad y acceso a la API, elige la cuenta de servicio predeterminada de Compute Engine de la lista desplegable.
  5. Haz clic en Crear para crear la instancia.

gcloud

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

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

API

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

POST https://www.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

En general, Google recomienda que cada instancia que necesite llamar a una API de Google se ejecute como una cuenta de servicio con los permisos mínimos necesarios para que esa instancia haga su trabajo. En la práctica, esto significa que debes configurar cuentas de servicio para tus instancias con el siguiente proceso:

  1. Crea una cuenta de servicio nueva en lugar de usar la cuenta de servicio predeterminada de Compute Engine.
  2. Otorga funciones de IAM a esa cuenta de servicio solo para los recursos que necesita.
  3. Configura la instancia para que se ejecute como esa cuenta de servicio.
  4. Otorga a la instancia el alcance https://www.googleapis.com/auth/cloud-platform para permitir el acceso completo a todas las API de Google Cloud, de modo que los permisos de IAM de la instancia estén completamente determinados por las funciones de IAM de la cuenta de servicio.

Evita otorgar más acceso del necesario y verifica periódicamente los permisos de tu cuenta de servicio para estar seguro de que estén actualizados.

Qué sigue

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Compute Engine