Gestionar el acceso a los recursos de Compute Engine


En esta página se describe cómo puedes aplicar el principio de mínimos privilegios concediendo acceso a recursos específicos de Compute Engine en lugar de conceder acceso a un recurso superior, como un proyecto, una carpeta o una organización.

Para conceder acceso a un recurso, debes definir una política de Gestión de Identidades y Accesos (IAM) en el recurso. La política vincula uno o varios miembros, como un usuario o una cuenta de servicio, a uno o varios roles. Cada rol contiene una lista de permisos que permiten al miembro interactuar con el recurso.

Si concedes acceso a un recurso principal (por ejemplo, a un proyecto), también se concederá acceso a todos sus recursos secundarios (por ejemplo, a todas las máquinas virtuales de ese proyecto). Para limitar el acceso a los recursos, define políticas de gestión de identidades y accesos en los recursos de nivel inferior siempre que sea posible, en lugar de hacerlo a nivel de proyecto o superior.

Para obtener información general sobre cómo conceder, cambiar y revocar el acceso a recursos que no estén relacionados con Compute Engine (por ejemplo, para conceder acceso a un Google Cloud proyecto), consulta la documentación de IAM sobre cómo conceder, cambiar y revocar el acceso a los recursos.

Antes de empezar

  • Consulta la descripción general de IAM.
  • Consulta la descripción general del control de acceso de Compute Engine.
  • Familiarízate con los roles de gestión de identidades y accesos de Compute Engine .
  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos 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. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Roles obligatorios

Para obtener los permisos que necesitas para gestionar el acceso a los recursos de Compute Engine, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de Compute (roles/compute.admin) en el recurso. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para gestionar el acceso a los recursos de Compute Engine. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para gestionar el acceso a los recursos de Compute Engine, se necesitan los siguientes permisos:

  • Para conceder o revocar el acceso a los recursos, sigue estos pasos:
    • compute.projects.get en el proyecto
    • compute.RESOURCE_TYPE.get en el recurso
    • compute.RESOURCE_TYPE.getIamPolicy en el recurso
    • compute.RESOURCE_TYPE.setIamPolicy en el recurso
  • Para probar los permisos de la persona que llama, haz lo siguiente: compute.RESOURCE_TYPE.getIamPolicy en el recurso

    Sustituye RESOURCE_TYPE por el recurso al que quieras gestionar el acceso. Por ejemplo, instances, instanceTemplates o images.

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Recursos compatibles

Para ver una lista de recursos de Compute Engine que admiten el control de acceso a nivel de recurso, consulta Tipos de recursos que aceptan políticas de gestión de identidades y accesos y filtra por Compute Engine.

En el caso de otros recursos de Compute Engine que no admitan el control de acceso a nivel de recurso, debes gestionar el acceso a esos recursos a nivel de proyecto, carpeta u organización. Para obtener información sobre organizaciones, carpetas o proyectos, consulta el artículo Jerarquía de recursos.

Conceder acceso a los recursos de Compute Engine

Una entidad principal, como un usuario o una cuenta de servicio, puede acceder a los recursos de Compute Engine. Una identidad es una propiedad de una entidad. La identidad de un principal se representa normalmente mediante una dirección de correo asociada a la cuenta.

Antes de asignar un rol de gestión de identidades y accesos a una entidad principal en un recurso, comprueba qué roles se pueden asignar en ese recurso concreto. Para obtener más información, consulta el artículo sobre cómo ver los roles que se pueden asignar a los recursos.

Para conceder permiso para acceder a recursos de Compute Engine específicos, define una política de gestión de identidades y accesos en el recurso.

Consola

  1. En la Google Cloud consola, ve a la página del recurso correspondiente al que quieras añadir permisos.
  2. Seleccione las casillas situadas junto a los recursos que quiera actualizar.
  3. Sigue los pasos que se indican en la página de recursos.
    • En el caso de las instancias de VM, haz clic en Permisos.
    • En cuanto al resto de los recursos, siga estos pasos:
      1. Comprueba si el panel de información está visible. Si no aparece, haz clic en Mostrar panel de información.
      2. Selecciona la pestaña Permisos.
  4. Haz clic en Añadir principal.
  5. Añade la identidad de la cuenta principal y selecciona el rol necesario.
  6. Para guardar los cambios, haz clic en Guardar.

gcloud

Para asignar un rol a una entidad en un recurso, usa el subcomando add-iam-policy-binding de ese recurso con las marcas --member y --role.

gcloud compute RESOURCE_TYPE add-iam-policy-binding RESOURCE_NAME \
    --member='PRINCIPAL' \
    --role='ROLE'

Haz los cambios siguientes:

  • RESOURCE_TYPE: el tipo de recurso. Los valores válidos son los siguientes:
    • disks
    • images
    • instances
    • instance-templates
    • machine-images
    • reservations
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • RESOURCE_NAME: el nombre del recurso. Por ejemplo, my_instance.
  • PRINCIPAL: una identidad válida de la cuenta principal a la que quieres asignar el rol. Debe tener el formato user|group|serviceAccount:EMAIL_ADDRESS o domain:DOMAIN_ADDRESS. Por ejemplo:
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: el rol que se asignará a esta entidad.

Si vas a conceder acceso a un recurso que está en versión preliminar, usa el comando gcloud beta compute.

REST

