Примеры контекстно-зависимого доступа для расширенного режима

This article describes use cases for Context-Aware Access that include policies using custom access levels. In these examples, you create custom access levels in Advanced mode, using Common Expressions Language (CEL) .

If you prefer, you can also use functions and macros when building custom access levels using CEL expressions.

Примеры уровней доступа, разработанных в базовом режиме (с использованием интерфейса доступа с учетом контекста), см. в разделе «Примеры доступа с учетом контекста для базового режима» .

Примеры аутентификации

Предоставляйте пользователям доступ на основе надежности их учетных данных для входа в систему.

Для повышения безопасности доступа к приложениям, содержащим конфиденциальные данные, можно определить, каким образом пользователь прошел аутентификацию в системе, чтобы решить, получит ли он доступ к приложению.

For example, users logged in with just a password can only be allowed to access applications that do not contain any sensitive information, whereas a user logged in with a hardware security key as a second factor can be allowed to access the most sensitive enterprise applications.

Этот уровень доступа использует атрибуты request.auth для проверки того, что пользователи входят в систему, используя как пароль, так и аппаратный ключ для двухфакторной аутентификации, и могут получить доступ к конфиденциальным приложениям.

request.auth.claims.crd_str.pwd == true && request.auth.claims.crd_str.hwk == true

Allow access to users with strong authentication credentials

Часто администраторы хотят ограничить доступ к корпоративным ресурсам только после аутентификации пользователя с использованием надежных учетных данных. В следующем примере используются атрибуты levels и request.auth следующим образом:

  • If a user is coming from a corporate device, any MFA, except SMS, method will suffice (Methods can be push notification, hardware or software security key, or one time password)
  • Если пользователь использует устройство, не принадлежащее компании, необходимо использовать аппаратный или программный ключ безопасности.

// Require basic MFA (not SMS) on corporate devices and security key (hardware or software) if not
levels.Require_Secure_Device &&
(
(
levels.Require_Corporate_Device &&
request.auth.claims.crd_str.mfa &&
!request.auth.claims.crd_str.sms
) ||
(
!levels.Require_Corporate_Device &&
(
request.auth.claims.crd_str.hwk || request.auth.claims.crd_str.swk
)
)
)

Разрешите доступ к приложениям только из сессий, привязанных к DBSC.

Применимо только к веб-приложениям для настольных компьютеров и не подходит для мобильных приложений или API.

Вы можете повысить безопасность доступа к приложениям, содержащим конфиденциальные данные, используя учетные данные сеанса, привязанные к устройству (DBSC). DBSC привязывает сеанс пользователя к его устройству при использовании браузера Chrome в Windows, что может значительно снизить риск перехвата сеанса.

This access level uses the request.auth attribute to verify that the user's sessions are bound to a specific device. If it is, access is granted to the app. If not (meaning the session isn't DBSC-bound), access is denied.

Во избежание ошибок включите DBSC для всех учетных записей пользователей, на которые распространяется этот уровень доступа. Подробности см. в разделе «Включение DBSC» .

Перед включением активного режима установите уровень доступа в режим «Монитор» . В режиме «Монитор» вы можете проверить влияние принудительного применения уровней доступа, не нарушая доступ пользователей.

Используйте это выражение CEL для создания собственного уровня доступа:

request.auth.sessionBoundToDevice(origin) == true

Используйте это выражение CEL, чтобы принудительно включить DBSC только на устройствах Windows с браузером Chrome версии 136 или более поздней:

!(device.os_type == OsType.DESKTOP_WINDOWS && device.chrome.versionAtLeast("136.0.0")) || request.auth.sessionBoundToDevice(origin) == true

Примеры устройств

Allow access from a device based on signals reported by a BeyondCorp Alliance partner

Вы можете использовать сигналы устройств, передаваемые партнером BeyondCorp Alliance. В этом примере в качестве приложения используется Lookout Software.

Этот уровень доступа использует атрибут устройства для проверки того, что устройство, используемое для доступа к Google Workspace, по данным Lookout соответствует политикам, и оценка состояния устройства составляет «Очень хорошо».

device.vendors["Lookout"].is_compliant_device == true && device.vendors["Lookout"].device_health_score == DeviceHealthScore.VERY_GOOD

Разрешите доступ только из управляемого браузера Chrome с последними обновлениями.

Этот уровень доступа использует атрибут устройства для проверки того, что пользователи используют последнюю версию управляемого браузера Chrome, и разрешает доступ только через такой браузер.

device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED && device.chrome.versionAtLeast("94.0.4606.81")

Предоставьте доступ, используя корпоративный сертификат.

