В этой статье описаны варианты использования контекстно-зависимого доступа, включающие политики с настраиваемыми уровнями доступа. В этих примерах вы создаете настраиваемые уровни доступа в расширенном режиме, используя язык выражений Common Expressions Language (CEL) .
При желании вы также можете использовать функции и макросы при создании пользовательских уровней доступа с помощью выражений CEL.
Примеры уровней доступа, разработанных в базовом режиме (с использованием интерфейса доступа с учетом контекста), см. в разделе «Примеры доступа с учетом контекста для базового режима» .
Примеры аутентификации
Предоставляйте пользователям доступ на основе надежности их учетных данных для входа в систему.
Для повышения безопасности доступа к приложениям, содержащим конфиденциальные данные, можно определить, каким образом пользователь прошел аутентификацию в системе, чтобы решить, получит ли он доступ к приложению.
Например, пользователям, вошедшим в систему только с помощью пароля, будет разрешен доступ только к приложениям, не содержащим конфиденциальной информации, тогда как пользователю, вошедшему в систему с помощью аппаратного ключа безопасности в качестве второго фактора, будет разрешен доступ к наиболее конфиденциальным корпоративным приложениям.
Этот уровень доступа использует атрибуты request.auth для проверки того, что пользователи входят в систему, используя как пароль, так и аппаратный ключ для двухфакторной аутентификации, и могут получить доступ к конфиденциальным приложениям.
request.auth.claims.crd_str.pwd == true && request.auth.claims.crd_str.hwk == true
Предоставьте доступ пользователям с надежными учетными данными для аутентификации.
Часто администраторы хотят ограничить доступ к корпоративным ресурсам только после аутентификации пользователя с использованием надежных учетных данных. В следующем примере используются атрибуты levels и request.auth следующим образом:
- Если пользователь использует корпоративное устройство, подойдет любой метод многофакторной аутентификации, кроме SMS (это могут быть push-уведомления, аппаратный или программный ключ безопасности или одноразовый пароль).
- Если пользователь использует устройство, не принадлежащее компании, необходимо использовать аппаратный или программный ключ безопасности.
// Требовать базовую многофакторную аутентификацию (не SMS) на корпоративных устройствах и ключ безопасности (аппаратный или программный), если это не требуется.
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, что может значительно снизить риск перехвата сеанса.
Этот уровень доступа использует атрибут request.auth для проверки того, привязаны ли сессии пользователя к конкретному устройству. Если да, то доступ к приложению предоставляется. В противном случае (то есть сессия не привязана к DBSC), доступ запрещен.
Во избежание ошибок включите 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
Примеры устройств
Разрешить доступ с устройства на основе сигналов, поступающих от партнера альянса BeyondCorp.
Вы можете использовать сигналы устройств, передаваемые партнером 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 | Отпечаток пальца сертификата (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 Строка идентификатора, используемая на уровне доступа, представляет собой обратную строку выходных данных, а символ "/" заменен запятой, например: 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" |
| шаблон_id | Идентификатор шаблона расширения X.509. Шаблон сертификата для сертификата. (нить) | cert.template_id == "1.3.6.1.4.1.311.21. 8.15608621.11768144. 5720724. 16068415.6889630.81. 2472537.7784047" |
Примеры часто используемых политик:
Убедитесь, что устройство имеет действительный корпоративный сертификат, подписанный корневым сертификатом компании.
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")
Разрешите доступ к устройствам с включенным шифрованием диска и блокировкой экрана.
В этом примере атрибут устройства используется для обязательного включения как шифрования диска, так и блокировки экрана. Кроме того, устройство должно быть одобрено администраторами.
По умолчанию все устройства, созданные с помощью проверки конечных точек, утверждаются. Однако бывают случаи, когда может потребоваться заблокировать устройство, например, в случае его утери. В таких случаях вы не захотите, чтобы эти устройства имели доступ к корпоративным ресурсам.
В других примерах уровней доступа, приведенных в этом документе, предполагается, что данный уровень доступа имеет название 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 с базовыми требованиями безопасности.
В этом примере уровень доступа использует атрибут устройства , чтобы потребовать использования браузера Chrome с базовыми требованиями к безопасности.
// Требуется управление Chrome на уровне профиля или браузера.
// Включена функция отправки отчетов о событиях безопасности, версия должна быть 97 или выше.
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 .
// Требуется управляемый Chrome (зависит от уровня доступа "Require_Managed_Chrome")
// и требуют включения проверки содержимого при загрузке, а также проверки URL-адресов.
levels.Require_Managed_Chrome &&
device.chrome.is_file_download_analysis_enabled &&
device.chrome.is_realtime_url_check_enabled
Предоставьте доступ к устройствам, принадлежащим компании.
Одним из требований для контроля доступа является разрешение доступа только в том случае, если устройство находится в управлении или принадлежит компании. Существует множество способов определить, находится ли устройство в корпоративной собственности или под управлением компании, в том числе:
- Если серийный номер устройства совпадает с номером, зарегистрированным в системе управления активами компании.
- Если устройство имеет действующий корпоративный сертификат, выданный компанией.
Эти два подхода можно использовать в следующем пользовательском уровне доступа, который использует уровни и атрибуты устройства для определения того, принадлежит ли устройство корпорации или находится под ее управлением.
// Устройство является корпоративным, если выполняется одно из следующих условий:
// 1. Если серийный номер совпадает с тем, который загрузил администратор.
// 2. Если устройство имеет действительный сертификат, выданный предприятием
levels.Require_Secure_Device &&
(
device.is_corp_owned_device ||
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "SOME_ROOT_CA_FINGERPRINT")
)
Отпечаток представляет собой незаполненный дайджест SHA256 в кодировке Base64 (в двоичном формате) сертификата в кодировке DER. Строку можно сгенерировать из сертификата в формате PEM, используя следующую процедуру с помощью 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 актуальны.
- Выпущено в момент времени (iat)
- Отметка времени истечения срока действия (exp)
Уровень доступа использует атрибут устройства для обеспечения актуальности данных CrowdStrike. Обратите внимание, что Chrome Enterprise Premium имеет встроенную задержку в 90 минут для получения любых новых оценок от Falcon ZTA, поэтому использование продолжительности менее часа не рекомендуется.
// Убедитесь, что для данных из Crowdstrike выполняется одно из следующих условий:
// Должно выполняться одно из следующих условий
// 1. Оценка устройства проводилась в течение последних суток.
// 2. Срок действия оценки не истек (прошло 2 недели с момента последней промежуточной оценки)
"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
)
Разрешить доступ, когда статус проверки загрузки Android отображается зеленым цветом.
В этом примере используются атрибуты устройства , чтобы убедиться, что на устройствах установлена безопасная версия Android.
Проверка Verified Boot подтверждает, что выполняемый код поступает из надежного источника (обычно от производителей устройств), а не от злоумышленника или в результате повреждения данных. Подробнее см. на странице Verified Boot .
// Требуется подтверждение загрузки Android в зелёном цвете
device.android_device_security.verified_boot == true
Предоставьте доступ к устройствам, прошедшим проверку на соответствие стандартам CTS.
В этом примере используются атрибуты устройств , чтобы потребовать от устройств прохождения проверок на соответствие требованиям пакета тестов совместимости (Compatibility Test Suite, CTS). Подробности см. в разделе «Пакет тестов совместимости» .
// Требовать от устройств прохождения проверок на соответствие стандартам CTS
device.android_device_security.cts_profile_match == true
Разрешите доступ к устройствам, на которых включена функция проверки приложений Google Play Protect.
В этом примере используются атрибуты устройства , чтобы потребовать включения функции проверки приложений Google Play Protect .
Функция «Проверка приложений» сканирует приложения на наличие угроз, если они установлены не из Google Play. Она также периодически сканирует устройства на наличие потенциально вредоносных приложений. Функция «Проверка приложений» включена по умолчанию. Для устройств, находящихся в расширенном управлении, можно указать, могут ли пользователи её отключать. Дополнительную информацию см. в разделе «Применение настроек для мобильных устройств Android» .
// Для корректной работы устройства необходимо включить функцию проверки приложений Google Play Protect.
device.android_device_security.verify_apps_enabled == true
Не предоставляйте доступ к устройствам, на которых установлены потенциально опасные приложения.
В этом примере используются атрибуты устройства для блокировки доступа к устройствам, на которых установлены потенциально вредоносные приложения. Такие приложения часто называют вредоносным ПО. Подробнее см. раздел «Потенциально вредоносные приложения (PHA)» .
// Запретить доступ к устройствам, содержащим потенциально опасные приложения. 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 секунды, которые...
// Пользователи могут не иметь доступа. Другой вариант — использовать это.
// !between('00:00:01','16:00:00')
Пример объединения условий с двух уровней
Определите новый уровень доступа, объединив условия из двух уровней доступа.
Этот уровень доступа использует атрибуты уровней и требует, чтобы пользователи соответствовали комбинированным условиям двух уровней доступа. В этом примере access_level_name_1 и access_level_name_2 относятся к внутреннему имени .
levels.access_level_name_1 && levels.access_level_name_2
Google, Google Workspace, а также связанные с ними знаки и логотипы являются товарными знаками Google LLC. Все остальные названия компаний и продуктов являются товарными знаками компаний, с которыми они связаны.