Configurer des conditions d'accès (heure et jour)

La fonctionnalité de restriction de date et d'heure d'Access Context Manager permet aux entreprises de définir des contrôles d'accès en fonction de la date et de l'heure.

Lors de l'évaluation de l'accès zéro confiance, il est souvent nécessaire de limiter à des jours et heures spécifiques l'accès des utilisateurs aux ressources. Par exemple, il est possible que les travailleurs postés ne soient autorisés à accéder aux ressources de l'entreprise que pendant leurs horaires de travail, ou qu'un accès temporaire soit accordé aux utilisateurs à une heure spécifique de la journée.

Pour appliquer la condition de niveau d'accès selon le jour et l'heure, utilisez les fonctions répertoriées dans le tableau suivant. Le format des fonctions est function(timezone).

Vous pouvez spécifier timezone en tant que valeur UTC, en tant que valeurs de fuseaux horaires fixes exprimés en tant que décalages en heures et minutes par rapport à UTC, ou en tant que noms de timezone longs, tels que Europe/Paris, CET ou US/Central. Pour obtenir la liste complète, consultez la section Fuseau horaire de la définition du langage CEL.

Si vous ne spécifiez pas de fuseau horaire, l'expression est définie par défaut sur UTC.

Fonction Description Exemple
getFullYear Récupérer le nombre qui représente l'année en cours, par exemple 2020.

S'agit-il de l'année 2020 ?

request.time.getFullYear("America/Los_Angeles") == 2020
getMonth Récupérer le mois de l'année. Les valeurs de mois vont de 0 à 11, où 0 == janvier et 11 == décembre.

S'agit-il du mois de janvier ?

request.time.getMonth("America/Los_Angeles") == 1
getDate Récupérer la date du mois. Les valeurs de date vont de 1 à 31, où 1 correspond au premier du mois et 31 au 31 du mois.

Est-ce le premier du mois ?

request.time.getDate("America/Los_Angeles") == 1
getDayOfMonth Récupérer le jour du mois. Les valeurs de jour vont de 0 à 30, où 0 correspond au premier du mois et 30 au 31 du mois.

Est-ce le premier du mois ?

request.time.getDayOfMonth("America/Los_Angeles") == 0
getDayOfWeek Récupérer le jour de la semaine. Les valeurs de jour vont de 0 à 6, où 0 correspond au dimanche et 6 au samedi.

Sommes-nous lundi ?

request.time.getDayOfWeek("America/Los_Angeles") == 1
getDayOfYear Récupérer le jour de l'année. Les valeurs de jour vont de 0 à 365, où 0 correspond au premier jour de l'année et 365 au 366e jour de l'année.

Est-ce le premier jour de l'année ?

request.time.getDayOfYear("America/Los_Angeles") == 0
getHours Récupérer l'heure de la journée. Les valeurs d'heure sont comprises entre 0 et 23, où 0 correspond à minuit et 23 correspond à 23:00.

Est-il 19:00 ?

request.time.getHours("America/Los_Angeles") == 19
getMinutes Récupérer la minute de l'heure. Les valeurs des minutes sont comprises entre 0 et 59, où 0 correspond à la première minute et 59 à la dernière minute.

Est-il 19:30 ?

request.time.getHours("America/Los_Angeles") == 19 && request.time.getMinutes("America/Los_Angeles") == 30
date Renvoie l'horodatage représentant la date normalisée sur minuit UTC.

Heure actuelle (UTC).

request.time.date()
date(tz string) Renvoie l'horodatage représentant la date normalisée sur minuit par rapport à la chaîne de fuseau horaire <tz>.

Heure actuelle (heure du Pacifique).

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

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

timeOfDay Renvoie le google.type.TimeOfDay associé à l'horodatage dans le fuseau UTC.

Heure actuelle de la journée (UTC), par exemple "09:30:00".

request.time.timeOfDay()
timeOfDay(tz string) Renvoie le google.type.TimeOfDay associé à l'horodatage et par rapport à la chaîne de fuseau horaire <tz>.

Heure actuelle de la journée (heure du Pacifique), par exemple "09:30:00".

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

(pour l'horodatage)

Pour un horodatage donné, renvoie True si l'horodatage est compris entre la valeur "start" (incluse) et la valeur stop (exclue).

Les valeurs "start" et "stop" peuvent être définies sur type.Timestamp ou sur une chaîne qui sera convertie en type.Timestamp.

L'horodatage actuel (PST) est-il compris entre le 10 janvier 2020 à 00:00 (inclus) et le 11 janvier 2020 à 00:00 (exclu) ?

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

(pour TimeOfDay)

Pour un TimeOfDay donné, renvoie True si l'heure de la journée est comprise entre la valeur "start" (incluse) et la valeur stop (exclue).

Les valeurs "start" et "stop" peuvent être définies sur type.TimeOfDay ou sur une chaîne qui sera convertie en type.TimeOfDay.

L'heure actuelle de la journée (heure du Pacifique) est-elle comprise entre 09:30 (inclus) et 17:30 (exclu) ?

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

Le tableau suivant contient des exemples d'utilisation des restrictions d'heure et de date :

Exemple de règle Expression
Autoriser les travailleurs postés à accéder aux ressources du lundi au vendredi, de 9:00 à 17:00, à l'exception du 4 juillet.

Option 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)

Option 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')

Autoriser un accès temporaire aux ressources le 1er mars 2020, de 22:00 à minuit.

Option 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

Option 2 :

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

Voici quelques exemples d'expressions qui utilisent certaines des fonctions pour capturer des périodes spécifiques :

Exprimer la plage pendant les heures d'ouverture
Le format de date et d'heure est "HH:MM:SS" et suit la norme 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')

Exprimer les jours spécifiques du mois, la première semaine
(Notez la compatibilité avec un autre format de fuseau horaire)

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

Exprimer des plages de dates spécifiques, annuelles
Par exemple, pour les rapports trimestriels

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')