En este tema se describe cómo añadir, modificar y quitar enlaces de roles condicionales en las políticas de permisos de gestión de identidades y accesos (IAM).
Antes de empezar
Enable the IAM API.
Lee el resumen de las condiciones de gestión de identidades y accesos para conocer los conceptos básicos de las vinculaciones de roles condicionales de gestión de identidades y accesos.
Consulta la referencia de atributos para obtener información sobre los distintos atributos de estado que se pueden usar en una expresión.
Roles obligatorios
Para gestionar las vinculaciones de roles condicionales en la política de permisos de un recurso, necesitas permisos para obtener el recurso y para obtener y definir la política de permisos del recurso. Estos permisos tienen el siguiente formato, donde SERVICE
es el nombre del servicio propietario del recurso y RESOURCE_TYPE
es el nombre del tipo de recurso al que quieres gestionar el acceso:
SERVICE.RESOURCE_TYPE.get
SERVICE.RESOURCE_TYPE.getIamPolicy
SERVICE.RESOURCE_TYPE.setIamPolicy
Por ejemplo, para gestionar las vinculaciones de roles condicionales en la política de permisos de un proyecto, necesitas los siguientes permisos:
resourcemanager.projects.get
resourcemanager.projects.getIamPolicy
resourcemanager.projects.setIamPolicy
Para obtener los permisos necesarios, pide a tu administrador que te conceda un rol predefinido o personalizado que incluya los permisos. Por ejemplo, tu administrador podría asignarte el rol Administrador de seguridad (roles/iam.securityAdmin
), que incluye permisos para obtener casi todos losTrusted Cloud recursos y gestionar sus políticas de permisos.
Añadir una vinculación de roles condicional a una política
Se pueden añadir enlaces de roles condicionales a políticas de permiso nuevas o ya creadas para controlar aún más el acceso a los recursos de Trusted Cloud by S3NS . En esta sección se explica cómo añadir una condición basada en el tiempo sencilla a una política de permiso ya creada mediante la consola de Trusted Cloud , la CLI de Google Cloud y la API REST.
Para añadir una vinculación de rol condicional a una política de permiso ya creada, sigue estos pasos:
Consola
En la consola, ve a la página IAM. Trusted Cloud
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:
- En el menú desplegable Tipo de condición, selecciona Acceso con vencimiento.
- En el menú desplegable Operador, selecciona por.
- En el menú desplegable Hora, haz clic en el botón para seleccionar un intervalo de fechas y horas.
- 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.
Editor de condiciones:
Haga clic en la pestaña Editor de condiciones e introduzca la siguiente expresión (sustituyendo la marca de tiempo por la suya):
request.time < timestamp("2019-12-31T12:00:00.000Z")
Después de introducir la expresión, puede validar la sintaxis de CEL haciendo clic en Ejecutar Linter, situado encima del cuadro de texto en la parte superior derecha.
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 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 > file-path
Se descarga el formato JSON de la política de permiso:
{ "bindings": [ { "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ], "role": "roles/owner" }, { "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ], "role": "roles/iam.securityReviewer" } ], "etag": "BwWKmjvelug=", "version": 1 }
Ten en cuenta el version
actual de la política de permisos, que es 1
. Para configurar la política de permiso con acceso caducable, añade la siguiente expresión de condición destacada (sustituye la marca de tiempo por la tuya). La CLI de gcloud actualiza la versión automáticamente:
{ "bindings": [ { "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ], "role": "roles/owner" }, { "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ], "role": "roles/iam.securityReviewer", "condition": { "title": "Expires_2019", "description": "Expires at noon on 2019-12-31", "expression": "request.time < timestamp('2019-12-31T12:00:00Z')" } } ], "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 file-path
Se aplica la nueva política de permiso y la vinculación de roles de travis@example.com
caducará a la hora especificada.
REST
Usa el patrón lectura, modificación y escritura para permitir el acceso hasta una hora específica.
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. Trusted 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": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ] }, { "role": "roles/iam.securityReviewer", "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ] } ] }
Ten en cuenta el version
actual de la política de permisos, que es 1
.
A continuación, modifica la política de permitir para que permita el acceso hasta una hora específica. Asegúrate de cambiar el campo version
por el valor
3
:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ] }, { "role": "roles/iam.securityReviewer", "condition": { "title": "Expires_2019", "description": "Expires at noon on 2019-12-31", "expression": "request.time < timestamp('2019-12-31T12:00:00Z')" }, "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ] } ] }
Por último, escribe la política de permiso actualizada:
El método projects.setIamPolicy
de la API Resource Manager define la política de permitidos de la solicitud como la nueva política de permitidos del proyecto.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
PROJECT_ID
: tu ID de proyecto. Trusted Cloud Los IDs de proyecto son cadenas alfanuméricas, comomy-project
.
Método HTTP y URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
Cuerpo JSON de la solicitud:
{ "policy": { "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ] }, { "role": "roles/iam.securityReviewer", "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ], "condition": { "title": "Expires_July_1_2020", "description": "Expires on July 1, 2020", "expression": "request.time < timestamp('2020-07-01T00:00:00.000Z')" } } ] } }
Para enviar tu solicitud, despliega una de estas opciones:
La respuesta contiene la política de permiso actualizada.
Modificar una vinculación de roles condicional
Después de crear un enlace de rol condicional, puedes cambiar la expresión de la condición en cualquier momento. En esta sección se explica cómo actualizar una condición basada en el tiempo de una política de permiso ya creada mediante laTrusted Cloud consola, la CLI de Google Cloud y la API REST.
Para modificar una vinculación de rol condicional en una política de permiso ya creada, sigue estos pasos:
Consola
En la consola, ve a la página IAM. Trusted Cloud
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), haga clic en el nombre de la condición que quiera editar.
En el panel Editar condición, puedes mantener o actualizar el título y la descripción de la condición.
Puede editar la expresión de condición o añadir una nueva 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 CEL.
Creador de condiciones:
- Añade una expresión de condición o modifica la que ya tengas.
- 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.
Editor de condiciones:
- Haga clic en la pestaña Editor de condiciones y añada una expresión de condición o modifique la que ya tenga.
- Después de introducir la expresión, puede validar la sintaxis de CEL haciendo clic en Ejecutar Linter, situado encima del cuadro de texto en la parte superior derecha.
- 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 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 > file-path
Se descarga el formato JSON de la política de permiso:
{ "bindings": [ { "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ], "role": "roles/owner" }, { "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ], "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" } } ], "etag": "BwWKmjvelug=", "version": 3 }
En este ejemplo, actualizaremos los valores title
, description
y de la marca de tiempo de la expresión para cambiar la duración de la condición de acceso programado. Actualiza la parte resaltada de la condición (sustituye los valores por los tuyos):
{ "bindings": [ { "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ], "role": "roles/owner" }, { "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ], "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_5_months", "description": "Expires in 5 months on 2020-01-12", "expression": "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')" } } ], "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 file-path
Se aplica la política de permiso actualizada y el enlace de rol de fatima@example.com
caducará a la nueva hora.
REST
Usa el patrón lectura, modificación y escritura para modificar la vinculación de roles condicional.
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. Trusted Cloud Los IDs de proyecto son cadenas alfanuméricas, comomy-project
.
Método HTTP y URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
Cuerpo JSON de la solicitud:
{ "options": { "requestedPolicyVersion": 3 } }
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" }, "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ] } ] }
A continuación, modifica la vinculación de roles condicional en la política de permiso. En este ejemplo, actualizaremos los valores de la marca de tiempo para cambiar la duración de la condición de acceso programado. Actualiza la parte resaltada de la expresión de condición (sustituye la marca de tiempo por la tuya):
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_5_months", "description": "Expires in 5 months on 2020-01-12", "expression": "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')" }, "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ] } ] }
Por último, escribe la política de permiso actualizada:
El método projects.setIamPolicy
de la API Resource Manager define la política de permitidos de la solicitud como la nueva política de permitidos del proyecto.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
PROJECT_ID
: tu ID de proyecto. Trusted Cloud Los IDs de proyecto son cadenas alfanuméricas, comomy-project
.
Método HTTP y URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
Cuerpo JSON de la solicitud:
{ "policy": { "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_5_months", "description": "Expires in 5 months on 2020-01-12", "expression": "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')" }, "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ], } ] } }
Para enviar tu solicitud, despliega una de estas opciones:
La respuesta contiene la política de permiso actualizada.
Quitar una condición de una vinculación de roles
Si quitas una condición de una vinculación de roles, no se revoca el rol. En su lugar, permite que todas las entidades de seguridad de esa vinculación de rol usen los permisos del rol de forma incondicional.
En esta sección se muestra cómo eliminar una condición basada en el tiempo de una política de permiso mediante laTrusted Cloud consola, la CLI de Google Cloud y la API REST.
Para quitar una condición de una vinculación de roles en una política de permiso, sigue estos pasos:
Consola
En la consola, ve a la página IAM. Trusted Cloud
En la lista de principales, busca el principal que quieras y haz clic en el botón
.En el panel Editar permisos, busca la asignación de rol que quieras. A continuación, en Condición de IAM (opcional), haz clic en el nombre de una condición.
En el panel Editar condición, haga clic en el botón
para quitar la condición. Se te pedirá que confirmes la eliminación de la condición.Cuando se cierre el panel Editar condición, haz clic de nuevo 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 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 > file-path
Se descarga el formato JSON de la política de permiso:
{ "bindings": [ { "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ], "role": "roles/owner" }, { "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ], "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" } } ], "etag": "BwWKmjvelug=", "version": 3 }
Para quitar la vinculación de roles condicional de la política de permiso, elimina el bloque condition
como se muestra a continuación:
{ "bindings": [ { "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ], "role": "roles/owner" }, { "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ], "role": "roles/bigquery.dataViewer", } ], "etag": "BwWKmjvelug=", "version": 3 }
Ten en cuenta que version
sigue siendo 3
, aunque los enlaces de roles incondicionales solo requieren una versión 1
allow policy. Te recomendamos que siempre uses el número de versión más alto al definir una política de permiso, tanto para las vinculaciones de roles condicionales como para las incondicionales. Consulta los requisitos de la versión para obtener más información. La CLI de gcloud actualiza automáticamente el número de versión de la política de permiso.
A continuación, define la política de permiso actualizada ejecutando el comando gcloud projects set-iam-policy
:
gcloud projects set-iam-policy project-id file-path
Se aplica la política de permiso actualizada y se elimina la vinculación de roles condicional para fatima@example.com
. El enlace de rol ya no caducará.
REST
Usa el patrón lectura, modificación y escritura para quitar la vinculación de rol condicional.
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. Trusted Cloud Los IDs de proyecto son cadenas alfanuméricas, comomy-project
.
Método HTTP y URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
Cuerpo JSON de la solicitud:
{ "options": { "requestedPolicyVersion": 3 } }
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" }, "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ] } ] }
A continuación, modifica la política de permiso quitando la vinculación de rol condicional:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ] } ] }
Ten en cuenta que version
sigue siendo 3
, aunque los enlaces de roles incondicionales solo requieren una versión 1
allow policy. Te recomendamos que siempre uses el número de versión más alto al definir una política de permiso, tanto para las vinculaciones de roles condicionales como para las incondicionales. Consulta los requisitos de la versión para obtener más información.
Por último, escribe la política de permiso actualizada:
El método projects.setIamPolicy
de la API Resource Manager define la política de permitidos de la solicitud como la nueva política de permitidos del proyecto.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
PROJECT_ID
: tu ID de proyecto. Trusted Cloud Los IDs de proyecto son cadenas alfanuméricas, comomy-project
.
Método HTTP y URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
Cuerpo JSON de la solicitud:
{ "policy": { "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group" ] } ] } }
Para enviar tu solicitud, despliega una de estas opciones:
La respuesta contiene la política de permiso actualizada.
Siguientes pasos
- Referencia de atributos de las condiciones de IAM
- Tipos de recursos que aceptan vinculaciones de roles condicionales