Otorga acceso a los recursos de Compute Engine

Las políticas de Cloud IAM para los recursos de Compute Engine te permiten otorgar acceso a recursos específicos, como instancias de VM, imágenes y discos, mediante la administración de las funciones de Cloud IAM en esos recursos. Esto te brinda la flexibilidad de aplicar el principio de privilegio mínimo, por ejemplo, a fin de otorgarles a colaboradores solo los permisos a los recursos específicos que necesitan para de hacer su trabajo.

Los recursos también heredan las políticas de sus recursos principales. La política vigente para un recurso es la unión de la política establecida en ese recurso y la política heredada de una jerarquía de recursos superior.

Cuando vinculas a un miembro con un recurso o configuras la política en un recurso, los miembros no recibirán un correo electrónico de invitación. En su lugar, el acceso para cada miembro se actualiza directamente.

Consulta la documentación de Cloud IAM para obtener más información sobre los tipos de miembros (como usuarios o grupos) que se pueden incluir en una política de Cloud IAM.

Antes de comenzar

Recursos compatibles

En la actualidad, puedes otorgar acceso a los siguientes recursos de Compute Engine:

También puedes otorgar acceso a los siguientes recursos, pero esta función se encuentra en versión Beta, por lo que debes usar gcloud beta o los comandos de la API Beta asociados:

Agrega y quita vinculaciones de miembros en un recurso

Una vinculación de Cloud IAM en un recurso otorga una función específica a un miembro en ese recurso. Puedes agregar y quitar vinculaciones de Cloud IAM en instancias, imágenes, instantáneas y discos mediante Google Cloud Platform Console y la herramienta de línea de comandos de gcloud.

A fin de actualizar la política de Cloud IAM para todos los miembros de un recurso, consulta la página sobre cómo obtener y configurar la política de un recurso.

Console

  1. Dirígete a la página de recursos correspondiente a la que deseas agregar permisos.
  2. Selecciona las casillas de verificación junto a los recursos que deseas actualizar.
  3. Haz clic en Mostrar panel de información para expandir la columna de permisos.
  4. Para agregar miembros, sigue estos pasos:
    1. En el campo Agregar miembros, agrega uno o más miembros.
    2. En el menú desplegable Seleccionar función, selecciona una o más funciones.
    3. Haz clic en Agregar para guardar los cambios.
  5. Para quitar miembros, haz lo siguiente:
    1. Si el recurso tiene vinculaciones de política para una o más funciones, esas funciones aparecen como tarjetas ampliables. Haz clic en la tarjeta de función de la que deseas quitar uno o más miembros.
    2. Haz clic en el ícono borrar (ícono de borrar que se parece a una papelera) para quitar cada función.

gcloud

Para otorgar una función a un miembro en un recurso, usa el subcomando add-iam-policy-binding con las marcas --member y --role.

gcloud compute [RESOURCE_TYPE] add-iam-policy-binding [RESOURCE_NAME] \
    --member='[MEMBER]' \
    --role='[ROLE]'

Para quitar una vinculación de política, usa el subcomando remove-iam-policy-binding con las marcas --member y --role.

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

Donde:

  • [RESOURCE_TYPE] es el tipo de recurso: disks, images, instances, instance-templates, sole-tenancy node-groups, sole-tenancy node-templates o snapshots.
  • [RESOURCE_NAME] es el nombre del recurso. Por ejemplo, my_instance.
  • [MEMBER] es el miembro al que se agregará la vinculación.
    • Debe tener la forma user|group|serviceAccount:email o domain:domain. Por ejemplo, user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com o domain:example.domain.com.
    • También puede ser uno de los siguientes valores especiales:
      • allUsers: cualquier persona que esté en Internet, con o sin Cuenta de Google
      • allAuthenticatedUsers: cualquiera que se autentique con una Cuenta de Google o una cuenta de servicio
  • [ROLE] es la función que se debe agregar para ese miembro.

Si otorgas acceso a un recurso que se encuentra por el momento en Beta, usa un comando gcloud beta compute en su lugar.

Cómo obtener y configurar la política de un recurso

La política de Cloud IAM para un recurso es un conjunto de instrucciones que define a quién se le otorgó acceso a ese recurso.

