Ví dụ về Quyền truy cập theo bối cảnh cho chế độ Nâng cao

Bài viết này mô tả các trường hợp sử dụng tính năng Quyền truy cập theo bối cảnh, bao gồm cả các chính sách sử dụng cấp truy cập tuỳ chỉnh. Trong các ví dụ này, bạn tạo cấp truy cập tuỳ chỉnh ở Chế độ nâng cao bằng cách sử dụng Ngôn ngữ diễn đạt thông thường (CEL).

Nếu muốn, bạn cũng có thể sử dụng hàmmacro khi tạo cấp truy cập tuỳ chỉnh bằng biểu thức CEL.

Để xem ví dụ về các cấp truy cập được phát triển ở Chế độ cơ bản (sử dụng giao diện Quyền truy cập theo bối cảnh), hãy xem bài viết Ví dụ về Quyền truy cập theo bối cảnh cho Chế độ cơ bản.

Ví dụ về xác thực

Cho phép người dùng truy cập dựa trên độ mạnh của thông tin đăng nhập của người dùng

Để cải thiện tính bảo mật của quyền truy cập vào các ứng dụng chứa dữ liệu nhạy cảm, bạn có thể xác định cách người dùng xác thực với hệ thống để quyết định xem họ có được truy cập vào ứng dụng hay không.

Ví dụ: người dùng chỉ đăng nhập bằng mật khẩu sẽ chỉ được phép truy cập vào những ứng dụng không chứa thông tin nhạy cảm, trong khi người dùng đăng nhập bằng khoá bảo mật vật lý làm yếu tố thứ hai có thể được phép truy cập vào các ứng dụng doanh nghiệp nhạy cảm nhất.

Cấp truy cập này sử dụng các thuộc tính request.auth để xác minh rằng người dùng đăng nhập bằng cả mật khẩu và khoá bảo mật cho tính năng xác minh 2 bước, đồng thời có thể truy cập vào các ứng dụng nhạy cảm.

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

Cho phép người dùng có thông tin đăng nhập xác thực mạnh truy cập

Quản trị viên thường muốn chỉ cho phép truy cập vào các tài nguyên của công ty sau khi người dùng xác thực bằng thông tin đăng nhập mạnh. Ví dụ sau đây sử dụng các thuộc tính levelsrequest.auth như sau:

  • Nếu người dùng đang sử dụng thiết bị của công ty, thì mọi phương thức MFA (ngoại trừ SMS) đều sẽ đủ (Các phương thức có thể là thông báo đẩy, khoá bảo mật phần cứng hoặc phần mềm hoặc mật khẩu một lần)
  • Nếu người dùng truy cập từ một thiết bị không phải của công ty, thì họ phải sử dụng khoá bảo mật vật lý hoặc phần mềm

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

Chỉ cho phép truy cập vào các ứng dụng từ các phiên được liên kết với DBSC

Chỉ áp dụng cho ứng dụng web trên máy tính và không áp dụng cho ứng dụng di động hoặc API

Bạn có thể cải thiện tính bảo mật của quyền truy cập vào các ứng dụng chứa dữ liệu nhạy cảm bằng cách yêu cầu Thông tin đăng nhập của phiên theo thiết bị (DBSC). DBSC liên kết phiên của người dùng với thiết bị của họ khi họ đang sử dụng trình duyệt Chrome trên Windows. Điều này có thể giảm đáng kể nguy cơ bị đánh cắp phiên.

Cấp truy cập này sử dụng thuộc tính request.auth để xác minh rằng các phiên của người dùng được liên kết với một thiết bị cụ thể. Nếu có, ứng dụng sẽ được cấp quyền truy cập. Nếu không (tức là phiên không liên kết với DBSC), thì ứng dụng sẽ bị từ chối truy cập.

Để tránh lỗi, hãy bật DBSC cho tất cả tài khoản người dùng chịu sự điều chỉnh của cấp truy cập này. Để biết thông tin chi tiết, hãy xem bài viết Bật DBSC.

Đặt cấp truy cập thành Chế độ giám sát trước khi bật Chế độ đang hoạt động. Ở chế độ Giám sát, bạn có thể kiểm tra tác động của việc thực thi cấp truy cập mà không làm gián đoạn quyền truy cập của người dùng.

Sử dụng biểu thức CEL này để tạo cấp truy cập tuỳ chỉnh:

request.auth.sessionBoundToDevice(origin) == true

Sử dụng biểu thức CEL này để chỉ thực thi DBSC trên các thiết bị Windows chạy trình duyệt Chrome phiên bản 136 trở lên:

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

Ví dụ về thiết bị

Cho phép truy cập từ một thiết bị dựa trên các tín hiệu do đối tác Liên minh BeyondCorp báo cáo

