Administra vinculaciones de roles condicionales

En este tema, se describe cómo agregar, modificar y quitar vinculaciones de roles condicionales en las políticas de permisos de Identity and Access Management (IAM).

Antes de comenzar

Funciones requeridas

A fin de administrar las vinculaciones de roles condicionales en la política de permisos de un recurso, necesitas permisos para obtener el recurso y obtener y establecer la política de permisos del recurso. Estos permisos tienen el siguiente formato, en el que SERVICE es el nombre del servicio que posee el recurso y RESOURCE_TYPE es el nombre del tipo de recurso al que deseas administrar el acceso:

  • SERVICE.RESOURCE_TYPE.get
  • SERVICE.RESOURCE_TYPE.getIamPolicy
  • SERVICE.RESOURCE_TYPE.setIamPolicy

Por ejemplo, para administrar 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, pídele a tu administrador que te otorgue una función predefinida o personalizada que incluya los permisos. Por ejemplo, el administrador podría otorgarte el rol Security Admin (roles/iam.securityAdmin), que incluye permisos para obtener casi todos los recursos de Google Cloud y administrar sus políticas de permisos.

Agrega una vinculación de rol condicional a una política

Las vinculaciones de roles condicionales se pueden agregar a políticas de permisos nuevas o existentes para controlar aún más el acceso a los recursos de Google Cloud. En esta sección, se muestra cómo agregar una condición basada en el tiempo simple a una política de permisos existente mediante la consola, Google Cloud CLI y la API de REST.

Para agregar una vinculación de rol condicional a una política existente, haz lo siguiente:

Console

  1. En la consola, ve a la página IAM.

    Ve a la página IAM

  2. En la lista de principales, busca la deseada y haz clic en el botón .

  3. Desde el panel Editar permisos, ubica la función deseada para configurar una condición. Luego, en Condición, haz clic en Agregar condición.

  4. En el panel Editar condición, ingresa un título y una descripción opcional para la condición.

  5. Puedes agregar una expresión de condición mediante el Creador de condiciones o el Editor de condición. El creador de condiciones proporciona una interfaz interactiva en la que puedes seleccionar el tipo de condición y el operador deseados, así como otros detalles aplicables sobre la expresión. El editor de condición proporciona una interfaz basada en texto en la que puedes ingresar de forma manual una expresión mediante la sintaxis CEL.

    Creador de condiciones:

    1. En el menú desplegable Tipo de condición, selecciona Acceso por vencer.
    2. En el menú desplegable Operador, selecciona de.
    3. En el menú desplegable Hora, haz clic en el botón para seleccionar un intervalo de tiempo y fecha.
    4. Haz clic en Guardar para aplicar la condición.
    5. Una vez que el panel Editar condición esté cerrado, vuelve a hacer clic en Guardar desde el panel Editar permisos para actualizar la política de permisos.

    Editor de condición:

    1. Haz clic en la pestaña Editor de condiciones y, luego, ingresa la siguiente expresión (reemplaza la marca de tiempo por la tuya):

      request.time < timestamp("2019-12-31T12:00:00.000Z")
    2. Después de ingresar tu expresión, puedes optar por hacer clic en Ejecutar Linter arriba del cuadro de texto en la parte superior derecha para validar la sintaxis CEL.

    3. Haz clic en Guardar para aplicar la condición.

    4. Una vez que el panel Editar condición esté cerrado, vuelve a hacer clic en Guardar desde el panel Editar permisos para actualizar la política de permisos.

gcloud

Las políticas de permisos se establecen mediante el patrón de lectura-modificación-escritura.

Ejecuta el comando gcloud projects get-iam-policy a fin de obtener la política de permisos actual para el proyecto. En el siguiente ejemplo, la versión JSON de la política de permisos se descarga en una ruta de acceso en el disco.

Comando:

gcloud projects get-iam-policy project-id --format json > file-path

Se descarga el formato JSON de la política de permisos:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@example.com"
      ],
      "role": "roles/iam.securityReviewer"
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 1
}

Anota la version de la política de permisos actual, que es 1. Para configurar la política de permisos con acceso con vencimiento, agrega la siguiente expresión de condición destacada (reemplaza la marca de tiempo por la tuya). La CLI de gcloud actualiza la versión de forma automática:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@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')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