Puedes actualizar la política de un recurso mediante el patrón de lectura-modificación-escritura, en el que la política actual de Cloud IAM para un recurso primero se recupera, luego se actualiza y, por último, se configura. Consulta la documentación de Cloud IAM para obtener más información sobre este patrón.

gcloud

Se pueden usar archivos JSON o YAML cuando se ejecutan comandos de gcloud para obtener o configurar la política de un recurso. En los ejemplos de esta sección, se usa JSON.

  1. Recupera la política que deseas modificar mediante la ejecución del subcomando get-iam-policy del recurso.

    gcloud compute [RESOURCE_TYPE] get-iam-policy [RESOURCE_NAME] --format json > policy.json
    

    Donde:

    • [RESOURCE_TYPE] es el tipo de recurso: disks, images, instances, instance-templates o snapshots.
    • [RESOURCE_NAME] es el nombre del recurso.

    Por ejemplo, a fin de recuperar la política de Cloud IAM para un disco llamado example-disk, ejecuta lo siguiente:

    gcloud compute disks get-iam-policy example-disk --format json > policy.json
    
  2. Un archivo de política JSON vacío tendrá un aspecto similar al siguiente. La propiedad etag se usa para verificar si la política cambió desde la última solicitud.

    {
      "etag": "ACAB"
    }
    
  3. Con un editor de texto, actualiza el archivo JSON. Construye un objeto bindings que contenga un arreglo. Cada objeto en el arreglo tiene un arreglo de members y una función asociada para esos miembros. Por ejemplo, para otorgar la función roles/compute.imageUser a los grupos all-devs@example.com y some-devs@other-place.com y otorgar la función roles/compute.storageAdmin a bob@example.com, usa lo siguiente:

    {
      "bindings": [
        {
          "members": [
            "group:all-devs@example.com",
            "group:other-devs@other-place.com"
          ],
          "role": "roles/compute.imageUser"
        },
        {
          "members": [
            "user:bob@example.com"
          ],
          "role": "roles/compute.storageAdmin"
        }
      ],
      "etag": "ACAB"
    }
    
  4. Actualiza la política mediante la ejecución del subcomando set-iam-policy del recurso y proporciona la ruta al archivo JSON que contiene la política nueva. El comando solo puede tener éxito si el valor etag en el archivo JSON coincide con el valor etag actual.

    gcloud compute [RESOURCE_TYPE] set-iam-policy [RESOURCE_NAME] policy.json
    

    Por ejemplo, si se quiere configurar la política de Cloud IAM para un disco llamado example-disk, ejecuta esto:

    gcloud compute disks set-iam-policy example-disk policy.json
    
  5. El comando genera la política actualizada, que incluye un valor etag actualizado.

    bindings:
    - members:
      - user:bob@example.com
        role: roles/compute.storageAdmin
    - members:
      - group:all-devs@example.com
      - group:other-devs@other-place.com
        role: roles/compute.imageUser
    etag: BwUjMhXbSPU=
    

API

Para modificar una política existente, sigue estos pasos:

  1. Recupera la política existente mediante una llamada al método getIamPolicy() del recurso.

    Por ejemplo, en un disco, usa lo siguiente:

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/getIamPolicy
    
  2. La solicitud muestra la política, que incluye un arreglo de bindings (si existen vinculaciones) y un valor etag. La propiedad etag se usa para verificar si la política cambió desde la última solicitud.

    {
      "etag": "BwVvzaUs8EY=",
      "bindings":[
        {
          "role":"roles/compute.storageAdmin",
          "members":[
            "user:bob@example.com",
            "serviceAccount:service-account@my-project.iam.gserviceaccount.com"
          ]
        },
        {
          "role":"roles/compute.imageUser",
          "members":[
            "user:email1@gmail.com",
            "user:email2@gmail.com",
            "user:email3@gmail.com"
          ]
        }
      ]
    }
    
  3. Modifica la política según sea necesario y, luego, configura la política actualizada mediante una llamada a setIamPolicy().

    Por ejemplo, si quieres revocar la función compute.imageUser para email2@gmail.com, la solicitud será similar a la siguiente:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/setIamPolicy

    {
      "etag": "BwVvzaUs8EY=",
      "bindings":[
        {
          "role":"roles/compute.storageAdmin",
          "members":[
            "user:bob@example.com",
            "serviceAccount:service-account@my-project.iam.gserviceaccount.com"
          ]
        },
        {
          "role":"roles/compute.imageUser",
          "members":[
            "user:email1@gmail.com",
            "user:email3@gmail.com"
          ]
        }
      ]
    }
    
  4. La respuesta muestra la política actualizada, que incluye un valor etag actualizado.

    {
      "etag": "BwVwGgz7Arg=",
      "bindings":[
        {
          "role":"roles/compute.storageAdmin",
          "members":[
            "user:bob@example.com",
            "serviceAccount:service-account@my-project.iam.gserviceaccount.com"
          ]
        },
        {
          "role":"roles/compute.imageUser",
          "members":[
            "user:email1@gmail.com",
            "user:email3@gmail.com"
          ]
        }
      ]
    }
    

