情境感知访问权限示例(高级模式)

本文介绍了一些情境感知访问权限用例,其中涉及使用自定义访问权限级别的政策。这些示例展示了如何在高级模式下使用通用表达式语言 (CEL)创建自定义访问权限级别 。

如果您愿意,还可以在通过 CEL 表达式创建自定义访问权限级别时使用 函数

如要查看以基本模式(使用情境感知 访问权限界面)开发的访问权限级别示例,请参阅情境感知访问权限示例(基本 模式)

身份验证示例

根据用户登录凭据的安全系数来确定是否允许用户访问

对于包含敏感数据的应用,为了提高访问的安全性,您可以根据用户通过系统身份验证的方式来决定是否允许用户访问这类应用。

例如,只允许仅使用密码登录的用户访问不包含敏感信息的应用,而允许使用硬件安全密钥作为第二重身份验证方式的用户访问最敏感的企业应用。

此访问权限级别使用 request.auth 属性来验证用户是否同时使用密码和硬件密钥通过两步验证进行登录,以及能否访问敏感应用。

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

允许具有高强度身份验证凭据的用户访问

通常,管理员希望仅在用户通过高强度凭据进行身份验证后,才允许用户访问公司资源。以下示例使用 levelsrequest.auth 属性,如下所示:

  • 如果用户使用的是公司设备,那么除短信以外的任何多重身份验证 (MFA) 方法都足以满足要求(方法可以是推送通知、硬件或软件安全密钥,或动态密码)
  • 如果用户使用的是非公司设备,则必须使用硬件或软件安全密钥

// 如果使用的是公司设备,需要进行基本多重身份验证(非短信);如果使用的不是公司设备,需要使用安全密钥(硬件或软件)
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 绑定的会话访问应用

仅限桌面版 Web 应用,不适用于移动应用或 API

您可以通过要求使用设备绑定会话凭证 (DBSC) 来提升访问包含敏感 数据时的安全性。当用户在 Windows 上使用 Chrome 浏览器时,DBSC 会将用户的会话绑定到其设备,这可以显著降低会话被 盗用风险。

此访问权限级别使用 request.auth 属性来验证用户的会话是否已绑定到 特定设备。如果已绑定,则系统会授予应用访问权限。如果未绑定(即 会话未绑定到 DBSC),则系统会拒绝访问。

为避免出现访问问题,请确保分配了此访问 权限级别的用户帐号满足必要的要求。如需了解详情,请参阅使用 DBSC 的要求

请先将访问权限级别设为监控模式 ,然后再启用活动 模式。在监控模式下,您可以测试强制执行访问权限级别 的影响,而不会干扰用户访问。

使用以下 CEL 表达式创建自定义访问权限级别:

request.auth.sessionBoundToDevice(origin) == true

使用以下 CEL 表达式,仅在运行 Chrome 浏览器 136 或更高版本的 Windows 设备上强制执行 DBSC:

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

设备示例

根据 BeyondCorp Alliance 合作伙伴报告的信号来确定是否允许用户通过设备访问

您可以使用 BeyondCorp Alliance 合作伙伴报告的设备信号。本示例中使用了 Lookout Software 这款应用。

此访问权限级别使用 device 属性,验证 Lookout 是否将访问 Google Workspace 的设备标记为符合政策、且健康评分为“非常好”。

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

仅允许通过安装了最新更新的受管理的 Chrome 浏览器进行访问

此访问权限级别使用 device 属性验证用户是否使用最新版本的受管 Chrome 浏览器,并仅允许通过该类浏览器访问。

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

允许使用企业证书进行访问

对于分配了自定义访问权限级别的设备,您可以根据企业证书来确定设备是否属于公司自有资产。此访问权限级别使用 device 属性来进行资产验证。如需了解详情和查看示例,请参阅配置企业证书条件

一个设备可以有多个证书。通过使用 exists() 宏,即可在自定义访问权限级别中使用企业证书。例如:

device.certificates.exists(cert, predicate)

在此示例中,cert 是一个简单标识符,与可变量 predicate 一起使用,并且绑定至设备企业证书。exists() 宏会使用 (||) 运算符将每个元素的谓词结果连接起来。如果至少有一个证书满足谓词表达式,则宏将返回 true

下表列出了可用于形成 CEL 表达式并与自定义访问权限级别一起使用的属性。 请注意,字符串比较区分大小写。

属性 说明 谓词表达式示例(其中cert是宏的标识符)


is_valid

如果证书有效且未到期,则返回 true。
(布尔值)

cert.is_valid
cert_fingerprint 证书指纹
(未填充字符的 base64 编码 SHA256)
cert.cert_fingerprint == origin.
clientCertFingerprint()
root_ca_fingerprint 用于签署此证书的根 CA 证书的指纹
(未填充字符的 base64 编码 SHA256)
cert.root_ca_fingerprint == "the_fingerprint"
issuer

证书颁发者名称
(全称)

如需查找证书颁发者名称,请在 cert 上运行以下命令:

$ openssl x509 -in ca_1.crt -noout
-issuer
issuer=
/C=IN/ST=UP/L=NCR/O=BCEDemo/
OU=BCEDemo_1/CN=inter_1/
emailAddress=test_inter1@beyondcorp.in

访问权限级别中使用的证书颁发者字符串是输出的相反值,并且将“/”替换为逗号,例如:

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"
subject 证书的主题名称
(全称)
cert.subject == "CA_SUB"
serial_number

证书的序列号
(字符串)

cert.serial_number == "123456789"
template_id 证书的 X.509 扩展证书模板的模板 ID
(字符串)
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")

允许启用了磁盘加密和屏幕锁定功能的设备访问

此示例使用 device 属性来要求设备同时启用磁盘加密和屏幕锁定。此外,该设备必须经过管理员批准。

