Configurar el acceso temporal

En este tema se describe cómo configurar el acceso temporal (con caducidad) a los recursos de Google Cloud mediante enlaces de roles condicionales en tus políticas de permiso. Si usas los atributos de fecha y hora, puedes aplicar controles basados en el tiempo al acceder a un recurso concreto. Por ejemplo, puedes conceder acceso temporal a un proyecto que empiece y termine a una hora determinada o de forma programada y periódica.

Antes de empezar

  • Consulta la información general sobre las condiciones para conocer los conceptos básicos de los enlaces de roles condicionales de Gestión de Identidades y Accesos (IAM).
  • Consulte los atributos de fecha y hora que se pueden usar en una expresión de condición. Todos los Google Cloud servicios reconocen los atributos de fecha y hora.

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 obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el 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.getIamPolicy en el proyecto
    • resourcemanager.projects.setIamPolicy en el proyecto
  • Para gestionar el acceso a las carpetas, sigue estos pasos:
    • resourcemanager.folders.getIamPolicy en la carpeta
    • resourcemanager.folders.setIamPolicy en la carpeta
  • Para gestionar el acceso a las organizaciones, sigue estos pasos:
    • resourcemanager.organizations.getIamPolicy en la organización
    • resourcemanager.organizations.setIamPolicy en la organización

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Conceder acceso temporal

Se puede usar una vinculación de rol condicional para conceder acceso a un recurso durante un periodo determinado, de forma que un usuario ya no pueda acceder al recurso después de la fecha y hora de vencimiento especificadas.

Imagina la siguiente situación: las reglas de seguridad de la información de la empresa ExampleCo hacen hincapié en que ningún empleado debe tener acceso indefinido a los recursos de los proyectos de producción. Antes, los administradores configuraban y eliminaban manualmente las vinculaciones de roles de gestión de identidades y accesos para satisfacer las necesidades de emergencia de los ingenieros. Para reducir la carga administrativa, ExampleCo puede configurar una vinculación de rol condicional con una condición de fecha y hora para definir una fecha de finalización de la vinculación.

Para conceder acceso temporal a un recurso de un proyecto, sigue estos pasos:

Consola

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

    Ir a la página de gestión de identidades y accesos

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

  3. 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 Añadir condición de IAM.

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

  5. Puede añadir una expresión de condición mediante 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 mediante la sintaxis CEL.

    Creador de condiciones:

    1. En el desplegable Tipo de condición, selecciona Acceso caducado.
    2. En el menú desplegable Operador, selecciona por.
    3. En el menú desplegable Hora, haz clic en el botón para seleccionar un intervalo de fechas y horas.
    4. Haz clic en Guardar para aplicar la condición.
    5. 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:

    1. Haz clic en la pestaña Editor de condiciones e introduce la siguiente expresión (sustituye la marca de tiempo por la tuya):

      request.time < timestamp("2020-07-01T00:00:00.000Z")
    2. 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.

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

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

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 > 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/iam.securityReviewer"
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 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": [
        "user:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@example.com"
      ],
      "role": "roles/iam.securityReviewer",
      "condition": {
        "title": "Expires_July_1_2020",
        "description": "Expires on July 1, 2020",
        "expression":
          "request.time < timestamp('2020-07-01T00: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 filepath

Se aplica la nueva política de permiso y la concesión de rol del grupo caducará a la hora especificada.

REST

Usa el patrón lectura, modificación y escritura para permitir el acceso hasta una hora concreta.

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, como my-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"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "group:my-group@example.com"
      ]
    }
  ]
}

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:

{
  "version": 3,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:my-user@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "group:my-group@example.com"
      ],
      "condition": {
        "title": "Expires_July_1_2020",
        "description": "Expires on July 1, 2020",
        "expression":
          "request.time < timestamp('2020-07-01T00:00:00.000Z')"
      }
    }
  ]
}

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. Google Cloud Los IDs de proyecto son cadenas 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:my-user@example.com"
        ]
      },
      {
        "role": "roles/iam.securityReviewer",
        "members": [
          "group:my-group@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, despliega una de estas opciones:

La respuesta contiene la política de permiso actualizada.


Gestionar el acceso en función de los días y las horas de la semana

Se puede usar una vinculación de rol condicional para conceder acceso a un recurso solo durante determinados días u horas de la semana de forma periódica.

Veamos la siguiente situación: la empresa ExampleCo tiene un proyecto de control de calidad. Todo el equipo de control de calidad debe tener roles con privilegios elevados para completar su trabajo. ExampleCo debe cumplir las leyes laborales de su ubicación, que limitan el horario de trabajo de lunes a viernes de 9:00 a 17:00. ExampleCo puede usar condiciones de fecha y hora para asegurarse de que sus empleados solo puedan acceder aGoogle Cloud durante la semana laboral y el horario de trabajo programado.

Para conceder acceso a un recurso de un proyecto solo determinados días u horas de la semana de forma periódica, sigue estos pasos:

Consola

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

    Ir a la página de gestión de identidades y accesos

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

  3. 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 Añadir condición de IAM.

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

  5. Puede añadir una expresión de condición mediante 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 mediante la sintaxis CEL.

    Creador de condiciones:

    1. Haz clic en Añadir.
    2. En el menú desplegable Tipo de condición, selecciona Hora. Programación Día de la semana.
    3. En el menú desplegable Operador, selecciona Después o el.
    4. En el menú desplegable Día de la semana, selecciona Lunes.
    5. En el menú desplegable Elige una zona horaria, selecciona la zona horaria que quieras de la lista.
    6. Asegúrate de que el operador Y esté seleccionado a la izquierda y, a continuación, haz clic en Añadir de nuevo.
    7. En el menú desplegable Tipo de condición, selecciona Hora. Programación Día de la semana.
    8. En el menú desplegable Operador, selecciona Antes o el.
    9. En el menú desplegable Día de la semana, selecciona Viernes.
    10. En el menú desplegable Elige una zona horaria, selecciona la zona horaria que quieras de la lista.

    En este punto, solo has configurado el acceso de lunes a viernes. Ahora, configurará el acceso de 9:00 a 17:00.

    1. Asegúrate de que el operador Y esté seleccionado a la izquierda y, a continuación, haz clic en Añadir de nuevo.
    2. En el menú desplegable Tipo de condición, selecciona Hora Programación Hora del día.

      1. En el menú desplegable Operador, selecciona Después o el.
      2. En el menú desplegable Hora del día, seleccione 9 (las 9:00).
      3. En el menú desplegable Elige una zona horaria, selecciona la zona horaria que quieras de la lista.
      4. En el menú desplegable Tipo de condición, selecciona Hora Programación Hora del día.
      5. En el menú desplegable Operador, selecciona Antes o el. Ten en cuenta que, en esta selección, "activado" se evaluará lógicamente en todos los momentos entre las 17:00 y las 17:59. Para que el acceso caduque a las 16:59, asegúrate de que la hora sea las 16 en lugar de las 17.
      6. En el menú desplegable Hora del día, selecciona 17 (las 17:00).
      7. En el menú desplegable Elige una zona horaria, selecciona la zona horaria que quieras de la lista.
      8. Haz clic en Guardar para aplicar la condición.
      9. Cuando se cierre el panel Editar condición, vuelva a hacer clic en Guardar en el panel Editar permisos para actualizar su política de permitir.

      Ahora has configurado el acceso de lunes a viernes, de 9:00 a 17:00.

      Editor de condiciones:

      1. Haz clic en la pestaña Editor de condiciones e introduce la siguiente expresión (sustituyendo los valores de marcador de posición por los tuyos):

        request.time.getHours("Europe/Berlin") >= 9 &&
        request.time.getHours("Europe/Berlin") <= 17 &&
        request.time.getDayOfWeek("Europe/Berlin") >= 1 &&
        request.time.getDayOfWeek("Europe/Berlin") <= 5
        
      2. 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.

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

      4. Cuando se cierre el panel Editar condición, vuelva a hacer clic en Guardar en el panel Editar permisos para actualizar su 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 > 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/bigquery.dataViewer"
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 1
}

Para configurar la política de permiso con acceso programado, 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": [
        "user:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Business_hours",
        "description": "Business hours Monday-Friday",
        "expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
      }
    }
  ],
  "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

Se aplica la nueva política de permiso y la concesión de rol del grupo permitirá el acceso entre los días y las horas especificados.

REST

Usa el patrón lectura, modificación y escritura para permitir el acceso programado.

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, como my-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"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "group:my-group@example.com"
      ]
    }
  ]
}

A continuación, modifica la política de permitir para que se permita el acceso programado.

Añade la siguiente expresión de condición destacada (sustituyendo la marca de tiempo por la tuya). Asegúrese de que ha actualizado el valor version a 3:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:my-user@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "group:my-group@example.com"
      ],
      "condition": {
        "title": "Business_hours",
        "description": "Business hours Monday-Friday",
        "expression":
          "request.time.getHours('Europe/Berlin') >= 9 &&
          request.time.getHours('Europe/Berlin') <= 17 &&
          request.time.getDayOfWeek('Europe/Berlin') >= 1 &&
          request.time.getDayOfWeek('Europe/Berlin') <= 5"
      }
    }
  ]
}

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. Google Cloud Los IDs de proyecto son cadenas 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:my-user@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "members": [
          "group:my-group@example.com"
        ],
        "condition": {
          "title": "Business_hours",
          "description": "Business hours Monday-Friday",
          "expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
        }
      }
    ]
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

La respuesta contiene la política de permiso actualizada.


Siguientes pasos