配置时间和日期访问条件

借助 Access Context Manager 的日期和时间限制功能,企业能够根据日期和时间来设置访问权限控制。

在评估零信任访问权限时,通常需要将用户限制为只能在特定日期和时间访问资源。例如,轮班工人只能在轮班期间访问公司资源,或用户仅能在一天的特定时间内获得临时访问权限。

如要应用时间和日期访问权限级别条件,请使用下表中列出的函数。函数的格式为 function(timezone)

您可以将 timezone 指定为 UTC,也就是相对于 UTC 的存在明确小时和分钟偏差的固定时区,也可以指定为较长的 timezone 名称,例如 Europe/ParisCETUS/Central。如需完整列表,请参阅通用快捷语言定义的时区部分。

如果未指定“时区”,则表达式默认使用世界协调时间 (UTC)。

函数 说明 示例
getFullYear 检索表示当前年份的数字,例如 2020。

年份是 2020 年吗?

request.time.getFullYear("America/Los_Angeles") == 2020
getMonth 检索一年中的月份。月份值介于 0 到 11 之间,0 == 1 月,11 == 12 月。

月份是 1 月吗?

request.time.getMonth("America/Los_Angeles") == 1
getDate 检索该月日期。日期值介于 1 到 31 之间,1 是该月的第一天,31 是该月的 31 天。

日期是该月的第一天吗?

request.time.getDate("America/Los_Angeles") == 1
getDayOfMonth 检索该月日期。日期值的范围是从 0 到 30,其中 0 表示该月的第一天,30 表示该月的 31 日。

日期是该月的第一天吗?

request.time.getDayOfMonth("America/Los_Angeles") == 0
getDayOfWeek 检索该周日期。日期值的范围是从 0 到 6,其中 0 表示星期日,6 表示星期六。

当日是星期一吗?

request.time.getDayOfWeek("America/Los_Angeles") == 1
getDayOfYear 检索一年中的某天。天值介于 0 到 365 之间,其中 0 表示一年的第一天,365 表示一年中的 366 天。

当日是一年中的第一天吗?

request.time.getDayOfYear("America/Los_Angeles") == 0
getHours 检索该天中的时段。小时值的范围是从 0 到 23,其中 0 表示午夜,23 表示晚上 11 点。

时间是晚上 7 点吗?

request.time.getHours("America/Los_Angeles") == 19
getMinutes 检索该小时的分钟段。分钟值的范围是从 0 到 59,其中 0 表示第一分钟,59 表示最后一分钟。

时间是晚上 7:30 吗?

request.time.getHours("America/Los_Angeles") == 19 && request.time.getMinutes("America/Los_Angeles") == 30
date 返回表示标准化为世界协调时间 (UTC) 零点的日期的时间戳。

以世界协调时间 (UTC) 表示的当前时间。

request.time.date()
date(tz string) 返回表示相对于 TimeZone 字符串标准化为零点的日期的时间戳 <tz>。

以太平洋时间表示的当前时间。

request.time.date('America/Los_Angeles')

request.time.date('08:00')

timeOfDay 返回与 UTC 表示的时间戳相关的 google.type.TimeOfDay

以世界协调时间 (UTC) 表示的当日当前时间,例如“09:30:00”

request.time.timeOfDay()
timeOfDay(tz string) 返回与时间戳相关且相对于 TimeZone 字符串的 google.type.TimeOfDay <tz>。

以太平洋时间表示的当日当前时间,例如“09:30:00”

request.time.timeOfDay('America/Los_Angeles')
between(start, stop)

(针对时间戳)

对于给定时间戳,如果时间戳介于“start”(含)和“stop”(不含)之间,则返回 True

“Start”和“stop”可以是 type.Timestamp,也可以是字符串,后者将转换为 type.Timestamp

当前时间戳(太平洋标准时间)介于 2020 年 1 月 10 日 00:00(含)到 2020 年 1 月 11 日 00:00(不含)之间吗?

request.time.date('08:00') .between('2020-10-01T00:00:00+08:00', '2020-10-01T00:00:00+08:00')
between(start, stop string)

(对于 TimeOfDay)

对于给定的 TimeOfDay,如果日期时间介于“start”(含)和“stop”(不含)之间,则返回 True

“Start”和“stop”可以是 type.TimeOfDay,也可以是字符串,后者将转换为 type.TimeOfDay

当日当前时间(太平洋时间)介于上午 09:30(含)到下午 05:30(不含)之间吗?

request.time.timeOfDay('America/Los_Angeles').between('09:30:00', '17:30:00')

下表举例说明了如何使用时间和日期限制:

政策示例 表达式
允许轮班工人在每周周一到周五上午 9 点至下午 5 点之间访问资源,但 7 月 4 日除外。

选项 1:

request.time.getDayOfWeek("America/Los_Angeles") >= 1 && request.time.getDayOfWeek("America/Los_Angeles") <= 5 && request.time.getHours("America/Los_Angeles") >= 9 && request.time.getHours("America/Los_Angeles") <= 17 && !(request.time.getMonth("America/Los_Angeles") == 6 && request.time.getDayOfMonth("America/Los_Angeles") == 3)

选项 2:

request.time.getDayOfWeek("America/Los_Angeles") >= 1 && request.time.getDayOfWeek("America/Los_Angeles") <= 5 && !(request.time.getMonth("America/Los_Angeles") == 6 && request.time.getDayOfMonth("America/Los_Angeles") == 3) && request.time.timeOfDay("America/Los_Angeles").between('09:30:00', '17:00:00')

允许从 2020 年 3 月 1 日晚上 10 点到午夜临时访问资源。

选项 1:

request.time.getFullYear("America/Los_Angeles") == 2020 && request.time.getMonth("America/Los_Angeles") == 2 && request.time.getDayOfMonth("America/Los_Angeles") == 0 && request.time.getHours("America/Los_Angeles") >= 22 && request.time.getHours("America/Los_Angeles") <= 23

选项 2:

request.time.between('2020-03-01T23:00:00+08:00', '2020-03-02T00:00:00+08:00')

以下是使用部分函数捕获特定时间范围的示例表达式:

表示营业时间范围
日期时间格式为“HH:MM:SS”,并遵循 RFC 3339 标准。

request.time.timeOfDay('America/Los_Angeles').between('09:30:00', '17:30:00')
request.time.date('America/Los_Angeles')
    .between('01-10-2020T00:00:00+08:00', '01-11-2020T00:00:00-07:00')

表示当月第一周的的特定日期
(请注意,我们支持其他时区格式)

request.time.getDayOfMonth('America/Los_Angeles') < 7

表示每年的特定日期范围
例如,用于季度报告。

request.time.date('Asia/Hong_Kong').between(
    request.time.getFullYear('08:00') + '-12-15T00:00:00+08:00',
    request.time.getFullYear('08:00')+1 + '-01-01T00:00:00+08:00')