Configura el acceso temporal

En este tema, se describe cómo configurar el acceso temporal (por vencer) en los recursos de Google Cloud mediante vinculaciones de roles condicionales en las políticas de permisos. Si usas los atributos de fecha y hora, puedes aplicar controles basados en el tiempo cuando accedes a un recurso determinado. Por ejemplo, puedes otorgar acceso temporal a un proyecto que se inicia y se detiene a una hora específica, o de forma programada y recurrente.

Antes de comenzar

  • Lee la Descripción general de las condiciones para comprender los conceptos básicos de las vinculaciones de roles condicionales de Identity and Access Management (IAM).
  • Revisa los atributos de fecha y hora que se pueden usar en una expresión de condición. Todos los servicios de Google Cloud reconocen los atributos de fecha y hora.

Funciones requeridas

Para obtener los permisos que necesitas a fin de administrar las vinculaciones de roles condicionales, pídele a tu administrador que te otorgue los siguientes roles de IAM:

  • Para administrar el acceso a los proyectos: Administrador de IAM de proyecto (roles/resourcemanager.projectIamAdmin) en el proyecto
  • Para administrar el acceso a las carpetas: Administrador de carpetas (roles/resourcemanager.folderAdmin) en la carpeta
  • Para administrar el acceso a los proyectos, las carpetas y las organizaciones: Administrador de la organización (roles/resourcemanager.organizationAdmin) en la organización
  • Para administrar el acceso a casi todos los recursos de Google Cloud: Administrador de seguridad (roles/iam.securityAdmin) en el proyecto, la carpeta o la organización a cuyos recursos deseas administrar el acceso

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Estos roles predefinidos contienen los permisos necesarios para administrar las vinculaciones de roles condicionales. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

  • Para administrar el acceso a los proyectos:
    • resourcemanager.projects.getIamPolicy en el proyecto
    • resourcemanager.projects.setIamPolicy en el proyecto
  • Para administrar el acceso a las carpetas:
    • resourcemanager.folders.getIamPolicy en la carpeta
    • resourcemanager.folders.setIamPolicy en la carpeta
  • Para administrar el acceso a las organizaciones:
    • resourcemanager.organizations.getIamPolicy en la organización
    • resourcemanager.organizations.setIamPolicy en la organización

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

Otorga acceso temporal

Se puede usar una vinculación de función condicional para otorgar acceso por tiempo limitado a un recurso, lo que garantiza que un usuario ya no pueda acceder al recurso después de la fecha y hora de vencimiento especificadas.

Considera la siguiente situación: las reglas de seguridad de la información de la empresa ExampleCo hace hincapié en que ningún empleado debe tener acceso indefinido a los recursos en los proyectos de producción. Antes, los administradores configuraban y borraban de forma manual las vinculaciones de funciones de IAM para satisfacer las necesidades de emergencia de los ingenieros. A fin de reducir la sobrecarga administrativa, ExampleCo puede configurar una vinculación de función condicional con una condición de fecha y hora para establecer una fecha de finalización de la vinculación.

Para otorgar acceso con vencimiento a un recurso de proyecto, 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 principal 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 condiciones. 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 condiciones 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 con vencimiento.
    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. Después de que el panel Editar condición se cierre, 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("2020-07-01T00: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. Después de que el panel Editar condición se cierre, 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 > filepath

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
}

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_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, 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 filepath

Se aplica la política de permisos nueva; el otorgamiento del 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"
      ]
    }
  ]
}

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:

{
  "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')"
      }
    }
  ]
}

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:


Administra el acceso según las horas y los días de la semana

Una vinculación de función condicional se puede usar para otorgar acceso a un recurso solo dentro de ciertas horas y días de la semana de forma recurrente.

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

Para otorgar acceso a un recurso de proyecto solo durante ciertas horas y días de la semana de forma recurrente, 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 principal 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 condiciones. 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 condiciones 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. Haz clic en Agregar.
    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 En el día o después de este.
    4. En el menú desplegable Día de la semana, selecciona Lunes.
    5. En el menú desplegable Elegir una zona horaria, selecciona la zona horaria que desees.
    6. Asegúrate de que el operador Y esté seleccionado a la izquierda y vuelve a hacer clic en Agregar.
    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 En el día o antes de este.
    9. En el menú desplegable Día de la semana, selecciona Viernes.
    10. En el menú desplegable Elegir una zona horaria, selecciona la zona horaria que desees.

    En este momento, solo configuraste el acceso de lunes a viernes. Ahora, debes configurar el acceso de 9:00 a.m. (9:00) a 5:00 p.m. (17:00).

    1. Asegúrate de que el operador Y esté seleccionado a la izquierda y vuelve a hacer clic en Agregar.
    2. En el menú desplegable Tipo de condición, selecciona Hora  Programación  Hora del día.

      1. En el menú desplegable Operador, selecciona En el día o después de este.
      2. En el menú desplegable Hora del día, selecciona 9 (9 a.m.).
      3. En el menú desplegable Elegir una zona horaria, selecciona la zona horaria que desees.
      4. En el menú desplegable Tipo de condición, selecciona Hora  Programación  Hora del día.
      5. En el menú desplegable Operador, selecciona En el día o antes de este. Tenga en cuenta que, para esta selección, “activado” se evaluará de manera lógica en todos los horarios entre las 17:00 (5:00 p.m.) y las 17:59 (5:59 p.m.). A fin de configurar el acceso para que venza a las 4:59 p.m., asegúrate de que la hora sea 16 en lugar de 17.
      6. En el menú desplegable Hora del día, selecciona 17 (5 p.m.).
      7. En el menú desplegable Elegir una zona horaria, selecciona la zona horaria que desees.
      8. Haz clic en Guardar para aplicar la condición.
      9. 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.

      Configuraste el acceso de lunes a viernes de 9:00 a.m. a 5:00 p.m.

      Editor de condiciones:

      1. Haz clic en la pestaña Editor de condiciones y, luego, ingresa la siguiente expresión (reemplaza los valores del 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 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 > filepath

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

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

Para configurar la política de permisos con acceso programado, 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:rita@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, 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 filepath

Se aplica la política nueva; el otorgamiento del rol de rita@example.com permitirá el acceso entre los días y los horarios especificados.

REST

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

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/bigquery.dataViewer",
      "members": [
        "user:rita@example.com"
      ]
    }
  ]
}

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

Agrega la siguiente expresión de condición destacada (reemplaza la marca de tiempo por la tuya). Asegúrate de haber actualizado el valor version3:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "user:rita@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 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:rita@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, expande una de estas opciones:

La respuesta contiene la política de permisos actualizada:


¿Qué sigue?