通知

Duet AI 現已更名為 Google Workspace 專用 Gemini。瞭解詳情

根據使用者和裝置情境來控管應用程式存取權

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

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

請注意,您也可以選擇在使用 CEL 運算式建立自訂存取層級時,運用函式巨集

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

驗證範例

開啟區段  |  全部收合

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

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

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

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

request.auth.claims.crd_str.pwd == true && request.auth.claims.crd_str.hwk == true
允許具有高強度身分驗證憑證的使用者存取

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

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

// 如果使用的是公司裝置,則要求基本 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
     )
  )
)

裝置範例

開啟區段  |  全部收合並返回頁首

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

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

這個存取層級使用 device 屬性,驗證用來存取 Google Workspace 的裝置是否由 Lookout 回報為符合政策規定,且健康分數為「非常良好」。

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"
issuer

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

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

$ 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_secure_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 屬性的自訂存取層級中使用,用於判斷裝置是否為公司擁有或管理。

// 如果裝置符合下列任一條件,就會是公司裝置:
// 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) (到期日:在目前版本中可能是指自核發時起算的 2 週後)

存取層級使用 device 屬性,確保 CrowdStrike 資料處於最新狀態。請注意,BeyondCorp Enterprise 從 Falcon ZTA 收到任何新評估作業時,本身就有 90 分鐘的延遲,因此不建議使用少於 1 小時的時間。

// 確認 Crowdstrike 資料符合下列其中一項條件:
// 必須符合下列其中一項條件
// 1. 在過去 1 天內評估裝置
// 2. 評估尚未過期 (自上次 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 認定裝置符合規定時允許存取

BeyondCorp Enterprise 與眾多 BeyondCorp Alliance 生態系統合作夥伴合作,將裝置信號和情境感知存取權整合至 BeyondCorp Enterprise 解決方案。合作夥伴可以與 BeyondCorp 共用不限數量的屬性,其中一項是 is_compliance_device 屬性。下列範例使用 device 屬性,說明如何檢查是否有任何 BeyondCorp Alliance 合作夥伴已與 BeyondCorp Enterprise 整合,並認定裝置符合規定。

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 版本。

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

// 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 個班表。

// 班表 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

 

這對您有幫助嗎?

我們應如何改進呢?
true
搜尋
清除搜尋內容
關閉搜尋
主選單
6298031509369851494
true
搜尋說明中心
true
true
true
true
true
73010
false
false