進階模式的情境感知存取權範例

本文說明情境感知存取權的用途,並涵蓋使用自訂存取層級的政策。在下列範例中,您可以使用一般運算語言 (CEL) 以進階模式建立自訂存取層級。

如有需要,您也可以在使用 CEL 運算式建立自訂存取層級時,運用函式巨集

如要查看以基本模式 (使用情境感知存取權介面) 開發的存取層級範例,請參閱「基本模式的情境感知存取權範例」。

驗證範例

依據使用者的登入憑證強度,允許使用者存取

如要針對含有機密資料的應用程式加強存取安全性,您可以決定使用者登入系統的驗證方式,判斷是否允許使用者存取應用程式。

舉例來說,使用者如果僅使用密碼登入,就只能存取不含任何機密資訊的應用程式;而以硬體安全金鑰做為第二重驗證條件登入的使用者,則可以存取敏感性最高的企業應用程式。

這個存取層級會使用 request.auth 屬性,驗證使用者是否透過密碼和硬體金鑰進行兩步驟驗證,並可以存取敏感應用程式。

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

允許具有高強度身分驗證憑證的使用者存取

一般來說,只有在使用者透過高強度憑證進行驗證後,管理員才會讓他們強制存取公司資源。以下為使用 levelsrequest.auth 屬性的範例:

  • 如果使用者使用的是公司裝置,除了簡訊以外,所有多重驗證 (MFA) 方法都能進行驗證,包括推播通知、硬體或軟體安全金鑰或動態密碼
  • 如果使用者用的是非公司裝置,就必須以硬體或軟體安全金鑰進行驗證

// 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),才能存取包含機密資料的應用程式,藉此加強安全防護。使用者在 Windows 裝置上使用開啟 Chrome 瀏覽器時,DBSC 會將工作階段繫結至裝置,大幅降低工作階段駭客攻擊風險。

這個存取層級會使用 request.auth 屬性,驗證使用者的工作階段是否已繫結至特定裝置。如果已繫結,系統會授予應用程式存取權,否則 (表示工作階段未完成 DBSC 繫結) 會拒絕存取。

為避免發生錯誤,請對所有適用此存取層級的使用者帳戶啟用 DBSC。詳情請參閱「啟用 DBSC」。

請先將存取層級設為「監控模式」,再開啟正常模式。在監控模式中,您可以測試強制執行存取層級的影響,而不必中斷使用者的存取權。

請使用以下 CEL 運算式建立自訂存取層級:

request.auth.sessionBoundToDevice(origin) == true

僅限搭載 Chrome 瀏覽器 136 以上版本的 Windows 裝置,請使用以下 CEL 運算式強制執行 DBSC:

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

裝置範例

根據 BeyondCorp Alliance 合作夥伴回報的信號,允許透過裝置存取

您可以使用 BeyondCorp Alliance 合作夥伴回報的裝置信號。在這個範例中,我們將 Lookout 軟體當做應用程式。

這個存取層級會使用 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 是簡單的 ID,可用於述詞變數中,藉此繫結至裝置企業憑證。exists() 巨集會結合每個元素的述詞結果和 or (||) 運算子。如果有至少一個憑證符合述詞運算式,巨集會傳回 true

下表列出了可用於建立 CEL 運算式,並與自訂存取層級一起使用的屬性。請注意,比較字串時會區分大小寫。

屬性 說明 述詞範例
運算式
(其中的 cert
巨集的 ID)
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"
發卡機構

核發單位名稱
(完整的擴充名稱)

如要尋找核發單位名稱,請為憑證執行下列指令:

$ 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

// Require disk encryption and screen lock enabled
// This is applicable across all major platforms (Windows, Mac, Linux, CrOS, iOS, Android)
// This foundational and should be depended upon by all other access levels
device.encryption_status == DeviceEncryptionStatus.ENCRYPTED &&
device.is_secured_with_screenlock &&
device.is_admin_approved_device

允許使用符合基本安全性規定的 Chrome 瀏覽器存取裝置

在本範例中,存取層級使用 device 屬性,要求 Chrome 瀏覽器必須符合基本安全性規定。

// Require Chrome to be managed at profile or browser level, must have
// 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 屬性代表前述的「要求使用受管理的 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

允許存取公司擁有的裝置

