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 superiores. 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
- Si deseas usar los ejemplos de línea de comandos de esta guía, haz lo siguiente:
- Instala la herramienta de línea de comandos de gcloud o actualízala a la última versión.
- Configura una región y una zona predeterminadas.
- Si deseas usar los ejemplos de API de esta guía, configura el acceso a la API.
- Consulta la descripción general del control de acceso.
- Familiarízate con las funciones de Cloud IAM para Compute Engine.
Recursos compatibles
Por el momento, puedes otorgar acceso a los siguientes recursos de Compute Engine:
También puedes otorgar acceso a los siguientes recursos, pero esta opción se encuentra en versión Beta por el momento, por lo que debes usar gcloud beta
o los comandos de la API Beta asociados:
subnetworks
(Beta)
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 las 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
- Ve a la página de recursos correspondiente a la que deseas agregar permisos.
- Para instancias, ve a la página de instancias de VM.
- Para discos, ve a la página de discos.
- Para instantáneas, ve a la página de instantáneas.
- Para imágenes, ve a la página de imágenes.
- Selecciona las casillas de verificación junto a los recursos que deseas actualizar.
- Haz clic en Mostrar panel de información para expandir la columna de permisos.
- Para agregar miembros, sigue estos pasos:
- En el campo Agregar miembros, agrega uno o más miembros.
- En el menú desplegable Seleccionar función, selecciona una o más funciones.
- Haz clic en Agregar para guardar los cambios.
- Para quitar miembros, sigue estos pasos:
- 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.
- Haz clic en el ícono borrar (
) para quitar cada función.
gcloud
Para otorgar una función a un miembro en un recurso, usa el subcomando add-iam-policy-binding
del recurso 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
del recurso con las marcas --member
y --role
.
gcloud compute [RESOURCE_TYPE] remove-iam-policy-binding [RESOURCE_NAME] \
--member='[MEMBER]' \
--role='[ROLE]'
en el que:
[RESOURCE_TYPE]
es el tipo de recurso:disks
,images
,instances
,instance-templates
,sole-tenancy node-groups
,sole-tenancy node-templates
osnapshots
.[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
odomain:domain
. Por ejemplo,user:test-user@gmail.com
,group:admins@example.com
,serviceAccount:test123@example.domain.com
odomain:example.domain.com
. - También puede ser uno de los siguientes valores especiales:
allUsers
: cualquier persona que esté en Internet, con o sin una Cuenta de Google.allAuthenticatedUsers
: cualquier persona que esté autenticada con una Cuenta de Google o una cuenta de servicio.
- Debe tener la forma
[ROLE]
es la función que se debe agregar para ese miembro.
Si otorgas acceso a un recurso que se encuentra en versión Beta por el momento, 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
Puedes usar archivos JSON o YAML cuando ejecutas los comandos de gcloud
para obtener o configurar la política de un recurso. En los ejemplos de esta sección, se usa JSON.
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
en el que:
[RESOURCE_TYPE]
es el tipo de recurso:disks
,images
,instances
,instance-templates
osnapshots
.[RESOURCE_NAME]
es el nombre del recurso.
Por ejemplo, a fin de recuperar la política de Cloud IAM de un disco llamado
example-disk
, ejecuta el siguiente comando:gcloud compute disks get-iam-policy example-disk --format json > policy.json
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" }
Con un editor de texto, actualiza el archivo JSON. Crea un objeto
bindings
que contenga un arreglo. Cada objeto en el arreglo tiene un arreglo demembers
y una función asociada para esos miembros. Por ejemplo, para otorgar la funciónroles/compute.imageUser
a los gruposall-devs@example.com
ysome-devs@other-place.com
y otorgar la funciónroles/compute.storageAdmin
abob@example.com
, haz 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" }
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 valoretag
en el archivo JSON coincide con el valoretag
actual del recurso.gcloud compute [RESOURCE_TYPE] set-iam-policy [RESOURCE_NAME] policy.json
Por ejemplo, para establecer la política de Cloud IAM de un disco llamado
example-disk
, ejecuta el siguiente comando:gcloud compute disks set-iam-policy example-disk policy.json
El comando genera la política actualizada, en la que se 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:
Recupera la política existente mediante una llamada al método
getIamPolicy()
del recurso.Por ejemplo, en un disco, usa lo siguiente:
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/getIamPolicy
La solicitud muestra la política, en la que se incluye un arreglo de
bindings
(si existe alguna vinculación) y un valoretag
. La propiedadetag
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" ] } ] }
Modifica la política según sea necesario y, luego, configura la política actualizada mediante una llamada a
setIamPolicy()
.Por ejemplo, si deseas revocar la función
compute.imageUser
paraemail2@gmail.com
, la solicitud será similar a la siguiente:POST https://compute.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" ] } ] }
La respuesta muestra la política actualizada, en la que se 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 invocas testIamPermission
si usar GCP directamente para administrar los permisos. testIamPermissions
está diseñado para la integración con tu software de propietario, como una interfaz gráfica de usuario personalizada. Por ejemplo, si creas una GUI sobre la API de Compute Engine y la GUI tiene un botón de “inicio” que inicia una instancia, puedes llamar a compute.instances.testIamPermissions()
para determinar si el botón se debe habilitar o inhabilitar.
Para probar si un emisor tiene permisos específicos sobre un recurso, sigue estos pasos:
Envía una solicitud al recurso y en su cuerpo incluye una lista de permisos para verificar.
Por ejemplo, en una instancia, puedes verificar si hay
compute.instances.start
,compute.instances.stop
ycompute.instances.delete
.POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setIamPolicy
{ "permissions": [ "compute.instances.start", "compute.instances.stop", "compute.instances.delete" ] }
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
o 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
mediante la herramienta de línea de comandos de gcloud
, realiza lo siguiente:
Obtén la política de Cloud IAM:
gcloud compute images get-iam-policy shared-image --format json > policy.json
Modifica
policy.json
en un editor de texto para otorgar la funciónroles/compute.imageUser
aall-devs@example.com
:{ "bindings": [ { "members": [ "group:all-devs@example.com" ], "role": "roles/compute.imageUser" } ], "etag": "ACAB" }
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 hacer que shared-image
esté disponible para todos los usuarios de Compute Engine mediante la API de Compute Engine, sigue estos pasos:
Obtén la política de Cloud IAM.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/images/shared-image/getIamPolicy
La solicitud muestra la política.
{ "etag": "ACAB" }
Aplica la política modificada.
POST https://compute.googleapis.com/compute/alpha/projects/[PROJECT_ID]/zones/[ZONE]/images/shared-image/setIamPolicy { "bindings": [ { "members": [ "allAuthenticatedUsers" ], "role": "roles/compute.imageUser" } ], "etag": "ACAB" }
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, se muestra cómo hacerlo con gcloud
.
Obtén la política de Cloud IAM para la instancia.
gcloud compute instances get-iam-policy example-instance --format json > policy.json
Modifica
policy.json
en un editor de texto.{ "bindings": [ { "members": [ "user:alice@example.com" ], "role": "roles/compute.instanceAdmin.v1" } ], "etag": "ACAB" }
Aplica el
policy.json
modificado a la instancia.gcloud compute instances set-iam-policy example-instance policy.json
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 esdata-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=
Otorga a
alice@example.com
la función de visualizador de Compute 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).
Próximos pasos
- Obtén más información sobre cuentas de servicio.
- Obtén más información sobre funciones de Cloud IAM de Compute Engine.
- Obtén más información sobre los permisos que se incluyen en las funciones predefinidas de Compute Engine.
- Aprende a crear funciones personalizadas.