Prueba si el emisor tiene permisos

El método de API testIamPermissions toma una URL de recurso y un conjunto de permisos como parámetros de entrada y muestra el conjunto de permisos que están permitidos para el emisor. Puedes usar este método en cualquiera de los recursos compatibles.

Por lo general, no invoques testIamPermission si usas GCP directamente para administrar los permisos. testIamPermissions está diseñado para la integración con tu software patentado, como una interfaz gráfica de usuario personalizada. Por ejemplo, si creas una GUI sobre la API de Compute Engine y su GUI tiene un botón de “inicio” que inicia una instancia, puedes llamar a compute.instances.testIamPermissions() para determinar si el botón debe habilitarse o inhabilitarse.

Para probar si un emisor tiene permisos específicos sobre un recurso, sigue estos pasos:

  1. Envía una solicitud al recurso y en su cuerpo incluye una lista de permisos para verificar.

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

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

    {
      "permissions": [
        "compute.instances.start",
        "compute.instances.stop",
        "compute.instances.delete"
       ]
    }
    
  2. La solicitud muestra los permisos que están habilitados para el emisor.

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

Situaciones

Comparte imágenes específicas dentro de una organización

Imagina una empresa que tiene un conjunto de imágenes de máquinas certificadas por TI y que quiere otorgar a ciertos equipos acceso a ciertas imágenes. Sin las políticas de Cloud IAM para los recursos de Compute Engine, la empresa tendría que otorgar a todos el acceso a todas las imágenes o almacenarlas en varios proyectos. Con las políticas de Cloud IAM para los recursos de Compute Engine, la empresa puede mantener todas las imágenes en un solo proyecto a fin de facilitar la administración y otorgar a los equipos acceso solo al subconjunto de imágenes que necesitan para sus trabajos.

En el siguiente ejemplo, hay varias imágenes en images-project. El grupo all-devs@example.com tiene acceso para usar la imagen ubuntu-base-v1-0, pero no las imágenes ubuntu-v1-1-test ni mysql-v1. Además, el grupo db-admins@example.com solo tiene acceso para usar la imagen mysql-v1. Puedes configurar esto mediante una política de Cloud IAM en la imagen ubuntu-base-v1-0 que otorga a all-devs@example.com la función de Usuario de imagen y con una política de Cloud IAM en mysql-v1 que otorga a db-admin@example.com la función de Usuario de imagen.

A fin de otorgar permiso a all-devs@example.com para usar la imagen shared-image con la herramienta de línea de comandos de gcloud, haz lo siguiente:

  1. Obtén la política de Cloud IAM:

    gcloud compute images get-iam-policy shared-image --format json > policy.json
    
  2. Modifica policy.json en un editor de texto para otorgar a all-devs@example.com la función roles/compute.imageUser:

    {
      "bindings": [
        {
          "members": [
            "group:all-devs@example.com"
          ],
          "role": "roles/compute.imageUser"
        }
      ],
      "etag": "ACAB"
    }
    
  3. Aplica el policy.json modificado a la imagen.

    gcloud compute images set-iam-policy shared-image policy.json
    

Comparte imágenes específicas con el público

Supongamos que eres un socio de Google que publica imágenes para los usuarios de Compute Engine. Puedes configurar una política de Cloud IAM en una imagen para compartirla con todos los usuarios autenticados en Compute Engine.