Para modificar una política de gestión de identidades y accesos a través de la API, haz lo siguiente:

  1. Lee la política actual con el método getIamPolicy correspondiente del recurso. Por ejemplo, la siguiente solicitud HTTP lee la política de gestión de identidades y accesos de una VM:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:getIamPolicy

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta VM.
    • ZONE: la zona de la VM. Para los recursos regionales o globales, sustituye zones/ZONE por regions/REGION o global.
    • VM_NAME: el nombre de la instancia de VM.

    Compute Engine devuelve la política actual en la respuesta.

  2. Edita la política con un editor de texto para añadir o quitar principales y sus roles asociados. Por ejemplo, para asignar el rol compute.admin a email@example.com, añade la siguiente vinculación a la política:

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.admin"
    }
    
  3. Escribe la política actualizada con setIamPolicy():

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:setIamPolicy

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta VM.
    • ZONE: la zona de la VM. Para los recursos regionales o globales, sustituye zones/ZONE por regions/REGION o global.
    • VM_NAME: el nombre de la instancia de VM.

    En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

Revocar el acceso a los recursos

Como práctica recomendada, cuando las entidades de seguridad ya no necesiten acceder a tus recursos de Compute Engine, revoca su acceso.

Consola

  1. En la Google Cloud consola, ve a la página del recurso correspondiente al que quieras añadir permisos.
  2. Seleccione las casillas situadas junto a los recursos que quiera actualizar.
  3. Sigue los pasos que se indican en la página de recursos.
    • En el caso de las instancias de VM, haz clic en Permisos.
    • En cuanto al resto de los recursos, siga estos pasos:
      1. Comprueba si el panel de información está visible. Si no aparece, haz clic en Mostrar panel de información.
      2. Selecciona la pestaña Permisos.
  4. Haz clic en la tarjeta del rol del que quieras quitar principales. Se desplegará la tarjeta y se mostrarán los usuarios que tienen ese rol en ese recurso.
  5. Para quitar un principal de ese rol, haz clic en Eliminar.

gcloud

Para quitar un rol de una entidad de un recurso, usa el subcomando remove-iam-policy-binding del recurso con las marcas --member y --role.

gcloud compute RESOURCE_TYPE remove-iam-policy-binding RESOURCE_NAME \
    --member='MEMBER' \
    --role='ROLE'

Haz los cambios siguientes:

  • RESOURCE_TYPE: tipo de recurso. Los valores válidos son los siguientes:
    • disks
    • images
    • instances
    • instance-templates
    • machine-images
    • reservations
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • RESOURCE_NAME: nombre del recurso. Por ejemplo, my_instance.
  • PRINCIPAL: una identidad válida para la entidad de seguridad. Debe tener el formato user|group|serviceAccount:EMAIL_ADDRESS o domain:DOMAIN_ADDRESS. Por ejemplo:
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: rol del que quieres quitar el principal.

Si vas a revocar el acceso a un recurso que está en versión preliminar, usa el comando gcloud beta compute.

REST

Para modificar una política de gestión de identidades y accesos directamente a través de la API, haz lo siguiente:

  1. Lee la política actual con el método getIamPolicy correspondiente del recurso. Por ejemplo, la siguiente solicitud HTTP lee la política de gestión de identidades y accesos de una VM:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:getIamPolicy

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta VM.
    • ZONE: la zona de la VM. Para los recursos regionales o globales, sustituye zones/ZONE por regions/REGION o global.
    • VM_NAME: el nombre de la instancia de VM.

    Compute Engine devuelve la política actual en la respuesta.

  2. Edita la política con un editor de texto para quitar miembros de los roles asociados. Por ejemplo, para quitar email@example.com del rol compute.admin, sigue estos pasos:

    {
      "members": [
        "user:owner@example.com"
      ],
      "role":"roles/compute.admin"
    }
    
  3. Escribe la política actualizada con setIamPolicy():

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:setIamPolicy

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta VM.
    • ZONE: la zona de la VM. Para los recursos regionales o globales, sustituye zones/ZONE por regions/REGION o global.
    • VM_NAME: el nombre de la instancia de VM.

    En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

Probar si un llamador tiene permisos

Si no sabes qué permisos tiene una identidad, usa el método de la API testIamPermissions para comprobar qué permisos están disponibles para una identidad.

El método toma una URL de recurso y un conjunto de permisos como parámetros de entrada, y devuelve el conjunto de permisos que tiene el llamante. Puedes usar este método en cualquiera de los recursos admitidos.

Normalmente, testIamPermissions se integra con tu software propietario, como una interfaz gráfica de usuario personalizada. Normalmente, no llamas a testIamPermissions si usas Google Clouddirectamente para gestionar los permisos.

Por ejemplo, si estás creando una interfaz gráfica de usuario (GUI) sobre la API de Compute Engine y tu GUI tiene un botón "Iniciar" que inicia una instancia, puedes llamar a compute.instances.testIamPermissions() para determinar si el botón debe estar habilitado o inhabilitado.

Para comprobar si un llamante tiene permisos específicos en un recurso, sigue estos pasos:

  1. Envía una solicitud al recurso e incluye en el cuerpo de la solicitud una lista de permisos que quieras comprobar.

    Por ejemplo, en una instancia, puedes comprobar compute.instances.start, compute.instances.stop y compute.instances.delete.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/testIamPermissions
        {
          "permissions": [
            "compute.instances.start",
            "compute.instances.stop",
            "compute.instances.delete"
           ]
        }
  2. La solicitud devuelve los permisos que están habilitados para el llamador.

    {
      "permissions": [
        "compute.instances.start",
        "compute.instances.stop"
      ]
    }
    

Modificar el acceso a los recursos de varios miembros

Si quieres modificar el acceso a los recursos de Compute Engine de varios miembros a la vez, consulta las recomendaciones sobre cómo modificar una política de gestión de identidades y accesos mediante programación.

Siguientes pasos