Для определения того, является ли устройство корпоративным активом, можно использовать корпоративные сертификаты для устройств с настраиваемыми уровнями доступа. Этот уровень доступа использует атрибут устройства для проверки актива. Дополнительную информацию и примеры см. в разделе « Настройка условий корпоративного сертификата» .

Устройство может иметь более одного сертификата. Корпоративные сертификаты используются на пользовательском уровне доступа с помощью макроса exists() . Например:

device.certificates.exists(cert, predicate)

В этом примере cert — это простой идентификатор, используемый в предикате переменной для привязки к корпоративному сертификату устройства. Макрос exists() объединяет результаты предикатов для каждого элемента с помощью оператора ИЛИ (||). Макросы возвращают true, если хотя бы один сертификат удовлетворяет выражению предиката.

В таблице ниже перечислены атрибуты, которые можно использовать для формирования выражений CEL, применяемых с пользовательскими уровнями доступа. Обратите внимание, что сравнение строк чувствительно к регистру.

Атрибут Описание Пример предиката
выражение
(где сертификат является
идентификатор макросов)
is_valid

Возвращает true, если сертификат действителен и срок его действия не истёк.
(логическое значение)

cert.is_valid
cert_fingerprint Fingerprint of the certificate
(base64 без дополнения SHA256)
cert.cert_fingerprint == origin.
clientCertFingerprint()
root_ca_fingerprint Отпечаток сертификата корневого центра сертификации, использованного для подписи этого сертификата.
(base64 без дополнения SHA256)
cert.root_ca_fingerprint == "the_fingerprint"
эмитент

Название эмитента
(полностью развернутые имена)

Чтобы узнать имя издателя, выполните следующую команду для сертификата:

$ openssl x509 -in ca_1.crt -noout
-эмитент
эмитент=
/C=IN/ST=UP/L=NCR/O=BCEDemo/
OU=BCEDemo_1/CN=inter_1/
emailAddress=test_inter1@beyondcorp.in

The issuer string used in the access level is the reverse of the output and the "/" replaced by a comma, for example:

EMAILADDRESS=test_inter1@beyondcorp.in, CN=inter_1, OU=BCEDemo_1, O=BCEDemo, L=NCR, ST=UP, C=IN

cert.issuer == "EMAILADDRESS=test_inter1
@beyondcorp.in, CN=inter_1, OU=BCEDemo_1, O=BCEDemo, L=NCR, ST=UP, C=IN"
предмет Название субъекта сертификата
(полностью развернутые имена)
cert.subject == "CA_SUB"
серийный номер

Серийный номер сертификата
(нить)

cert.serial_number == "123456789"
template_id Идентификатор шаблона расширения X.509. Шаблон сертификата для сертификата.
(нить)
cert.template_id == "1.3.6.1.4.1.311.21.
8.15608621.11768144.
5720724.
16068415.6889630.81.
2472537.7784047"

Примеры часто используемых политик:

Validate that the device has a valid enterprise certificate signed by the company root certificate

device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "ROOT_CA_FINGERPRINT")

Проверьте эмитента корпоративного сертификата на устройстве.

device.certificates.exists(cert, cert.is_valid && cert.issuer == "EMAILADDRESS=test_inter1@beyondcorp.in, CN=inter_1, OU=BCEDemo_1, O=BCEDemo, L=NCR, ST=UP, C=IN")

Разрешите доступ к устройствам с включенным шифрованием диска и блокировкой экрана.

This example uses the device attribute to require both disk encryption and screen lock to be enabled. In addition, the device has to be approved by administrators.

By default, all devices created by Endpoint Verification are approved. However, there are cases where you may want to block a device such as when a device is lost. In these cases you would not want these devices to be able to access the corporate resources.

For other access level examples in this document, assume that this access level has the name Require_Secure_Device .

// Требуется включение шифрования диска и блокировки экрана
// Это применимо ко всем основным платформам (Windows, Mac, Linux, CROS, iOS, Android)
// Это основополагающий принцип, на который должны полагаться все остальные уровни доступа.
device.encryption_status == DeviceEncryptionStatus.ENCRYPTED &&
device.is_secured_with_screenlock &&
device.is_admin_approved_device

Предоставьте доступ к устройствам, использующим браузер Chrome с базовыми требованиями безопасности.

In this example the access level uses the device attribute to require Chrome browser with basic security requirements.

// Требуется управление Chrome на уровне профиля или браузера.
// security event reporting enabled and must be version 97 or greater
levels.Require_Secure_Device &&
(
device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED ||
device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_PROFILE_MANAGED
) &&
device.chrome.is_security_event_analysis_enabled &&
device.chrome.versionAtLeast("97")

