En esta página se describe cómo gestionar el acceso a recursos específicos mediante enlaces de roles condicionales en tus políticas de permisos. Si usas atributos de recursos en una expresión de condición, puedes controlar si una entidad puede usar un permiso para acceder a un recurso en función del nombre, el tipo y el servicio del recurso. Google Cloud
Antes de empezar
- Lee la información general sobre las condiciones de gestión de identidades y accesos (IAM) para conocer los conceptos básicos de los enlaces de roles condicionales de IAM.
- Consulte los atributos de recursos que se pueden usar en una expresión de condición.
- El atributo de nombre de recurso puede controlar el acceso a los siguientes Google Cloud servicios:
- Apigee
- Application Integration
- Hub de APIs de Apigee
- Servicio de copia de seguridad y DR
- BigQuery
- API Reservation de BigQuery
- Bigtable
- Autorización binaria
- Cloud Deploy
- Cloud Key Management Service
- Cloud Logging
- Cloud SQL
- Cloud Storage
- Compute Engine
- Dataform
- Google Kubernetes Engine
- Firestore
- Cloud NGFW
- Integration Connectors
- Google Cloud Managed Service para Apache Kafka
- Gestor de parámetros
- Pub/Sub Lite
- Secret Manager
- Spanner
Roles obligatorios
Para obtener los permisos que necesitas para gestionar las vinculaciones de roles condicionales, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
-
Para gestionar el acceso a los proyectos, haz lo siguiente:
Administrador de gestión de identidades y accesos de proyectos (
roles/resourcemanager.projectIamAdmin) en el proyecto -
Para gestionar el acceso a las carpetas, sigue estos pasos:
Administrador de carpetas (
roles/resourcemanager.folderAdmin) en la carpeta -
Para gestionar el acceso a proyectos, carpetas y organizaciones, sigue estos pasos:
Administrador de la organización (
roles/resourcemanager.organizationAdmin) en la organización -
Para gestionar el acceso a casi todos los Google Cloud recursos:
Administrador de seguridad (
roles/iam.securityAdmin) en el proyecto, la carpeta o la organización cuyos recursos quieras gestionar
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para gestionar las vinculaciones de roles condicionales. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para gestionar las vinculaciones de roles condicionales, se necesitan los siguientes permisos:
-
Para gestionar el acceso a los proyectos, sigue estos pasos:
-
resourcemanager.projects.getIamPolicyen el proyecto -
resourcemanager.projects.setIamPolicyen el proyecto
-
-
Para gestionar el acceso a las carpetas, sigue estos pasos:
-
resourcemanager.folders.getIamPolicyen la carpeta -
resourcemanager.folders.setIamPolicyen la carpeta
-
-
Para gestionar el acceso a las organizaciones, sigue estos pasos:
-
resourcemanager.organizations.getIamPolicyen la organización -
resourcemanager.organizations.setIamPolicyen la organización
-
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Conceder acceso a un grupo de recursos en función de los prefijos de los nombres de los recursos
Se puede usar una vinculación de rol condicional para conceder acceso a principales a recursos cuyos nombres coincidan con un prefijo, como las instancias de máquina virtual (VM) de Compute Engine cuyos nombres empiecen por una cadena determinada. El prefijo del nombre del recurso se suele usar para agrupar recursos destinados a un fin concreto o que tienen determinadas propiedades.
Por ejemplo, supongamos que ejecutas cargas de trabajo en determinadas instancias de VM que pueden operar con datos sanitarios sensibles. Otras cargas de trabajo no sensibles deben ejecutarse en el mismo proyecto y quieres asegurarte de que tus desarrolladores tengan acceso limitado a las instancias de VM que operan con datos sensibles. Para ello, asigna el prefijo sensitiveAccess a las instancias de VM que contengan datos sensibles y el prefijo devAccess a las demás instancias de VM. Después, puedes usar enlaces de roles condicionales para asegurarte de que los desarrolladores puedan seguir trabajando con normalidad en las instancias de devAccess máquinas virtuales, pero sin concederles acceso a las instancias de sensitiveAccess máquinas virtuales.
Aunque puede usar el atributo de condición resource.name por sí solo para gestionar el acceso, es habitual usar también los atributos resource.type y resource.service. Si usa estos atributos adicionales, será menos probable que una condición afecte al acceso a diferentes tipos de recursos con nombres similares.
En el ejemplo de esta sección se controla el acceso mediante los atributos resource.name y resource.type.
Para conceder acceso a los discos e instancias de Compute Engine de un proyecto en función de un prefijo de nombre, sigue estos pasos:
Consola
En la consola de Google Cloud , ve a la página Gestión de identidades y accesos.
En la lista de principales, busca el principal que quieras y haz clic en el botón .
En el panel Editar permisos, busca el rol al que quieras configurar una condición. A continuación, en Condición de IAM (opcional), haz clic en Añadir condición de IAM.
En el panel Editar condición, introduce un título y una descripción opcional para la condición.
Puedes añadir una expresión de condición con el Creador de condiciones o el Editor de condiciones. El creador de condiciones proporciona una interfaz interactiva para seleccionar el tipo de condición, el operador y otros detalles aplicables de la expresión. El editor de condiciones proporciona una interfaz basada en texto para introducir manualmente una expresión con la sintaxis de CEL.
Creador de condiciones:
- Elimina los campos de condición que haya en el creador de condiciones. El único campo del creador de condiciones debe ser el botón Añadir.
- Crea una expresión de condición agrupada que dé como resultado
truesi el recurso es un disco que empieza por el prefijo especificado:- Haz clic en el desplegable Añadir y, a continuación, en Condiciones agrupadas.
- En el menú desplegable Tipo de condición, selecciona Recurso > Tipo.
- En el menú desplegable Operador, selecciona es.
- En el menú desplegable Resource Type (Tipo de recurso), selecciona compute.googleapis.com/Disk.
- Haz clic en el primer botón Añadir situado justo debajo de la condición que acabas de introducir para añadir otra cláusula a la expresión.
- En el menú desplegable Tipo de condición, selecciona Recurso > Nombre.
- En el menú desplegable Operador, selecciona Empieza por.
- En el campo Valor, introduce el nombre del recurso, incluido el prefijo que quieras, en el formato adecuado. Por ejemplo, usa
projects/PROJECT_ID/region/ZONE_ID/disks/PREFIXpara identificar los discos del proyectoPROJECT_IDy de la zonaZONE_IDcuyos nombres empiecen porPREFIX. - A la izquierda de cada tipo de condición, haz clic en Y para asegurarte de que ambas cláusulas deben ser verdaderas.
- Crea una expresión de condición agrupada que se evalúa como
truesi el recurso es una instancia que empieza por el prefijo especificado:- Haz clic en el botón Añadir situado fuera del grupo de condiciones y, a continuación, en Condiciones agrupadas.
- En el menú desplegable Tipo de condición, seleccione Recurso > Tipo.
- En el menú desplegable Operador, selecciona es.
- En el menú desplegable Tipo de recurso, selecciona compute.googleapis.com/Instance.
- En el mismo grupo de condiciones, haz clic en Añadir.
- En el menú desplegable Tipo de condición, selecciona Recurso > Nombre.
- En el menú desplegable Operador, selecciona Empieza por.
- En el campo Valor, introduce el nombre del recurso,
con el prefijo que quieras, en el formato adecuado. Por ejemplo, usa
projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIXpara identificar las instancias del proyectoPROJECT_IDy la zonaZONE_IDcuyos nombres empiecen porPREFIX. - Asegúrate de que el operador lógico que conecta las condiciones del grupo esté definido como Y.
- Crea una expresión de condición agrupada que dé como resultado
truesi el recurso no es un disco ni una instancia:- Haz clic en el botón Añadir situado fuera de los grupos de condiciones y, a continuación, en Condiciones agrupadas.
- En el menú desplegable Tipo de condición, selecciona Recurso > Tipo.
- En el menú desplegable Operador, selecciona no es.
- En el menú desplegable Resource Type (Tipo de recurso), selecciona compute.googleapis.com/Disk.
- En el mismo grupo de condiciones, haz clic en Añadir.
- En el menú desplegable Tipo de condición, selecciona Recurso > Tipo.
- En el menú desplegable Operador, selecciona no es.
- En el menú desplegable Tipo de recurso, selecciona compute.googleapis.com/Instance.
- Asegúrate de que el operador lógico que conecta las condiciones del grupo esté definido como Y.
Asegúrate de que el operador lógico que conecta todos los grupos de expresiones de condición sea O.
Cuando haya terminado, el creador de condiciones debería tener un aspecto similar al siguiente:

Haz clic en Guardar para aplicar la condición.
Cuando se cierre el panel Editar condición, haz clic en Guardar de nuevo en el panel Editar permisos para actualizar tu política de permitir.
Editor de condiciones:
Haz clic en la pestaña Editor de condiciones e introduce la siguiente expresión:
(resource.type == "compute.googleapis.com/Disk" && resource.name.startsWith("projects/PROJECT_ID/zones/ZONE_ID/disks/PREFIX")) || (resource.type == "compute.googleapis.com/Instance" && resource.name.startsWith("projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX")) || (resource.type != "compute.googleapis.com/Disk" && resource.type != "compute.googleapis.com/Instance")Después de introducir la expresión, puede corregir la sintaxis de CEL haciendo clic en Ejecutar corrector, situado en la parte superior derecha del cuadro de texto.
Haz clic en Guardar para aplicar la condición.
Cuando se cierre el panel Editar condición, vuelve a hacer clic en Guardar en el panel Editar permisos para actualizar tu política de permitir.
gcloud
Las políticas de permiso se definen mediante el patrón de lectura, modificación y escritura.
Ejecuta el comando gcloud projects get-iam-policy
para obtener la política de permisos actual del proyecto. En el siguiente ejemplo, la versión JSON de la política de permiso se descarga en una ruta del disco.
Comando:
gcloud projects get-iam-policy project-id --format=json > filepath
Se descarga el formato JSON de la política de permiso:
{
"bindings": [
{
"members": [
"user:my-user@example.com"
],
"role": "roles/owner"
},
{
"members": [
"group:my-group@example.com"
],
"role": "roles/compute.instanceAdmin"
}
],
"etag": "BwWKmjvelug=",
"version": 1
}
Para configurar la política de permiso con una condición de prefijo de nombre de recurso, añade la siguiente expresión de condición destacada. La CLI de gcloud actualiza la versión automáticamente:
{ "bindings": [ { "members": [ "user:my-user@example.com" ], "role": "roles/owner" }, { "members": [ "group:my-group@example.com" ], "role": "roles/compute.instanceAdmin", "condition": { "title": "PREFIX_only", "description": "Only gives access to VMs with the PREFIX prefix", "expression": "(resource.type == 'compute.googleapis.com/Disk' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/disks/PREFIX')) || (resource.type == 'compute.googleapis.com/Instance' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX')) || (resource.type != 'compute.googleapis.com/Instance' && resource.type != 'compute.googleapis.com/Disk')" } } ], "etag": "BwWKmjvelug=", "version": 3 }
A continuación, define la nueva política de permiso ejecutando el comando
gcloud projects set-iam-policy:
gcloud projects set-iam-policy project-id filepath
La nueva vinculación de rol condicional otorga permisos al grupo de la siguiente manera:
- Los miembros de la vinculación de roles solo pueden usar los permisos de disco e instancia para acceder a los discos y las instancias cuyos nombres empiecen por el prefijo especificado.
- Los miembros de la vinculación de roles pueden usar todos los demás permisos del rol Administrador de instancias (
roles/compute.instanceAdmin) para acceder a todos los recursos, excepto a los discos y las instancias.
REST
Usa el patrón lectura-modificación-escritura para permitir el acceso a recursos específicos.
Primero, lee la política de permisos del proyecto:
El método projects.getIamPolicy
de la API Resource Manager obtiene la política de permisos de un proyecto.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
PROJECT_ID: tu ID de proyecto Google Cloud . Los IDs de proyecto son cadenas alfanuméricas, comomy-project.POLICY_VERSION: la versión de la política que se va a devolver. En las solicitudes se debe especificar la versión de la política más reciente, que es la versión 3. Consulta Especificar una versión de la política al obtener una política para obtener más información.
Método HTTP y URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
Cuerpo JSON de la solicitud:
{
"options": {
"requestedPolicyVersion": POLICY_VERSION
}
}
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
{
"version": 1,
"etag": "BwWKmjvelug=",
"bindings": [
{
"role": "roles/owner",
"members": [
"user:my-user@example.com
]
},
{
"members": [
"group:my-group@example.com"
],
"role": "roles/compute.instanceAdmin"
}
]
}
A continuación, modifica la política de permiso para que permita el acceso a recursos específicos. Asegúrate de cambiar el campo version por el valor
3:
{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/compute.instanceAdmin", "members": [ "group:my-group@example.com" ], "condition": { "title": "PREFIX_only", "description": "Only gives access to VMs with the PREFIX prefix",