如要控管存取權,裝置必須是由公司管理或擁有,才能允許使用者存取。您可以透過多種方式判斷裝置是公司擁有還是受管理裝置,包括:

  • 裝置序號與公司資產管理系統中的序號相符
  • 裝置具備由公司核發的有效企業憑證

下列兩種方法可在採用 levelsdevice 屬性的自訂存取層級中使用,用於判斷裝置是否為公司擁有或管理。

// 如果裝置符合下列任一條件,就會是公司裝置:
// 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")
)

指紋是 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 Enterprise Premium 從 Falcon ZTA 收到任何新評估作業時,本身就有 90 分鐘的延遲,因此不建議使用少於 1 小時的時間。

// Ensure one of these conditions is true for data from Crowdstrike:
// Must meet one of these conditions
// 1. 在過去 1 天內評估裝置
// 2. 評估結果未過期 (距離上次 iat 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 進階版與眾多 BeyondCorp Alliance 生態系統合作夥伴合作,將裝置信號和情境感知存取權整合至 Chrome Enterprise 進階版解決方案。合作夥伴可以與 Chrome Enterprise 進階版共用不限數量的屬性,其中一項是 is_compliant_device 屬性。下列範例使用 device 屬性,說明如何檢查是否有任何 BeyondCorp Alliance 合作夥伴已與 Chrome Enterprise Premium 整合,並認定裝置符合規定。

exists 巨集會透過 || (或) 運算子擴充每個 BeyondCorp Alliance 合作夥伴的運算式。

// Check to see if any of the BCA partners consider the device to be compliant
["CrowdStrike", "Tanium", "PANW", "Check Point", "Lookout"].exists(
v, v in device.vendors && device.vendors[v].is_compliant_device
)

在 Android 驗證開機狀態呈現綠色時允許存取權

這個範例使用 device 屬性,確保裝置執行的是安全無虞的 Android 版本。

驗證開機程序會檢查執行程式碼是否來自可信任的來源 (通常是裝置原始設備製造商),而非來自攻擊者或已損毀。詳情請參閱「驗證開機程序」。

// Require green Android verified boot status
device.android_device_security.verified_boot == true

允許存取通過 CTS 法規遵循檢查的裝置

這個範例使用 device 屬性,要求裝置通過 Compatibility Test Suite (CTS) 法規遵循檢查。詳情請參閱「Compatibility Test Suite」。

// Require devices to pass CTS compliance checks
device.android_device_security.cts_profile_match == true

允許存取已啟用 Google Play 安全防護驗證應用程式的裝置

這個範例使用 device 屬性,要求裝置必須啟用 Google Play 安全防護驗證應用程式

從 Google Play 以外的其他來源下載應用程式時,「驗證應用程式」會加以掃描,檢查這些應用程式是否具有威脅。且會定期掃描裝置,找出可能有害的應用程式。系統預設啟用驗證應用程式。針對採用進階管理服務的裝置,您可以決定使用者能否將其關閉。詳情請參閱「套用 Android 行動裝置設定」。

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

禁止存取可能包含有害應用程式的裝置

這個範例使用 device 屬性,拒絕可存取可能包含有害應用程式的裝置。這類應用程式通常稱為惡意軟體。詳情請參閱「可能有害的應用程式 (PHA)」。

// Deny access to devices that have potentially harmful appsandroid_device_security.has_potentially_harmful_apps != true

以時間為依據的存取範例

只允許輪班員工在值班期間存取

企業希望確保輪班員工只能在值班期間存取公司資源。下列存取層級使用 levels 屬性,定義星期一至星期五的 3 個班表。

// Shift 1 - Monday to Friday, midnight to 8am
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')


// Shift 2 - Monday to Friday, 8am to 4pm
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')


// Shift 3 - Monday to Friday, 4pm to midnight
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')


// Allow shift workers to access resources from Monday to Friday between 9 AM to 5 PM, except for July fourth.
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 屬性建立依據時間和地點限制的存取層級,然後指派給特定的管理員。指派這個存取層級後,該層級只會在指定時間內有效。這段期間過後,管理員存取權會再次由現有的規定控管。

// Allow temporary access to resources on March 1, 2022, between 10 PM to midnight,
// and this access must come from within the US region.
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"
// Note that the end time is exclusive, so the above potentially has 2 seconds that
// the users may not have access. 另一種方式是使用
// !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 的商標,所有其他公司和產品名稱則是與個別公司關聯的商標。