Разрешите доступ к устройствам, использующим браузер Chrome, с соблюдением требований безопасности.

В этом примере атрибут device используется для требования, чтобы пользователь использовал управляемый браузер или профиль Chrome, а также чтобы в Chrome были включены коннекторы защиты от угроз и данных. В примере атрибут levels используется для ссылки на описанный ранее уровень доступа Require Managed Chrome. В следующем примере предполагается, что зависимый уровень доступа называется Require_Managed_Chrome .

// Require managed chrome (dependent on "Require_Managed_Chrome" access level)
// and require content inspection for downloads as well as URL check enabled
levels.Require_Managed_Chrome &&
device.chrome.is_file_download_analysis_enabled &&
device.chrome.is_realtime_url_check_enabled

Предоставьте доступ к устройствам, принадлежащим компании.

Одним из требований для контроля доступа является разрешение доступа только в том случае, если устройство находится в управлении или принадлежит компании. Существует множество способов определить, находится ли устройство в корпоративной собственности или под управлением компании, в том числе:

  • Если серийный номер устройства совпадает с номером, зарегистрированным в системе управления активами компании.
  • Если устройство имеет действующий корпоративный сертификат, выданный компанией.

These two approaches can be used in the following custom access level that uses levels and device attributes to determine if the device is corporate-owned or managed.

// The device is a corporate if one of the following conditions is true:
// 1. If the serial number matches what the admin has uploaded
// 2. If the device has a valid enterprise-issued certificate
levels.Require_Secure_Device &&
(
device.is_corp_owned_device ||
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "SOME_ROOT_CA_FINGERPRINT")
)

The fingerprint is the unpadded base64-encoded SHA256 digest (in binary format) of the DER-encoded certificate. The string can be generated from the certificate in PEM format using the following procedure with openssl:

$ openssl x509 -in cert.pem -out cert.der -outform DER
$ openssl dgst -sha256 -binary cert.der > digest.sha
$ openssl base64 -in digest.sha

Разрешайте доступ только тогда, когда данные об устройстве из CrowdStrike актуальны.

В рамках оценки Falcon Zero Trust Assessments (ZTA) компания CrowdStrike выдает две временные метки:
  • Выпущено в момент времени (iat)
  • Отметка времени истечения срока действия (exp)

The access level uses the device attribute to ensure that CrowdStrike data is fresh. Note that Chrome Enterprise Premium has an innate delay of 90 minutes for consuming any new assessment from Falcon ZTA, so using durations less than an hour is ill-advised.

// Ensure one of these conditions is true for data from Crowdstrike:
// Должно выполняться одно из следующих условий
// 1. Оценка устройства проводилась в течение последних суток
// 2. Assessment has not expired (2 weeks since last iat)
"CrowdStrike" в device.vendors && (
request.time - timestamp(device.vendors["CrowdStrike"].data["iat"]) < duration("1d") ||
timestamp(device.vendors["CrowdStrike"].data["exp"]) - request.time > duration("0m")
)

Разрешите доступ, если BeyondCorp Alliance сочтет устройство соответствующим требованиям.

Chrome Enterprise Premium сотрудничает со многими партнерами по экосистеме BeyondCorp Alliance для интеграции сигналов и контекста их устройств в решение Chrome Enterprise Premium. Партнеры могут делиться с Chrome Enterprise Premium любым количеством атрибутов, и одним из них является атрибут is_compliant_device . В следующем примере используется атрибут device , чтобы показать, как можно проверить, интегрировалось ли какое-либо из партнеров BeyondCorp Alliance с Chrome Enterprise Premium и считает ли оно устройство соответствующим требованиям.

Макрос exists расширяет выражение для каждого из партнеров альянса BeyondCorp с помощью оператора || (или).

// Проверьте, считает ли кто-либо из партнеров BCA данное устройство соответствующим требованиям.
["CrowdStrike", "Tanium", "PANW", "Check Point", "Lookout"].exists(
v, v in device.vendors && device.vendors[v].is_compliant_device
)

Allow access when Android verified boot status is green

В этом примере используются атрибуты устройства , чтобы убедиться, что на устройствах установлена ​​безопасная версия Android.

Verified Boot checks if executed code comes from a trusted source (usually device OEMs), rather than from an attacker or corruption. For details, go to Verified Boot .

// Требуется подтверждение загрузки Android в зелёном цвете
device.android_device_security.verified_boot == true

Предоставьте доступ к устройствам, прошедшим проверку на соответствие стандартам CTS.