A continuación, configura la política de permisos nueva mediante la ejecución del comando gcloud projects set-iam-policy:

gcloud projects set-iam-policy project-id file-path

Se aplica la nueva política de permisos y la vinculación de rol de travis@example.com vencerá en el momento especificado.

REST

Usa el patrón lectura-modificación-escritura para permitir el acceso hasta un momento específico.

Primero, lee la política de permisos para el proyecto:

El método projects.getIamPolicy de la API de Resource Manager obtiene la política de permisos de un proyecto.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
  • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "user:travis@example.com"
      ]
    }
  ]
}

Anota la version de la política de permisos actual, que es 1.

A continuación, modifica la política de permisos para que permita el acceso hasta un momento específico. Asegúrate de cambiar el campo version al valor 3:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@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": [
        "user:travis@example.com"
      ]
    }
  ]
}

Por último, escribe la política de permisos actualizada:

El método projects.setIamPolicy de la API de Resource Manager establece la política de permisos en la solicitud como la nueva política de permisos del proyecto.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-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": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/iam.securityReviewer",
        "members": [
          "user:travis@example.com"
        ],
        "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, expande una de estas opciones:

La respuesta contiene la política de permisos actualizada:


Modifica una vinculación de función condicional existente

Después de crear una vinculación de rol condicional, puedes cambiar la expresión de condición en cualquier momento. En esta sección, se muestra cómo actualizar una condición basada en el tiempo en una política de permisos existente con la consola, Google Cloud CLI y la API de REST.

Para modificar una vinculación de rol condicional en una política de permisos existente, haz lo siguiente:

Console

  1. En la consola, ve a la página IAM.

    Ve a la página IAM

  2. En la lista de principales, busca la deseada y haz clic en el botón .

  3. Desde el panel Editar permisos, ubica la función deseada para configurar una condición. Luego, en Condición, haz clic en el nombre de la condición existente para editarla.

  4. En el panel Editar condición, puedes conservar o actualizar el título y la descripción existentes para la condición.

  5. Puedes editar la expresión de condición existente o agregar una nueva con el Creador de condiciones o el Editor de condición. El creador de condiciones proporciona una interfaz interactiva en la que puedes seleccionar el tipo de condición y el operador deseados, así como otros detalles aplicables sobre la expresión. El editor de condición proporciona una interfaz basada en texto en la que puedes ingresar de forma manual una expresión mediante la sintaxis CEL.

    Creador de condiciones:

    1. Agrega una expresión de condición nueva o modifica la expresión de condición existente.
    2. Haz clic en Guardar para aplicar la condición.
    3. Una vez que el panel Editar condición esté cerrado, vuelve a hacer clic en Guardar desde el panel Editar permisos para actualizar la política de permisos.

    Editor de condición:

    1. Haz clic en la pestaña Editor de condición y agrega una expresión de condición nueva o modifica la expresión de condición existente.
    2. Después de ingresar tu expresión, puedes optar por hacer clic en Ejecutar Linter arriba del cuadro de texto en la parte superior derecha para validar la sintaxis CEL.
    3. Haz clic en Guardar para aplicar la condición.
    4. Una vez que el panel Editar condición esté cerrado, vuelve a hacer clic en Guardar desde el panel Editar permisos para actualizar la política de permisos.

gcloud

Las políticas de permisos se establecen mediante el patrón de lectura-modificación-escritura.

Ejecuta el comando gcloud projects get-iam-policy a fin de obtener la política de permisos actual para el proyecto. En el siguiente ejemplo, la versión JSON de la política de permisos se descarga en una ruta de acceso en el disco.

Comando:

gcloud projects get-iam-policy project-id --format json > file-path

Se descarga el formato JSON de la política de permisos:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@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\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

En este ejemplo, actualizaremos los valores de title, description y marca de tiempo en la expresión para cambiar la duración de la condición de acceso programada. Actualiza la siguiente parte destacada de la condición (reemplaza los valores por los tuyos):

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@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')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

A continuación, configura la política de permisos nueva mediante la ejecución del comando gcloud projects set-iam-policy.

gcloud projects set-iam-policy project-id file-path

Se aplica la política actualizada y la vinculación de rol de fatima@example.com vencerá en el momento nuevo.

REST

