Administra vinculaciones de funciones condicionales

En este tema, se describe cómo agregar, modificar y quitar vinculaciones de funciones condicionales en las políticas de administración de identidades y accesos (IAM).

Antes de comenzar

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

Las vinculaciones de funciones condicionales se pueden agregar a políticas de IAM 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 existente mediante Cloud Console, la herramienta de línea de comandos de gcloud y la API de REST.

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

Console

  1. En Cloud Console, ve a la página IAM.

    Ir a la página IAM

  2. En la lista de miembros, busca el miembro deseado 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 IAM.

    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 IAM.

Comando de gcloud

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

Ejecuta el comando gcloud projects get-iam-policy a fin de obtener la política de IAM actual para el proyecto. En el siguiente ejemplo, la versión JSON de la política 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 IAM:

{
  "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 actual de la política, que es 1. Para configurar la política con acceso con vencimiento, agrega la siguiente expresión de condición destacada (reemplaza la marca de tiempo por la tuya). Si no usas la versión 263.0.0, o una posterior, de la herramienta de gcloud, asegúrate de haber actualizado el valor version3. Si usas una versión más reciente de la herramienta de gcloud, el valor máximo de la política se establecerá de forma automática para ti:

{
  "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 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 y la vinculación de la función de travis@example.com vencerá en el momento especificado.

API de REST

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

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

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

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

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 actual de la política, que es 1.

A continuación, modifica la política 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 actualizada:

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

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

  • project-id: El ID de tu proyecto de Google Cloud.

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 actualizada.


Modifica una vinculación de función condicional existente

Después de crear una vinculación de función 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 existente con Cloud Console, la herramienta de línea de comandos de gcloud y la API de REST.

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

Console

  1. En Cloud Console, ve a la página IAM.

    Ir a la página IAM

  2. En la lista de miembros, busca el miembro deseado 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 IAM.

    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 IAM.

Comando de gcloud

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

Ejecuta el comando gcloud projects get-iam-policy a fin de obtener la política de IAM actual para el proyecto. En el siguiente ejemplo, la versión JSON de la política 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 IAM:

{
  "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 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 la función de fatima@example.com vencerá en el momento nuevo.

API de 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 IAM para el proyecto:

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

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

  • project-id: El ID de tu proyecto de Google Cloud.

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 función condicional en la política. 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 actualizada:

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

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

  • project-id: El ID de tu proyecto de Google Cloud.

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 actualizada.


Quita una vinculación de función condicional

Cuando quitas la vinculación de función condicional en una política de IAM, el acceso al recurso se limita a la vinculación de función. En esta sección, se muestra cómo quitar una condición basada en el tiempo de una política mediante Cloud Console, la herramienta de línea de comandos de gcloud y la API de REST.

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

Console

  1. En Cloud Console, ve a la página IAM.

    Ir a la página IAM

  2. En la lista de miembros, busca el miembro deseado 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 IAM.

Comando de gcloud

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

Ejecuta el comando gcloud projects get-iam-policy a fin de obtener la política de IAM actual para el proyecto. En el siguiente ejemplo, la versión JSON de la política 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 IAM:

{
  "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 función condicional de la política, 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 funciones no condicionales solo requieren la versión de política 1. Te recomendamos que siempre uses el número de versión de política más alto cuando configures una política, tanto para las vinculaciones de funciones condicionales como para las no condicionales. Consulta los requisitos de la versión para obtener más información. Si usas la versión 263.0.0 o posterior de la herramienta de gcloud, se actualizará la versión de política más reciente.

A continuación, configura la política 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 actualizada y se quita la vinculación de función condicional para fatima@example.com. La vinculación de funciones ya no caducará.

API de REST

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

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

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

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

  • project-id: El ID de tu proyecto de Google Cloud.

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 mediante la eliminación de la vinculación de función 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 funciones no condicionales solo requieren la versión de política 1. Te recomendamos que siempre uses el número de versión de política más alto cuando configures una política, tanto para las vinculaciones de funciones 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 actualizada:

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

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

  • project-id: El ID de tu proyecto de Google Cloud.

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 actualizada.