A fin de que shared-image esté disponible para todos los usuarios de Compute Engine que usan la API de Compute Engine, sigue estos pasos:

  1. Obtén la política de Cloud IAM.

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/images/shared-image/getIamPolicy
    
  2. La solicitud muestra la política.

    {
     "etag": "ACAB"
    }
    
  3. Aplica la política modificada.

    POST https://www.googleapis.com/compute/alpha/projects/[PROJECT_ID]/zones/[ZONE]/images/shared-image/setIamPolicy
    {
      "bindings": [
        {
          "members": [
            "allAuthenticatedUsers"
          ],
          "role": "roles/compute.imageUser"
        }
      ],
      "etag": "ACAB"
    }
    
  4. La solicitud muestra la política actualizada.

    {
     "etag": "BwVa45js9SQ=",
     "bindings": [
       {
         "role": "roles/compute.imageUser",
         "members": [
           "allAuthenticatedUsers"
         ]
       }
     ]
    }
    

Otorga a un compañero de equipo acceso a una instancia para depurar un problema

Supongamos que creaste una instancia y quieres que alice@example.com ayude con la depuración de un problema. Otorga a alice@example.com la función de Administrador de instancias de procesamiento (v1) en la instancia mediante la modificación de la política de Cloud IAM de la instancia.

Si la instancia está configurada para ejecutarse como una cuenta de servicio y deseas que Alice pueda conectarse mediante SSH, establecer metadatos o adjuntar un disco, otorga a alice@example.com la función de Usuario de cuenta de servicio en la cuenta de servicio de la instancia. Es necesario otorgar esta función en la cuenta de servicio porque esas tres operaciones le permiten a Alice ejecutar comandos en su nombre. Consulta la página sobre permisos de cuenta de servicio para obtener más información acerca de cómo tratar las cuentas de servicio como un recurso.

Si deseas que Alice administre la instancia a través de GCP Console, otórgale una función que tenga el permiso compute.projects.get. Por ejemplo, puedes otorgar la función de Visualizador de procesamiento a Alice, que contiene este permiso. Con esta función, también puedes ver todos los recursos de Compute Engine en el proyecto, pero no puedes leer datos de discos, imágenes o instantáneas. Como alternativa, puedes crear una función personalizada con los permisos necesarios.

A continuación, te indicamos cómo hacerlo con gcloud.

  1. Obtén la política de Cloud IAM para la instancia.

    gcloud compute instances get-iam-policy example-instance --format json > policy.json
    
  2. Modifica policy.json en un editor de texto.

    {
      "bindings": [
        {
          "members": [
            "user:alice@example.com"
          ],
          "role": "roles/compute.instanceAdmin.v1"
        }
      ],
      "etag": "ACAB"
    }
    
  3. Aplica el policy.json modificado a la instancia.

    gcloud compute instances set-iam-policy example-instance policy.json
    
  4. Otorga a alice@example.com la función de Usuario de cuenta de servicio en la cuenta de servicio de la instancia. Supongamos que la cuenta de servicio de la instancia es data-reader-service-account@[PROJECT_ID].iam.gserviceaccount.com.

     gcloud iam service-accounts add-iam-policy-binding \
         data-reader-service-account@[PROJECT_ID].iam.gserviceaccount.com \
         --member="user:alice@example.com" \
         --role="roles/iam.serviceAccountUser"
    

    gcloud muestra lo siguiente:

     bindings:
     - members:
       - user:alice@example.com
       role: roles/iam.serviceAccountUser
     etag: BwVa42MC-aY=
    
  5. Otorga a alice@example.com la función de Visualizador de procesamiento en el proyecto.

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
        --member=user:alice@example.com \
        --role=roles/compute.viewer
    

    gcloud muestra lo siguiente:

    bindings:
    - members:
      - user:alice@example.com
      role: roles/iam.serviceAccountUser
    [...]
    etag: BwVa42MC-aY=
    

Ahora Alice puede ver la instancia en GCP Console y tiene permiso para llamar a cualquier método en la instancia. Si Alice necesita permisos para recursos adicionales (por ejemplo, subredes o firewalls), debes otorgarle la función predefinida adecuada (por ejemplo, Usuario de red).

Pasos siguientes

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Compute Engine