이 도움말에서는 맞춤 액세스 수준을 사용하는 정책이 포함된 컨텍스트 인식 액세스 사용 사례를 설명합니다. 이 예에서는 Common Expressions Language (CEL)를 사용하여 고급 모드에서 맞춤 액세스 수준을 만듭니다.
원하는 경우 CEL 표현식을 사용하여 맞춤 액세스 수준을 만들 때 함수 및 매크로를 사용할 수도 있습니다.
기본 모드 (컨텍스트 인식 액세스 인터페이스 사용)에서 개발된 액세스 수준의 예는 기본 모드의 컨텍스트 인식 액세스 예를 참고하세요.
인증 예시
사용자의 로그인 인증 정보 강도에 따라 액세스 허용
민감한 정보가 포함된 애플리케이션에 대한 액세스 보안을 개선하기 위해 관리자는 사용자가 시스템에 인증한 방법을 확인하여 애플리케이션에 대한 액세스를 결정할 수 있습니다.
예를 들어 비밀번호만으로 로그인한 사용자는 민감한 정보가 포함되지 않은 애플리케이션에만 액세스할 수 있지만 하드웨어 보안 키를 2단계 인증으로 로그인한 사용자는 가장 민감한 엔터프라이즈 애플리케이션에 액세스할 수 있도록 허용할 수 있습니다.
이 액세스 수준은 request.auth 속성을 사용하여 사용자가 비밀번호와 하드웨어 키를 사용하는 2단계 인증으로 로그인하는지를 확인하여 민감한 애플리케이션에 액세스할 수 있는지 확인합니다.
request.auth.claims.crd_str.pwd == true && request.auth.claims.crd_str.hwk == true
사용자가 강력한 사용자 인증 정보로 인증하는 경우 액세스 허용
보통 관리자는 사용자가 강력한 사용자 인증 정보로 인증한 후에만 회사 리소스에 액세스할 수 있는 환경을 원합니다. 다음은 levels 및 request.auth 속성을 사용한 예시입니다.
- 사용자가 회사 기기에서 액세스하는 경우 SMS를 제외한 모든 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)를 요구하여 민감한 정보가 포함된 앱에 대한 액세스 보안을 강화할 수 있습니다. DBSC는 사용자가 Windows에서 Chrome 브라우저를 사용할 때 사용자의 세션을 기기에 바인딩하므로 세션 하이재킹의 위험을 크게 줄일 수 있습니다.
이 액세스 수준은 request.auth 속성을 사용하여 사용자의 세션이 특정 기기에 바운딩되어 있는지 확인합니다. 바운딩되어 있는 경우 앱에 대한 액세스 권한이 부여됩니다. 바운딩되어 있지 않은 경우 (세션이 DBSC 바운드되지 않음) 액세스가 거부됩니다.
오류를 방지하려면 이 액세스 수준이 적용되는 모든 사용자 계정에 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 속성을 사용하여 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 는 기기 엔터프라이즈 인증서에 바인딩하기 위해 조건자 변수에 사용하는 간단한 식별자입니다. exists() 매크로는 요소당 조건자 결과를 or (||) 연산자와 결합합니다. 하나 이상의 인증서가 조건자 표현식을 충족하는 경우 매크로가 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" |
| 발급기관 |
발급기관 이름입니다. 발급기관 이름을 찾으려면 인증서에서 다음 명령어를 실행합니다. $ 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" |
| 제목 | 인증서의 주체 이름입니다. (완전히 확장된 이름) |
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 속성을 사용하여 디스크 암호화와 화면 잠금을 모두 사용 설정하도록 요구합니다. 또한 관리자가 기기를 승인해야 합니다.
기본적으로 엔드포인트 확인 기능이 있는 모든 기기가 승인되지만 기기를 분실한 경우와 같이 기기를 차단해야 하는 경우가 있습니다. 이러한 경우 관리자는 분실한 기기에 회사 리소스 액세스를 허용하지 않으려고 합니다.
이 문서의 다른 액세스 수준 예에서는 이 액세스 수준의 이름이 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 속성을 사용하여 앞서 설명한 'Require Managed 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 속성을 사용하여 기기가 회사 소유 또는 관리 기기인지 파악하는 맞춤 액세스 수준에서 사용할 수 있습니다.
// The device is a corporate if one of the following conditions is true:
// 1. If the serial number matches what the admin has uploaded
If the device has a valid enterprise-issued certificate
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. Device was assessed within the last day
Assessment has not expired (2 weeks since last iat)
"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 Enterprise Premium은 여러 BeyondCorp Alliance 생태계 파트너와 협력하여 기기 신호와 컨텍스트를 Chrome Enterprise Premium 솔루션에 통합했습니다. 파트너는 여러 속성을 Chrome Enterprise Premium과 공유할 수 있으며 그중 하나는 is_compliant_device 속성입니다. 다음 예에서는 device 속성을 사용하여 Chrome Enterprise Premium과 통합되고 기기에서 정책을 준수한다고 판단하는 BeyondCorp Alliance 파트너가 있는지 확인하는 방법을 보여줍니다.
exists 매크로에 || (or) 연산자를 사용하면 각 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 속성을 사용하여 기기에서 호환성 테스트 모음 (CTS) 규정 준수 검사를 통과하도록 요구합니다. 자세한 내용은 호환성 테스트 모음을 참고하세요.
// 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 프로텍트 앱 인증 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. Another option is to use this
// !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의 상표입니다. 기타 모든 회사 및 제품 이름은 해당 회사와 연결된 회사의 상표입니다.