Bạn có thể sử dụng các tín hiệu thiết bị do một đối tác Liên minh BeyondCorp báo cáo. Trong ví dụ này, chúng ta sẽ sử dụng Phần mềm Lookout làm ứng dụng.

Cấp truy cập này sử dụng thuộc tính thiết bị để xác minh rằng thiết bị dùng để truy cập vào Google Workspace được Lookout báo cáo là tuân thủ chính sách và có điểm tình trạng là Rất tốt.

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

Chỉ cho phép truy cập từ trình duyệt Chrome được quản lý có bản cập nhật mới nhất

Cấp truy cập này sử dụng thuộc tính device để xác minh rằng người dùng đang sử dụng phiên bản mới nhất của trình duyệt Chrome được quản lý và chỉ cho phép truy cập thông qua trình duyệt đó.

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

Cho phép truy cập bằng chứng chỉ doanh nghiệp

Bạn có thể dùng chứng chỉ doanh nghiệp cho các thiết bị ở cấp truy cập tuỳ chỉnh để xác định xem một thiết bị có phải là tài sản thuộc sở hữu của công ty hay không. Cấp độ truy cập này sử dụng thuộc tính thiết bị để xác minh tài sản. Hãy đọc bài viết Định cấu hình các điều kiện về chứng chỉ doanh nghiệp để biết thêm thông tin và ví dụ.

Một thiết bị có thể có nhiều chứng chỉ. Chứng chỉ doanh nghiệp được dùng trong cấp truy cập tuỳ chỉnh bằng cách sử dụng macro exists(). Ví dụ:

device.certificates.exists(cert, predicate)

Trong ví dụ này, cert là một giá trị nhận dạng đơn giản để dùng trong vị từ biến nhằm liên kết với chứng chỉ doanh nghiệp của thiết bị. Macro exists() kết hợp kết quả vị từ theo từng phần tử với toán tử or (||). Các macro sẽ trả về giá trị true nếu có ít nhất một chứng chỉ đáp ứng biểu thức vị từ.

Bảng bên dưới liệt kê các thuộc tính mà bạn có thể dùng để tạo biểu thức CEL để sử dụng với cấp truy cập tuỳ chỉnh. Xin lưu ý rằng việc so sánh chuỗi có phân biệt chữ hoa chữ thường.

Thuộc tính Mô tả Ví dụ về biểu thức vị từ
(trong đó cert là giá trị nhận dạng của macro)

is_valid

Đúng nếu chứng chỉ hợp lệ và chưa hết hạn.
(boolean)

cert.is_valid
cert_fingerprint Dấu vân tay của chứng chỉ
(SHA256 không có khoảng đệm base64)
cert.cert_fingerprint == origin.
clientCertFingerprint()
root_ca_fingerprint Dấu vân tay của chứng chỉ CA gốc dùng để ký chứng chỉ này
(SHA256 không đệm base64)
cert.root_ca_fingerprint == "the_fingerprint"
tổ chức phát hành thẻ

Tên tổ chức phát hành
(tên đầy đủ)

Để tìm tên của tổ chức phát hành, hãy chạy lệnh sau trên chứng chỉ:

$ 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

Chuỗi tổ chức phát hành được dùng trong cấp truy cập là chuỗi đảo ngược của đầu ra và "/" được thay thế bằng dấu phẩy, ví dụ:

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"
chủ đề Tên đối tượng của chứng chỉ
(tên được mở rộng đầy đủ)
cert.subject == "CA_SUB"
serial_number

Số sê-ri của chứng chỉ
(chuỗi)

cert.serial_number == "123456789"
template_id Mã mẫu của Mẫu chứng chỉ tiện ích X.509 cho chứng chỉ
(chuỗi)
cert.template_id == "1.3.6.1.4.1.311.21.
8.15608621.11768144.
5720724.
16068415.6889630.81.
2472537.7784047"

Ví dụ về các chính sách thường dùng:

Xác thực rằng thiết bị có chứng chỉ doanh nghiệp hợp lệ được ký bằng chứng chỉ gốc của công ty

device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "ROOT_CA_FINGERPRINT")

Xác thực đơn vị phát hành chứng chỉ doanh nghiệp trên thiết bị

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

Cho phép truy cập vào các thiết bị đã bật tính năng mã hoá ổ đĩa và khoá màn hình

Ví dụ này sử dụng thuộc tính device để yêu cầu cả tính năng mã hoá đĩa và khoá màn hình phải được bật. Ngoài ra, thiết bị phải được quản trị viên phê duyệt.

Theo mặc định, tất cả thiết bị do Xác minh điểm cuối tạo đều được phê duyệt. Tuy nhiên, có những trường hợp bạn có thể muốn chặn một thiết bị, chẳng hạn như khi thiết bị bị mất. Trong những trường hợp này, bạn không muốn các thiết bị đó có thể truy cập vào tài nguyên của công ty.

Đối với các ví dụ khác về cấp truy cập trong tài liệu này, hãy giả định rằng cấp truy cập này có tên là 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

Cho phép truy cập vào các thiết bị sử dụng trình duyệt Chrome có các yêu cầu cơ bản về bảo mật

Trong ví dụ này, cấp truy cập sử dụng thuộc tính device để yêu cầu trình duyệt Chrome đáp ứng các yêu cầu bảo mật cơ bản.

// 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")

Cho phép truy cập vào các thiết bị bằng trình duyệt Chrome có yêu cầu bảo mật

Ví dụ này sử dụng thuộc tính device để yêu cầu người dùng sử dụng trình duyệt hoặc hồ sơ Chrome được quản lý và Chrome đã bật các trình kết nối bảo vệ dữ liệu và chống mối đe doạ. Ví dụ này sử dụng thuộc tính levels để tham chiếu đến cấp truy cập Yêu cầu Chrome được quản lý mà chúng tôi đã mô tả trước đó. Ví dụ sau đây giả định rằng cấp truy cập phụ thuộc có tên là 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

Cho phép truy cập vào các thiết bị do công ty sở hữu

Một yêu cầu để kiểm soát quyền truy cập là chỉ cho phép truy cập khi thiết bị do công ty quản lý hoặc sở hữu. Có nhiều cách để xác định xem một thiết bị có thuộc sở hữu hoặc do công ty quản lý hay không, bao gồm:

  • Nếu một thiết bị có số sê-ri khớp với một số sê-ri trong hệ thống quản lý tài sản của công ty
  • Nếu thiết bị có một chứng chỉ doanh nghiệp hợp lệ do công ty phát hành

Bạn có thể sử dụng 2 phương pháp này trong cấp truy cập tuỳ chỉnh sau đây. Cấp truy cập này sử dụng các thuộc tính levelsdevice để xác định xem thiết bị có phải là thiết bị do công ty sở hữu hay do công ty quản lý hay không.

// The device is a corporate if one of the following conditions is true:
// 1. Nếu số sê-ri khớp với số mà quản trị viên đã tải lên
// 2. Nếu thiết bị có chứng chỉ hợp lệ do doanh nghiệp cấp
levels.Require_Secure_Device &&
(
device.is_corp_owned_device ||
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "SOME_ROOT_CA_FINGERPRINT")
)

Dấu vân tay là thông báo SHA256 được mã hoá base64 không có khoảng đệm (ở định dạng nhị phân) của chứng chỉ được mã hoá DER. Bạn có thể tạo chuỗi từ chứng chỉ ở định dạng PEM bằng quy trình sau với openssl:

$ openssl x509 -in cert.pem -out cert.der -outform DER
$ openssl dgst -sha256 -binary cert.der > digest.sha
$ openssl base64 -in digest.sha

Chỉ cho phép truy cập khi dữ liệu thiết bị từ CrowdStrike mới

CrowdStrike phát hành 2 dấu thời gian trong điểm Đánh giá mức độ tin cậy bằng không (ZTA) của Falcon:
  • Dấu thời gian phát hành (iat)
  • Dấu thời gian hết hạn (exp)

Cấp truy cập sử dụng thuộc tính device để đảm bảo dữ liệu CrowdStrike luôn mới. Xin lưu ý rằng Chrome Enterprise Premium có độ trễ tự nhiên là 90 phút để sử dụng mọi đánh giá mới từ Falcon ZTA, vì vậy, bạn không nên sử dụng thời lượng dưới một giờ.

// Ensure one of these conditions is true for data from Crowdstrike:
// Must meet one of these conditions
// 1. Thiết bị đã được đánh giá trong vòng 1 ngày qua
// 2. Đánh giá chưa hết hạn (2 tuần kể từ lần iat gần đây nhất)
"CrowdStrike" trong device.vendors && (
request.time – timestamp(device.vendors["CrowdStrike"].data["iat"]) < duration("1d") ||
timestamp(device.vendors["CrowdStrike"].data["exp"]) – request.time > duration("0m")
)

Cho phép truy cập khi Liên minh BeyondCorp coi một thiết bị là tuân thủ

Chrome Enterprise Premium phối hợp với nhiều đối tác trong hệ sinh thái Liên minh BeyondCorp để tích hợp tín hiệu và bối cảnh thiết bị của họ vào giải pháp Chrome Enterprise Premium. Các đối tác có thể chia sẻ bất kỳ số lượng thuộc tính nào với Chrome Enterprise Premium, trong đó có thuộc tính is_compliant_device. Ví dụ sau đây sử dụng thuộc tính device (thiết bị) để cho biết cách chúng ta có thể kiểm tra xem có đối tác nào trong Liên minh BeyondCorp đã tích hợp với Chrome Enterprise Premium hay chưa và coi thiết bị đó là tuân thủ.

