本文說明情境感知存取權的用途,並涵蓋使用自訂存取層級的政策。在下列範例中,您可以使用一般運算語言 (CEL) 以進階模式建立自訂存取層級。
如有需要,您也可以在使用 CEL 運算式建立自訂存取層級時,運用函式和巨集。
如要查看以基本模式 (使用情境感知存取權介面) 開發的存取層級範例,請參閱「基本模式的情境感知存取權範例」。
驗證範例
依據使用者的登入憑證強度,允許使用者存取
如要針對含有機密資料的應用程式加強存取安全性,您可以決定使用者登入系統的驗證方式,判斷是否允許使用者存取應用程式。
舉例來說,使用者如果僅使用密碼登入,就只能存取不含任何機密資訊的應用程式;而以硬體安全金鑰做為第二重驗證條件登入的使用者,則可以存取敏感性最高的企業應用程式。
這個存取層級會使用 request.auth 屬性,驗證使用者是否透過密碼和硬體金鑰進行兩步驟驗證,並可以存取敏感應用程式。
request.auth.claims.crd_str.pwd == true && request.auth.claims.crd_str.hwk == true
允許具有高強度身分驗證憑證的使用者存取
一般來說,只有在使用者透過高強度憑證進行驗證後,管理員才會讓他們強制存取公司資源。以下為使用 levels 和 request.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 用於存取層級的核發單位字串是輸出內容的反轉,而「/」會替換為半形逗號,例如: 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
允許存取公司擁有的裝置
如要控管存取權,裝置必須是由公司管理或擁有,才能允許使用者存取。您可以透過多種方式判斷裝置是公司擁有還是受管理裝置,包括:
- 裝置序號與公司資產管理系統中的序號相符
- 裝置具備由公司核發的有效企業憑證
下列兩種方法可在採用 levels 和 device 屬性的自訂存取層級中使用,用於判斷裝置是否為公司擁有或管理。
// 如果裝置符合下列任一條件,就會是公司裝置:
// 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 裝置資料處於最新狀態時允許存取
- 核發時的時間戳記 (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 驗證開機狀態呈現綠色時允許存取權
允許存取通過 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_1 和 access_level_name_2 指的是「內部名稱」。
levels.access_level_name_1 && levels.access_level_name_2
Google、Google Workspace 和其他相關符號及標誌均為 Google LLC 的商標,所有其他公司和產品名稱則是與個別公司關聯的商標。