Usa el patrón lectura-modificación-escritura para modificar la vinculación de la función condicional.

Primero, lee la política de permisos para el proyecto:

El método projects.getIamPolicy de la API de Resource Manager obtiene la política de permisos de un proyecto.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@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": [
        "user:fatima@example.com"
      ]
    }
  ]
}

A continuación, modifica la vinculación de rol condicional en la política de permisos. En este ejemplo, actualizaremos los valores de la marca de tiempo para cambiar la duración de la condición de acceso programada. Actualiza la siguiente parte destacada de la expresión de condición (reemplaza la marca de tiempo por la tuya):

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@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": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Por último, escribe la política de permisos actualizada:

El método projects.setIamPolicy de la API de Resource Manager establece la política de permisos en la solicitud como la nueva política de permisos del proyecto.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-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": [
          "user:project-owner@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": [
          "user:fatima@example.com"
        ],
      }
    ]
  }
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la política de permisos actualizada:


Quita una vinculación de rol condicional

Cuando quitas la vinculación de rol condicional en una política de permisos, el acceso al recurso se limita a la vinculación de rol. En esta sección, se muestra cómo quitar una condición basada en el tiempo de una política de permisos mediante la consola, Google Cloud CLI y la API de REST.

Para quitar una condición de una vinculación de rol en una política de permisos, haz lo siguiente:

Console

  1. En la consola, ve a la página IAM.

    Ve a la página IAM

  2. En la lista de principales, busca la deseada y haz clic en el botón .

  3. En el panel Editar permisos, busca la vinculación de función deseada. Luego, en Condición, haz clic en el nombre de una condición existente.

  4. En el panel Editar condición, haz clic en el botón para quitar la condición. Se te solicitará que confirmes la eliminación de la condición.

  5. Una vez que el panel Editar condición esté cerrado, vuelve a hacer clic en Guardar desde el panel Editar permisos para actualizar la política de permisos.

gcloud

Las políticas de permisos se establecen mediante el patrón de lectura-modificación-escritura.

Ejecuta el comando gcloud projects get-iam-policy a fin de obtener la política de permisos actual para el proyecto. En el siguiente ejemplo, la versión JSON de la política de permisos se descarga en una ruta de acceso en el disco.

Comando:

gcloud projects get-iam-policy project-id --format json > file-path

Se descarga el formato JSON de la política de permisos:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@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\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Para quitar la vinculación de rol condicional de la política de permisos, quita el bloque condition, como se muestra a continuación:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Ten en cuenta que la version aún está configurada como 3, a pesar de que las vinculaciones de roles no condicionales solo requieren una política de permisos de la versión 1. Te recomendamos que siempre uses el número de versión más alto cuando configures una política de permisos, tanto para las vinculaciones de roles condicionales como para las no condicionales. Consulta los requisitos de la versión para obtener más información. La CLI de gcloud actualiza el número de versión de la política de permisos de forma automática.

A continuación, configura la política de permisos actualizada mediante la ejecución del comando gcloud projects set-iam-policy:

gcloud projects set-iam-policy project-id file-path

Se aplica la política de permisos actualizada y se quita la vinculación de rol condicional para fatima@example.com. La vinculación de funciones ya no caducará.

REST

Usa el patrón lectura-modificación-escritura para quitar la vinculación de función condicional.

Primero, lee la política de permisos para el proyecto:

El método projects.getIamPolicy de la API de Resource Manager obtiene la política de permisos de un proyecto.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@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": [
        "user:fatima@example.com"
      ]
    }
  ]
}

A continuación, modifica la política de permisos mediante la eliminación de la vinculación de rol condicional:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Ten en cuenta que la version aún está configurada como 3, a pesar de que las vinculaciones de roles no condicionales solo requieren una política de permisos de la versión 1. Te recomendamos que siempre uses el número de versión más alto cuando configures una política de permisos, tanto para las vinculaciones de roles condicionales como para las no condicionales. Consulta los requisitos de la versión para obtener más información.

Por último, escribe la política de permisos actualizada:

El método projects.setIamPolicy de la API de Resource Manager establece la política de permisos en la solicitud como la nueva política de permisos del proyecto.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-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": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "members": [
          "user:fatima@example.com"
        ]
      }
    ]
  }
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la política de permisos actualizada: