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 gestionar el acceso a los proyectos, haz lo siguiente:
Administrador de gestión de identidades y accesos de proyectos (
roles/resourcemanager.projectIamAdmin
) en el proyecto -
Para gestionar el acceso a las carpetas, sigue estos pasos:
Administrador de carpetas (
roles/resourcemanager.folderAdmin
) en la carpeta -
Para gestionar el acceso a proyectos, carpetas y organizaciones, sigue estos pasos:
Administrador de la organización (
roles/resourcemanager.organizationAdmin
) en la organización -
Para gestionar el acceso a casi todos los Google Cloud recursos:
Administrador de seguridad (
roles/iam.securityAdmin
) en el proyecto, la carpeta o la organización cuyos recursos quieras gestionar
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
En la consola, ve a la página IAM. Google 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 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.
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:
- En el desplegable Tipo de condición, selecciona Acceso caducado.
- 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, haz clic en Guardar de nuevo en el panel Editar permisos para actualizar tu política de permitir.
Editor de condiciones:
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")
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, 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, 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": [ "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, 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": [ "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
En la consola, ve a la página IAM. Google 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 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.
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:
- Haz clic en Añadir.
- En el menú desplegable Tipo de condición, selecciona Hora. Programación Día de la semana.
- En el menú desplegable Operador, selecciona Después o el.
- En el menú desplegable Día de la semana, selecciona Lunes.
- En el menú desplegable Elige una zona horaria, selecciona la zona horaria que quieras de la lista.
- Asegúrate de que el operador Y esté seleccionado a la izquierda y, a continuación, haz clic en Añadir de nuevo.
- En el menú desplegable Tipo de condición, selecciona Hora. Programación Día de la semana.
- En el menú desplegable Operador, selecciona Antes o el.
- En el menú desplegable Día de la semana, selecciona Viernes.
- 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.
- Asegúrate de que el operador Y esté seleccionado a la izquierda y, a continuación, haz clic en Añadir de nuevo.
En el menú desplegable Tipo de condición, selecciona Hora
Programación Hora del día.- En el menú desplegable Operador, selecciona Después o el.
- En el menú desplegable Hora del día, seleccione 9 (las 9:00).
- En el menú desplegable Elige una zona horaria, selecciona la zona horaria que quieras de la lista.
- En el menú desplegable Tipo de condición, selecciona Hora Programación Hora del día.
- 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.
- En el menú desplegable Hora del día, selecciona 17 (las 17:00).
- En el menú desplegable Elige una zona horaria, selecciona la zona horaria que quieras de la lista.
- Haz clic en Guardar para aplicar la condición.
- 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:
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
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, 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, 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": [ "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, 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": [ "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
- Consulta cómo gestionar vinculaciones de roles condicionales.
- Consulta cómo lint allow policies.
- Consulta cómo usar las vinculaciones de roles condicionales para gestionar el acceso privilegiado a proyectos en el momento oportuno.