В этом примере используются атрибуты устройств , чтобы потребовать от устройств прохождения проверок на соответствие требованиям пакета тестов совместимости (Compatibility Test Suite, CTS). Подробности см. в разделе «Пакет тестов совместимости» .

// Требовать от устройств прохождения проверок на соответствие стандартам CTS
device.android_device_security.cts_profile_match == true

Allow access to devices that have Google Play Protect Verify Apps turned on

This example uses device attributes to require devices to have Google Play Protect Verify Apps turned on.

Функция «Проверка приложений» сканирует приложения на наличие угроз, если они установлены не из Google Play. Она также периодически сканирует устройства на наличие потенциально вредоносных приложений. Функция «Проверка приложений» включена по умолчанию. Для устройств, находящихся в расширенном управлении, можно указать, могут ли пользователи её отключать. Дополнительную информацию см. в разделе «Применение настроек для мобильных устройств Android» .

// Require devices to have Google Play Protect Verify Apps enabled
device.android_device_security.verify_apps_enabled == true

Do not allow access to devices that have potentially harmful apps

This example uses device attributes to deny access to devices that have potentially harmful apps. These apps are often called malware. For details, go to Potentially Harmful Applications (PHAs) .

// Запретить доступ к устройствам, содержащим потенциально опасные приложения. android_device_security.has_potentially_harmful_apps != true

Примеры доступа по времени

Разрешайте доступ работникам сменного графика только в часы их смены.

Предприятия хотят гарантировать, что их сотрудники, работающие посменно, будут иметь доступ к корпоративным ресурсам только в часы своей смены. Следующие уровни доступа используют атрибут levels для определения 3 смен в период с понедельника по пятницу.

// Смена 1 - с понедельника по пятницу, с полуночи до 8 утра
levels.Require_Secure_Device &&
request.time.getDayOfWeek("America/Los_Angeles") >= 1 &&
request.time.getDayOfWeek("America/Los_Angeles") <= 5 &&
request.time.timeOfDay("America/Los_Angeles").between('00:00:00', '08:00:00')


// Смена 2 - с понедельника по пятницу, с 8:00 до 16:00
levels.Require_Secure_Device &&
request.time.getDayOfWeek("America/Los_Angeles") >= 1 &&
request.time.getDayOfWeek("America/Los_Angeles") <= 5 &&
request.time.timeOfDay("America/Los_Angeles").between('08:00:00', '16:00:00')


// Смена 3 - с понедельника по пятницу, с 16:00 до полуночи
levels.Require_Secure_Device &&
request.time.getDayOfWeek("America/Los_Angeles") >= 1 &&
request.time.getDayOfWeek("America/Los_Angeles") <= 5 &&
request.time.timeOfDay("America/Los_Angeles").between('16:00:00', '00:00:00')


// Разрешить работникам, работающим посменно, доступ к ресурсам с понедельника по пятницу с 9:00 до 17:00, за исключением Дня независимости 4 июля.
levels.Require_Secure_Device &&
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')

Разрешить временный доступ

Иногда предприятиям необходимо разрешить экстренный доступ в случае чрезвычайных ситуаций, когда у администратора нет доступа к защищенному устройству, но ему требуется кратковременный экстренный доступ.

В этом случае создайте уровень доступа с ограничениями по времени и местоположению, используя атрибут levels , и назначьте его конкретному администратору. После назначения этот уровень доступа будет действителен только в течение указанного времени. По истечении этого периода времени доступ администратора снова будет регулироваться существующими требованиями.

// Разрешить временный доступ к ресурсам 1 марта 2022 года с 22:00 до полуночи.
// И доступ должен осуществляться из региона США.
levels.Require_Secure_Device &&
request.time.between('2022-03-01T23:00:00+08:00', '2022-03-02T23:59:59+08:00') &&
origin.region_code == "US"
// Обратите внимание, что время окончания исключает предыдущие, поэтому в приведенном выше примере потенциально может быть 2 секунды, которые...
// the users may not have access. Another option is to use this
// !between('00:00:01','16:00:00')

Пример объединения условий с двух уровней

Определите новый уровень доступа, объединив условия из двух уровней доступа.

This access level uses levels attributes, and requires that users meet the combined conditions of two access levels. In this example, access_level_name_1 and access_level_name_2 refer to Internal Name .

levels.access_level_name_1 && levels.access_level_name_2


Google, Google Workspace, а также связанные с ними знаки и логотипы являются товарными знаками Google LLC. Все остальные названия компаний и продуктов являются товарными знаками компаний, с которыми они связаны.