In dit artikel ziet u toepassingen voor contextbewuste toegang, inclusief beleid waarin aangepaste toegangsniveaus worden gebruikt. In deze voorbeelden maakt u aangepaste toegangsniveaus in de geavanceerde modus met Common Expressions Language (CEL).
Als u wilt, kunt u ook functies en macro's gebruiken als u aangepaste toegangsniveaus maakt met CEL-expressies.
Zie Voorbeelden van contextbewuste toegang voor de basismodus voor voorbeelden van toegangsniveaus die zijn gemaakt in de basismodus (met de interface voor contextbewuste toegang).
Verificatievoorbeelden
Gedeelte openen | Alles samenvouwen
Als u de toegang tot apps met gevoelige gegevens beter wilt beveiligen, kunt u bepalen hoe gebruikers hun identiteit moeten bevestigen in het systeem om toegang te krijgen tot de apps.
U kunt bijvoorbeeld instellen dat gebruikers die zijn ingelogd met alleen een wachtwoord, alleen toegang hebben tot apps die geen gevoelige informatie bevatten, terwijl gebruikers die inloggen met een hardwarebeveiligingssleutel als 2e factor toegang hebben tot de meest gevoelige bedrijfsapps.
Dit toegangsniveau gebruikt request.auth-kenmerken om te verifiëren of gebruikers inloggen met zowel een wachtwoord als een hardwaresleutel voor verificatie in 2 stappen en dus toegang hebben tot gevoelige apps.
request.auth.claims.crd_str.pwd == true && request.auth.claims.crd_str.hwk == true
Beheerders willen de toegang tot bedrijfsbronnen vaak pas afdwingen nadat een gebruiker is geverifieerd met sterke inloggegevens. In het volgende voorbeeld worden de kenmerken levels en request.auth als volgt gebruikt:
- Als gebruikers een bedrijfsapparaat gebruiken, is elke MFA-methode (met uitzondering van sms) voldoende (ze kunnen een pushmelding, een hardware- of softwarebeveiligingssleutel of een eenmalig wachtwoord gebruiken).
- Als gebruikers geen bedrijfsapparaat gebruiken, moeten ze een hardware- of softwarebeveiligingssleutel gebruiken.
// Basis-MFA (geen SMS) vereisen op bedrijfsapparaten en beveiligingssleutel (hardware of software) vereisen op niet-bedrijfsapparaten
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
)
)
)
Voorbeelden van apparaten
Gedeelte openen | Alles samenvouwen en naar bovenkant gaan
U kunt apparaatsignalen gebruiken die zijn gemeld door een BeyondCorp Alliance-partner. In dit voorbeeld wordt Lookout Software gebruikt als de app.
Dit toegangsniveau gebruikt het kenmerk device om te controleren of het apparaat waarmee Google Workspace wordt gebruikt, volgens Lookout voldoet aan het beleid en of het de score Zeer goed heeft.
device.vendors["Lookout"].is_compliant_device == true && device.vendors["Lookout"].device_health_score == DeviceHealthScore.VERY_GOOD
Dit toegangsniveau gebruikt het kenmerk device om te controleren of gebruikers de nieuwste versie van een beheerde Chrome-browser gebruiken. Toegang wordt alleen toegestaan via zo'n browser.
device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED && device.chrome.versionAtLeast("94.0.4606.81")
U kunt zakelijke certificaten voor apparaten gebruiken in aangepaste toegangsniveaus om te bepalen of een apparaat eigendom is van het bedrijf. Dit toegangsniveau gebruikt het kenmerk device voor de verificatie van items. Zie Configuring enterprise certificate conditions (Voorwaarden voor zakelijke certificaten instellen) voor meer informatie en voorbeelden.
Een apparaat kan meerdere certificaten hebben. Zakelijke certificaten worden in een aangepast toegangsniveau gebruikt met de macro exists(). Voorbeeld:
device.certificates.exists(cert, predicate)
In dit voorbeeld is cert een eenvoudige ID om te gebruiken in de variabele predicate om te koppelen met het zakelijke certificaat van het apparaat. De macro exists() combineert resultaten per element voor predicaten met de operator or (||). Macro's retourneren true als minstens één certificaat voldoet aan de predicaatexpressie.
In de tabel hieronder ziet u welke kenmerken u kunt gebruiken om CEL-expressies te maken voor gebruik in aangepaste toegangsniveaus. Vergelijkingen met tekenreeksen zijn hoofdlettergevoelig.
Kenmerk | Beschrijving | Voorbeeld van predicaatexpressie (waarbij cert een ID is van macro's) |
---|---|---|
is_valid |
True als het certificaat geldig is en niet is verlopen. |
cert.is_valid |
cert_fingerprint | Vingerafdruk van het certificaat (base64 unpadded SHA256) |
cert.cert_fingerprint == origin. |
root_ca_fingerprint | Vingerafdruk van het root-CA-certificaat dat is gebruikt om dit certificaat te ondertekenen (base64 unpadded SHA256) |
cert.root_ca_fingerprint == "the_fingerprint" |
issuer |
Naam van uitgever Voer de volgende opdracht uit voor het certificaat om de naam van de uitgever te vinden:
De tekenreeks van de uitgever die wordt gebruikt in het toegangsniveau is het omgekeerde van de uitvoer. Ook wordt de / vervangen door een komma. Voorbeeld:
|
cert.issuer == "EMAILADDRESS=test_inter1 |
subject | Onderwerpnaam van het certificaat (volledig uitgevouwen namen) |
cert.subject == "CA_SUB" |
serial_number |
Serienummer van het certificaat |
cert.serial_number == “123456789” |
template_id | Template-ID van certificaattemplate van X.509-extensie voor het certificaat (tekenreeks) |
cert.template_id == "1.3.6.1.4.1.311.21. |
Voorbeelden van veelgebruikte beleidsregels:
Controleren of het apparaat een geldig zakelijk certificaat heeft dat is ondertekend door het rootcertificaat van het bedrijf
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "ROOT_CA_FINGERPRINT")
De uitgever van het zakelijke certificaat op het apparaat valideren
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”)
In dit voorbeeld wordt het kenmerk device gebruikt om te vereisen dat de schijfversleuteling en schermvergrendeling worden aangezet. Daarnaast moet het apparaat worden goedgekeurd door beheerders.
Standaard worden alle apparaten goedgekeurd die door eindpuntverificatie zijn gemaakt. Er kunnen echter gevallen zijn waarin u een apparaat wilt blokkeren, zoals wanneer het is kwijtgeraakt. U wilt dan niet dat het toegang heeft tot de bedrijfsbronnen.
Voor andere voorbeelden van toegangsniveaus in dit document gaan we ervan uit dat dit toegangsniveau de naam Required_Secure_Device
heeft.
// Vereisen dat schrijfsleuteling en schermvergrendeling aanstaan
// Geldt voor alle grote platforms (Windows, Mac, Linux, CrOS, iOS, Android)
// Dit is een basisniveau, alle andere niveaus moeten hiervan afhankelijk zijn
device.encryption_status == DeviceEncryptionStatus.ENCRYPTED &&
device.is_secured_with_screenlock &&
device.is_admin_approved_device
In dit voorbeeld gebruikt het toegangsniveau het kenmerk device om te vereisen dat de Chrome-browser met basisbeveiligingsvereisten wordt gebruikt.
// Vereisen dat Chrome wordt beheerd op profiel- of browserniveau,
// rapporten van beveiligingsgebeurtenissen moeten zijn geactiveerd en moet versie 97 of hoger zijn
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")
In dit voorbeeld wordt het kenmerk device gebruikt om te vereisen dat de gebruiker een beheerde Chrome-browser of -profiel gebruikt en dat in Chrome connectors voor bedreigingen en gegevensbescherming aanstaan. In dit voorbeeld wordt het kenmerk levels gebruikt om te verwijzen naar het eerder beschreven toegangsniveau Require Managed Chrome. In het volgende voorbeeld wordt ervan uitgegaan dat het afhankelijke toegangsniveau Required_Managed_Chrome
heet.
// Vereis beheerde Chrome (afhankelijk van toegangsniveau Require_Managed_Chrome)
// en vereis contentinspectie voor downloads en URL-controle geactiveerd
levels.Require_Managed_Chrome &&
device.chrome.is_file_download_analysis_enabled &&
device.chrome.is_realtime_url_check_enabled
Een vereiste voor het beheer van toegang is alleen toegang toestaan als het apparaat wordt beheerd door het bedrijf of eigendom is van het bedrijf. Er zijn veel manieren om te bepalen of een apparaat eigendom is van het bedrijf of wordt beheerd door het bedrijf, zoals:
- Controleren of een apparaat een serienummer heeft dat overeenkomt met een serienummer in het inventarisbeheersysteem van het bedrijf
- Controleren of een apparaat een geldig zakelijk certificaat heeft dat is uitgegeven door het bedrijf
U kunt deze 2 manieren gebruiken in het volgende aangepaste toegangsniveau dat de kenmerken levels en device gebruikt om te bepalen of een apparaat eigendom is van het bedrijf of wordt beheerd door het bedrijf.
// Het apparaat is een bedrijfsapparaat als aan een van de volgende voorwaarden wordt voldaan:
// 1. Het serienummer komt overeen met het nummer dat is geüpload door de beheerder
// 2. Het apparaat heeft een geldig zakelijk certificaat dat is uitgegeven door het bedrijf
levels.Require_Secure_Device &&
(
device.is_corp_owned_device ||
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "SOME_ROOT_CA_FINGERPRINT")
)
De vingerafdruk is de unpadded base64
-gecodeerde sha256-digest
(in binaire indeling) van het DER-gecodeerde certificaat. De tekenreeks kan worden gemaakt op basis van het certificaat in PEM-indeling met de volgende procedure met openssl
:
$ openssl x509 -in cert.pem -out cert.der -outform DER
$ openssl dgst -sha256 -binary cert.der > digest.sha
$ openssl base64 -in digest.sha
- Issued at timestamp (iat)
- Expiry timestamp (exp) (dit lijkt 2 weken na de issued at timestamp te zijn in de huidige versie)
Het toegangsniveau gebruikt het kenmerk device om te zorgen dat de CrowdStrike-gegevens up-to-date zijn. BeyondCorp Enterprise heeft een ingebouwde vertraging van 90 minuten voor het consumeren van nieuwe beoordelingen van Falcon ZTA. We raden u dus af een duur van minder dan een uur te gebruiken.
// Controleren of wordt voldaan aan een van deze voorwaarden voor gegevens van CrowdStrike:
// Moet voldoen aan een van deze voorwaarden
// 1. Apparaat is in de afgelopen dag beoordeeld
// 2. Beoordeling is niet verlopen (2 weken sinds laatste 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 Enterprise werkt samen met veel BeyondCorp Alliance-ecosysteempartners om hun apparaatsignalen en -context te integreren in de BeyondCorp Enterprise-oplossing. Partners kunnen verschillende kenmerken delen met BeyondCorp. Een daarvan is het kenmerk is_compliant_device
. In het volgende voorbeeld wordt het kenmerk device gebruikt om te controleren of een of meer van de BeyondCorp Alliance-partners zijn geïntegreerd met BeyondCorp Enterprise en aangeven dat het apparaat voldoet aan het beleid.
De macro exists
breidt de expressie uit voor elke BeyondCorp Alliance-partner met de operator ||
(of).
// Controleren of een of meer BCA-partners aangeven dat het apparaat voldoet aan het beleid
["CrowdStrike", "Tanium", "PANW", "Check Point", "Lookout"].exists(
v, v in device.vendors && device.vendors[v].is_compliant_device
)
In dit voorbeeld worden device-kenmerken gebruikt om te zorgen dat apparaten een veilige versie van Android gebruiken.
Verified Boot controleert of uitgevoerde code afkomstig is van een vertrouwde bron (meestal de OEM van het apparaat) in plaats van een aanvaller of corruptie. Ga naar Verified Boot voor meer informatie.
// Groene Android Verified Boot-opstartstatus vereisen
device.android_device_security.verified_boot == true
In dit voorbeeld worden device-kenmerken gebruikt om te vereisen dat apparaten de Compatibility Test Suite (CTS)-compatibiliteitstests doorstaan. Ga naar Compatibility Test Suite voor meer informatie.
// Vereisen dat apparaten de CTS-nalevingscontroles doorstaan
device.android_device_security.cts_profile_match == true
In dit voorbeeld worden device-kenmerken gebruikt om te vereisen dat apparaten Google Play Protect Apps verifiëren hebben aangezet.
Met Apps verifiëren worden apps gescand op beveiligingsrisico's wanneer deze worden geïnstalleerd via andere bronnen dan Google Play. Apparaten worden ook regelmatig gescand op potentieel schadelijke apps. Apps verifiëren staat standaard aan. Voor apparaten met geavanceerd beheer kunt u bepalen of gebruikers deze instelling kunnen uitzetten. Ga naar Instellingen toepassen op mobiele Android-apparaten voor meer informatie.
// Vereisen dat Google Play Protect Apps verifiëren aan staat
device.android_device_security.verify_apps_enabled == true
In dit voorbeeld worden device-kenmerken gebruikt om toegang tot apparaten met mogelijk schadelijke apps te weigeren. Deze apps worden vaak malware genoemd. Ga naar Potentieel schadelijke apps (PHA's) voor meer informatie.
// Toegang weigeren tot apparaten die mogelijk schadelijke apps bevatten
android_device_security.has_Polyly_harmful_apps != true
Voorbeelden van toegang op basis van tijd
Gedeelte openen | Alles samenvouwen en naar bovenkant gaan
Sommige bedrijven willen dat mensen die in ploegendienst werken alleen tijdens hun werktijden toegang hebben tot bedrijfsbronnen. Voor de volgende toegangsniveaus wordt het kenmerk levels gebruikt om 3 ploegen op te geven van maandag tot en met vrijdag.
// Ploeg 1: maandag t/m vrijdag, 0:00 uur tot 8:00 uur
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')
// Ploeg 2: maandag t/m vrijdag, 8:00 uur tot 16:00 uur
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')
// Ploeg 3: maandag t/m vrijdag, 16:00 uur tot 0:00 uur
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')
// Werknemers die in ploegendienst werken toegang geven tot bronnen van maandag t/m vrijdag tussen 9:00 uur en 17:00 uur, behalve op 4 juli.
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:00:00', '17:00:00')
Bedrijven willen soms toegang geven tijdens noodgevallen als de beheerder geen toegang heeft tot een beveiligd apparaat, maar toch tijdelijk noodtoegang nodig heeft.
Maak in dit geval een op tijd en locatie beperkt toegangsniveau met het kenmerk levels en wijs het toe aan de specifieke beheerder. Als dit toegangsniveau is toegewezen, is het alleen geldig tijdens de opgegeven tijd. Nadat deze periode voorbij is, valt beheerderstoegang weer onder de bestaande vereisten.
// Tijdelijk toegang tot resources toestaan op 1 maart 2022 tussen 22:00 uur en 0:00 uur
// en de toegang moet binnen de regio VS zijn.
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”
// De eindtijd is exclusief. In het bovenstaande voorbeeld zijn er dus mogelijk 2 seconden
// waarin de gebruikers geen toegang hebben. U kunt ook deze waarde gebruiken:
// !between(‘00:00:01’,’16:00:00’)
Voorbeeld van voorwaarden van 2 toegangsniveaus combineren
Een nieuw toegangsniveau instellen door de voorwaarden van 2 toegangsniveaus te combinerenDit toegangsniveau gebruikt levels-kenmerken en vereist dat gebruikers voldoen aan de gecombineerde voorwaarden van 2 toegangsniveaus. In dit voorbeeld verwijzen naam_toegangsniveau_1 en naam_toegangsniveau_2 naar Internal Name.
levels.naam_toegangsniveau_1 && levels.naam_toegangsniveau_2