默认情况下,通过 Endpoint Verification 创建的所有设备都会获得批准。不过,在某些情况下(例如在设备丢失时),您可能需要阻止特定设备访问。在这些情况下,您肯定不想让这些设备能够访问公司资源。

对于本文档中的其他访问权限级别示例,假设该访问权限级别的名称为 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 浏览器的设备访问

在此示例中,访问权限级别使用 device 属性来要求使用满足基本安全要求的 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 属性来引用之前所述的“要求使用受管理的 Chrome”访问权限级别。以下示例假设依赖的访问权限级别名称为 Require_Managed_Chrome

// 要求使用受管理的 Chrome(依赖“Require_Managed_Chrome”访问权限级别)
// 以及要求启用对下载内容进行内容检查和网址检查的功能
levels.Require_Managed_Chrome &&
device.chrome.is_file_download_analysis_enabled &&
device.chrome.is_realtime_url_check_enabled

允许使用公司自有设备访问

控制访问权限的一项要求是,仅当设备由公司管理或归公司所有时,才允许其访问。您可以通过多种方式确定设备是否归公司所有或受其管理,包括:

  • 设备的序列号是否与公司资产管理系统中的序列号匹配
  • 设备是否拥有公司签发的有效企业证书

这两种方法可以在使用 levelsdevice 属性的以下自定义访问权限级别中使用,以确定设备是否归公司所有或由公司管理。

// 以下任一条件为 true 时,设备为公司设备:
// 1. 序列号与管理员上传的序列号匹配
设备拥有企业签发的有效证书
levels.Require_Secure_Device &&
(
device.is_corp_owned_device ||
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "SOME_ROOT_CA_FINGERPRINT")
)

指纹是 DER 编码证书的未填充 base64 编码 SHA256 摘要(二进制格式)。您可以按照以下程序,使用 openssl 通过证书生成字符串(PEM 格式):

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

此访问权限级别使用 device 属性来确保 CrowdStrike 数据是最新的。请注意,Chrome 企业进阶版通过 Falcon ZTA 进行任何新的评估本身会有 90 分钟的延迟,因此建议时长不要短于 1 小时。

// 确保有关 Crowdstrike 数据的以下任一条件为 true:
// 必须满足以下任一条件
// 1. 设备在过去一天内接受过评估
评估未到期(自最后一个 iat 算起 2 周后)
"CrowdStrike" in 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 企业进阶版与许多 BeyondCorp Alliance 生态系统合作伙伴合作,将设备信号和情境感知集成到了 Chrome 企业进阶版解决方案中。合作伙伴可以与 Chrome 企业进阶版共享任意数量的属性,其中之一是 is_compliant_device 属性。以下示例使用 device 属性来展示我们如何检查某个 BeyondCorp Alliance 合作伙伴是否已与 Chrome 企业进阶版集成,以及是否认为设备符合要求。

exists 宏使用 ||(或)运算符为每个 BeyondCorp Alliance 合作伙伴扩展表达式。

// 查看以了解某个 BCA 合作伙伴是否认为设备符合要求
["CrowdStrike", "Tanium", "PANW", "Check Point", "Lookout"].exists(
v, v in device.vendors && device.vendors[v].is_compliant_device
)

当 Android 验证启动状态为绿色时允许访问

此示例使用 device 属性来确保设备运行的是安全的 Android 版本。

启动时验证会检查已执行的代码是否来自可信来源(通常是设备的原始设备制造商 [OEM]),而不是来自攻击者或破坏者。如需了解详情,请参阅启动时验证

// 要求 Android 验证启动状态为绿色(表示验证通过)
device.android_device_security.verified_boot == true

允许通过 CTS 合规性检查的设备访问

此示例使用 device 属性来要求设备通过兼容性测试套件 (CTS) 合规性检查。有关详情,请参阅兼容性测试套件

// 要求设备通过 CTS 合规性检查
device.android_device_security.cts_profile_match == true

允许已启用 Google Play 保护机制验证应用的设备访问

此示例使用 device 属性来要求设备启用 Google Play 保护机制验证应用

通过 Google Play 以外的来源安装应用时,“验证应用”功能会扫描应用以检查可能存在的威胁。该设置也会定期扫描设备,从而查找可能有害的应用。“验证应用”功能默认处于开启状态。对于使用高级管理功能的设备,您可以指定是否允许用户停用此设置。有关详情,请参阅为 Android 移动设备应用设置

// 要求设备启用 Google Play 保护机制验证应用
device.android_device_security.verify_apps_enabled == true

不允许安装了潜在有害应用的设备访问

此示例使用 device 属性来拒绝安装了潜在有害应用的设备访问。这类应用通常被视为恶意软件。有关详情,请参阅潜在有害应用 (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 点至下午 4 点
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 - 周一到周五,下午 4 点至午夜
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 点至下午 5 点访问资源(7 月 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 属性创建时间和地点受限的访问权限级别,并将其分配给特定管理员。分配此访问权限级别后,该访问权限级别仅在指定时间内有效。此期限过后,管理员访问权限将再次受现有要求控制。

// 允许在 2022 年 3 月 1 日晚上 10 点至午夜临时访问资源,
// 且此访问权限必须仅适用于美国地区。
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')

合并两个级别的条件示例

通过合并两个访问权限级别的条件来定义新的访问权限级别

此访问权限级别使用 levels 属性,并且要求用户同时满足两个访问权限级别的条件。在本示例中,access_level_name_1access_level_name_2 指的是“内部名称”。

levels.access_level_name_1 && levels.access_level_name_2


Google、Google Workspace 以及相关标志和徽标是 Google LLC 的商标。其他所有公司名和产品名是其各自相关公司的商标。