Macro exists mở rộng biểu thức cho từng đối tác Liên minh BeyondCorp bằng toán tử || (hoặc).

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

Cho phép truy cập khi trạng thái xác minh quy trình khởi động của Android là màu xanh lục

Ví dụ này sử dụng các thuộc tính thiết bị để đảm bảo rằng các thiết bị đang chạy một phiên bản Android an toàn.

Tính năng Xác minh quy trình khởi động sẽ kiểm tra xem mã được thực thi có đến từ một nguồn đáng tin cậy (thường là OEM thiết bị) hay không, thay vì đến từ kẻ tấn công hoặc bị hỏng. Để biết thông tin chi tiết, hãy xem bài viết Xác minh quy trình khởi động.

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

Cho phép truy cập vào các thiết bị vượt qua quy trình kiểm tra việc tuân thủ CTS

Ví dụ này sử dụng các thuộc tính thiết bị để yêu cầu thiết bị vượt qua quy trình kiểm tra việc tuân thủ Bộ kiểm tra tính tương thích (CTS). Để biết thông tin chi tiết, hãy truy cập vào Bộ kiểm tra tính tương thích.

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

Cho phép truy cập vào các thiết bị đã bật tính năng Xác minh ứng dụng của Google Play Protect

Ví dụ này sử dụng các thuộc tính device để yêu cầu thiết bị phải bật tính năng Xác minh ứng dụng bằng Google Play Protect.

Tính năng Xác minh ứng dụng quét ứng dụng để tìm mối đe doạ khi ứng dụng được cài đặt từ các nguồn không phải Google Play. Dịch vụ này cũng định kỳ quét thiết bị để tìm các ứng dụng có khả năng gây hại. Tính năng Xác minh ứng dụng được bật theo mặc định. Đối với các thiết bị được quản lý nâng cao, bạn có thể chỉ định xem người dùng có thể tắt chế độ này hay không. Để biết thêm thông tin, hãy xem bài viết Áp dụng chế độ cài đặt cho thiết bị di động Android.

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

Không cho phép truy cập vào những thiết bị có ứng dụng có khả năng gây hại

Ví dụ này sử dụng các thuộc tính device để từ chối quyền truy cập vào những thiết bị có ứng dụng có khả năng gây hại. Những ứng dụng này thường được gọi là phần mềm độc hại. Để biết thông tin chi tiết, hãy xem bài viết Ứng dụng có khả năng gây hại (PHA).

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

Ví dụ về quyền truy cập dựa trên thời gian

Chỉ cho phép nhân viên làm theo ca truy cập trong giờ làm việc

Các doanh nghiệp muốn đảm bảo rằng nhân viên làm theo ca chỉ có thể truy cập vào các tài nguyên của công ty trong giờ làm việc theo ca. Các cấp truy cập sau đây sử dụng thuộc tính levels để xác định 3 ca trong khoảng thời gian từ thứ Hai đến thứ Sáu.

// 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')

Cho phép truy cập tạm thời

Đôi khi, các doanh nghiệp muốn cho phép truy cập khẩn cấp trong trường hợp khẩn cấp khi quản trị viên không có quyền truy cập vào thiết bị bảo mật nhưng cần quyền truy cập khẩn cấp trong một khoảng thời gian ngắn.

Trong trường hợp này, hãy tạo một cấp truy cập bị hạn chế về thời gian và vị trí bằng cách sử dụng thuộc tính levels, rồi chỉ định cấp truy cập đó cho quản trị viên cụ thể. Khi được chỉ định, cấp truy cập này sẽ chỉ có hiệu lực trong thời gian được chỉ định. Sau khoảng thời gian này, quyền quản trị sẽ được kiểm soát theo các yêu cầu hiện có.

// 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. Một lựa chọn khác là sử dụng
này // !between('00:00:01','16:00:00')

Ví dụ về cách kết hợp các điều kiện từ 2 cấp

Xác định cấp truy cập mới bằng cách kết hợp các điều kiện của hai cấp truy cập

Cấp truy cập này sử dụng thuộc tính levels và yêu cầu người dùng đáp ứng các điều kiện kết hợp của hai cấp truy cập. Trong ví dụ này, access_level_name_1access_level_name_2 đề cập đến Tên nội bộ.

levels.access_level_name_1 && levels.access_level_name_2


Google, Google Workspace cũng như các nhãn hiệu và biểu trưng có liên quan là các nhãn hiệu của Google LLC. Tất cả các tên sản phẩm và công ty khác là nhãn hiệu của những công ty mà chúng liên kết.