このページでは、カスタム アクセスレベルの Common Expression Language (CEL)式のビルドに使用されるオブジェクトと属性について詳しく説明します。例を紹介します。
CEL の詳細については、CEL 言語の定義 をご覧ください。
オブジェクト
Access Context Manager には、アクセスレベル属性を含む 4 つのオブジェクトを提供します。
オブジェクト
origin
リクエストの送信元を識別する属性が含まれます。
request.auth
リクエストの認証と認証の側面を識別する属性が含まれます。
levels
他のアクセスレベルの依存関係を定義する属性が含まれます。
device
リクエストの送信元のデバイスを記述する属性が含まれます。
origin
の属性
このセクションでは、origin
オブジェクトでサポートされる属性について表示します。
属性
ip
型
文字列
説明
リクエストの送信元 IP アドレス。IP アドレスを判別できない場合、origin.ip
はエラーと評価されます。文字列を比較するのではなく、inIpRange
を使用して、送信元 IP アドレスが特定の IP アドレス範囲内にあるかどうか確認することをおすすめします。
警告: origin.ip
と空の文字列を比較しないでください。動作は未定義になります。
例:
inIpRange ( origin.ip , [ "203.0.113.24" ])
region_code
型
文字列
説明
リクエスト送信元の国またはリージョンの ISO 3166-1 alpha-2 コード 。リージョン コードを判別できない場合、origin.region_code
はエラーと評価されます。
警告: origin.region_code
と空の文字列を比較しないでください。動作は未定義になります。
例:
origin.region_code == "GB"
origin.region_code in [ "US" , "FR" , "JP" ]
request.auth
の属性
このセクションでは、request.auth
オブジェクトでサポートされる属性について表示します。
属性
principal
型
文字列、リスト(文字列)
説明
リクエストを発行したユーザーの一意の ID。
request.auth.principal
の値は、1 つ以上の固有のユーザー ID である必要があります。UUID は Admin SDK Directory API を使用して取得できます。
値は次の形式にする必要があります。
https://accounts.google.com/UUID
ここで、UUID はユーザーの UUID です。
例:
request.auth.principal == "https://accounts.google.com/1134924314572461055"
request.auth.principal in [ "https://accounts.google.com/1134924314572461055" , "https://accounts.google.com/3134824314572461115" ]
claims.crd_str.pwd
型
ブール値
説明
ユーザーはパスワードで認証されます。
例:
request.auth.claims.crd_str.pwd == true
claims.crd_str.push
型
ブール値
説明
モバイル デバイスへのプッシュ通知でユーザーは認証されます。
例:
request.auth.claims.crd_str.push == true
claims.crd_str.sms
型
ブール値
説明
ユーザーは、SMS または通話に送信されたコードを使用して認証されます。
例:
request.auth.claims.crd_str.sms == true
claims.crd_str.swk
型
ブール値
説明
2 段階認証プロセスには、スマートフォンなどのソフトウェアキーをセキュリティ キーとして使用します。
例:
request.auth.claims.crd_str.swk == true
claims.crd_str.hwk
型
ブール値
説明
2SV には Google Titan キーなどのハードウェア キーを使用します。
例:
request.auth.claims.crd_str.hwk == true
claims.crd_str.otp
型
ブール値
説明
ユーザーは、ワンタイム パスワード方式(Google 認証システムとバックアップ コード)で認証されます。
例:
request.auth.claims.crd_str.otp == true
claims.crd_str.mfa
型
ブール値
説明
ユーザーは、このテーブル(pwdを除く)のメソッドのいずれかで認証されます。
例:
request.auth.claims.crd_str.mfa == true
認証情報の安全度のポリシーの詳細については、認証情報の安全度のポリシーを構成する をご覧ください。
levels
属性
このセクションでは、levels
オブジェクトでサポートされる属性について表示します。
属性
level name
型
ブール値
説明
level name は、既存のアクセスレベルの名前に対応します。
使用する場合は、カスタム アクセスレベルの他の要件に加えて、指定したアクセスレベルの条件も満たしている必要があります。
例:
levels.allow_corp_ips
ここで、allow_corp_ips
はアクセスレベルの名前です。
device
属性
このセクションでは、device
オブジェクトでサポートされる属性について表示します。リクエスト内の識別子に関連付けられているデバイスが見つからなかった場合、次の属性はすべてエラーと評価されます。
属性
encryption_status
型
enum
説明
デバイスの暗号化ステータスを示します。
列挙値:
enum DeviceEncryptionStatus {
// The encryption status of the device is not specified or not known.
ENCRYPTION_UNSPECIFIED == 0 ;
// The device does not support encryption.
ENCRYPTION_UNSUPPORTED == 1 ;
// The device supports encryption, but is currently unencrypted.
UNENCRYPTED == 2 ;
// The device is encrypted.
ENCRYPTED == 3 ;
}
例:
device.encryption_status == DeviceEncryptionStatus.ENCRYPTED
is_admin_approved_device
型
ブール値
説明
デバイスがドメイン管理者によって承認されているかどうかを示します。
例:
device.is_admin_approved_device == true
is_corp_owned_device
型
ブール値
説明
組織がデバイスを所有しているかどうかを示します。
例:
device.is_corp_owned_device == true
is_secured_with_screenlock
型
ブール値
説明
デバイスで画面ロック機能が有効になっているかどうかを示します。
例:
device.is_secured_with_screenlock == true
os_type
型
enum
説明
デバイスが使用しているオペレーティング システムを特定します。
列挙値:
enum OsType {
// The operating system of the device is not specified or not known.
OS_UNSPECIFIED == 0 ;
// A desktop Mac operating system.
DESKTOP_MAC == 1 ;
// A desktop Windows operating system.
DESKTOP_WINDOWS == 2 ;
// A desktop Linux operating system.
DESKTOP_LINUX == 3 ;
// An Android operating system.
ANDROID == 4 ;
// An iOS operating system.
IOS == 5 ;
// A desktop ChromeOS operating system.
DESKTOP_CHROME_OS == 6 ;
}
例:
device.os_type == OsType.DESKTOP_MAC
device.os_type ! = OsType.OS_UNSPECIFIED
vendors
型
map<string, Vendor> vendors;
説明
プレビュー
このプロダクトまたは機能には、サービス固有の利用規約 の「一般的なサービス規約」の「pre-GA サービス規約」が適用されます。
一般提供前のプロダクトと機能は「現状のまま」ご利用いただけますが、サポートが制限される場合があります。
詳しくは、リリース ステージの説明 をご覧ください。
vendors
オブジェクトは、サードパーティのセキュリティ ベンダーやエンドポイント管理ベンダーが提供するデータへのアクセスに使用されます。各ベンダーは、is_compliant_device
、is_managed_device
、device_health_score
の 3 つの共有トップレベル属性を入力できます。
さらに、ベンダーは、data
属性を使用して参照される独自のキーと値を提供できます。data
属性で使用可能なキーはベンダーごとに異なります。ポリシー エクスプレッションの Key-Value を比較する際は、一貫性があることを確認してください。たとえば、Key-Value が文字列またはブール値になると予想される場合は、対応するポリシー エクスプレッションの文字列またはブール値と比較してください。値が整数の場合は、ポリシー エクスプレッションで 2 倍の数値と比較する必要があります。
注: 利用可能なベンダーとベンダー固有のキーの完全なリストはありません。
列挙値:
// Health score of the device as provided by the vendor (possibly third party).
enum DeviceHealthScore {
// The health score for the device is not specified or unknown.
DEVICE_HEALTH_SCORE_UNSPECIFIED = 0 ;
// The health of the device is very poor.
VERY_POOR = 1 ;
// The health of the device is poor.
POOR = 2 ;
// The health of the device is ok.
NEUTRAL = 3 ;
// The health of the device is good.
GOOD = 4 ;
// The health of the device is very good.
VERY_GOOD = 5 ;
}
例:
device.vendors [ "some_vendor" ] . is_compliant_device == true
device.vendors [ "some_vendor" ] . is_managed_device == true
device.vendors [ "some_vendor" ] . device_health_score == DeviceHealthScore.VERY_GOOD
device.vendors [ "some_vendor" ] . data [ "is_device_compromised" ] == true
device.vendors [ "some_vendor" ] . data [ "some_num" ] == 1.0
注: is_device_compromised
は、ベンダーによって定義されたキーを表す例にすぎません。
android_device_security.verified_boot
型
ブール値
説明
プレビュー
このプロダクトまたは機能には、サービス固有の利用規約 の「一般的なサービス規約」の「pre-GA サービス規約」が適用されます。
一般提供前のプロダクトと機能は「現状のまま」ご利用いただけますが、サポートが制限される場合があります。
詳しくは、リリース ステージの説明 をご覧ください。
Android 確認付きブート ステータスが green
かどうか。
例:
device.android_device_security.verified_boot == true
android_device_security.cts_profile_match
型
ブール値
説明
プレビュー
このプロダクトまたは機能には、サービス固有の利用規約 の「一般的なサービス規約」の「pre-GA サービス規約」が適用されます。
一般提供前のプロダクトと機能は「現状のまま」ご利用いただけますが、サポートが制限される場合があります。
詳しくは、リリース ステージの説明 をご覧ください。
デバイスが CTS プロファイル コンプライアンス に合格するかどうか。
例:
device.android_device_security.cts_profile_match == true
android_device_security.verify_apps_enabled
型
ブール値
説明
プレビュー
このプロダクトまたは機能には、サービス固有の利用規約 の「一般的なサービス規約」の「pre-GA サービス規約」が適用されます。
一般提供前のプロダクトと機能は「現状のまま」ご利用いただけますが、サポートが制限される場合があります。
詳しくは、リリース ステージの説明 をご覧ください。
デバイスで Google Play プロテクト の [アプリの確認] が有効になっているかどうか。
例:
device.android_device_security.verify_apps_enabled == true
android_device_security.has_potentially_harmful_apps
型
ブール値
説明
プレビュー
このプロダクトまたは機能には、サービス固有の利用規約 の「一般的なサービス規約」の「pre-GA サービス規約」が適用されます。
一般提供前のプロダクトと機能は「現状のまま」ご利用いただけますが、サポートが制限される場合があります。
詳しくは、リリース ステージの説明 をご覧ください。
デバイスで有害な可能性があるアプリ が見つかったかどうかを示します。
例:
device.android_device_security.has_potentially_harmful_apps == true
ios_device_security.is_device_jailbroken
型
ブール値
説明
プレビュー
このプロダクトまたは機能には、サービス固有の利用規約 の「一般的なサービス規約」の「pre-GA サービス規約」が適用されます。
一般提供前のプロダクトと機能は「現状のまま」ご利用いただけますが、サポートが制限される場合があります。
詳しくは、リリース ステージの説明 をご覧ください。
iOS デバイスが制限解除 された事が判明しているかどうか。
例:
device.ios_device_security.is_device_jailbroken == true
verified_chrome_os
型
ブール値
説明
検証済みの Chrome OS のデバイスからリクエストが送られたものかどうかを示します。
例:
device.verified_chrome_os == true
chrome.management_state
型
文字列
説明
ブラウザはブラウザレベルまたはプロファイル レベルで管理されているか、企業の正しいドメインの元で管理されていますか。
ポリシーが一元的に管理、プッシュされており、管理対象ブラウザまたはプロファイルのドメインがサーバー側の想定ドメインと一致すると、ブラウザは管理対象とみなされます。
利用可能な Chrome 管理の状態は次のとおりです。
状態
MANAGED
ブラウザまたはプロファイルはお客様が管理します。
UNMANAGED
ブラウザやプロファイルはお客様によって管理されません。
MANAGED_BY_OTHER_DOMAIN
ブラウザまたはプロファイルが他のお客様によって管理されています。
PROFILE_MANAGED
プロファイルはお客様が管理します。
BROWSER_MANAGED
ブラウザはお客様が管理しています。
例:
device.chrome.management_state in
[
ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED ,
ChromeManagementState.CHROME_MANAGEMENT_STATE_PROFILE_MANAGED ,
]
chrome.versionAtLeast
型
文字列
説明
ブラウザが特定の最小バージョン以上ですか。
例:
device.chrome.versionAtLeast ( "88.0.4321.44" )
chrome.is_realtime_url_check_enabled
型
ブール値
説明
リアルタイム URL チェック コネクタが有効になっていますか。
例:
device.chrome.is_realtime_url_check_enabled == true | false
chrome.is_file_upload_analysis_enabled
型
ブール値
説明
ファイル アップロード分析コネクタが有効になっていますか。
例:
device.chrome.is_file_upload_analysis_enabled == true | false
chrome.is_file_download_analysis_enabled
型
ブール値
説明
ファイル ダウンロード分析コネクタが有効になっていますか。
例:
device.chrome.is_file_download_analysis_enabled == true | false
chrome.is_bulk_data_entry_analysis_enabled
型
ブール値
説明
一括テキスト(貼り付け)分析コネクタが有効になっていますか。
例:
device.chrome.is_bulk_data_entry_analysis_enabled == true | false
chrome.is_security_event_analysis_enabled
型
ブール値
説明
セキュリティ イベント レポート コネクタが有効になっていますか。
例:
device.chrome.is_security_event_analysis_enabled == true | false
関数
Access Context Manager は、カスタム アクセスレベルの CEL 式で次の関数が使用できます。
関数
inIpRange(address, [subnets])
型
(string, list(string)) -< boolean
説明
IP アドレスが指定したサブネットの 1 つに属するかを確認します。
警告: この関数を使用して、送信元 IP アドレスが特定のプライベート IP サブネット内にあるかどうかを確認しないでください。Google 内のプライベート IP アドレスは変更される場合があります。
例:
inIpRange ( origin.ip , [ "192.0.2.0/24" , "198.51.100.0/24" , "203.0.113.0/24" ])
device.versionAtLeast(minVersion)
型
DeviceType.(string) -> boolean
説明
デバイスのオペレーティング システムが少なくとも特定のバージョンかどうかを確認します。この関数は、device.os_type
属性と一緒に使用することをおすすめします。
例:
device.versionAtLeast ( "10.0" ) == true
certificateBindingState(origin, device)
型
(Peer, DeviceType) -> integer
説明
発信元に関連付けられたクライアント証明書がデバイスと一致し、状態を報告するかを確認します。
関数から返される状態は、次のいずれかになります。
CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
CertificateBindingState.CERT_NOT_MATCHING_EXISTING_DEVICE
CertificateBindingState.CERT_STATE_UNKNOWN
例:
certificateBindingState ( origin , device ) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
startsWith()
タイプ
string.(string) -> bool
説明
文字列オペランドが接頭辞引数で始まるかどうかをテストします。
例:
"Sample string" . startsWith ( "Sample" )
endsWith()
タイプ
string.(string) -> bool
説明
文字列オペランドが接尾辞引数で終わるかどうかをテストします。
例:
"Sample string" . endsWith ( "string" )
origin.clientCertFingerprint()
タイプ
Origin.() -> string
説明
発信元に関連付けられた証明書のフィンガープリントを返します。これをマクロで使用してデバイス証明書をテストできます。
例:
// Checks if the enterprise certificate associated with the origin matches the device.
device.certificates.exists ( cert , cert.is_valid && cert.cert_fingerprint == origin.clientCertFingerprint ())
CEL 式のマクロ
カスタム アクセスレベルの CEL 式で、次のマクロを使用できます。
マクロ
説明
has(e.f)
フィールドが使用可能かどうかをテストします。詳細については、フィールド選択 をご覧ください。例:
has({"key": "value"}.key)
has(device.vendors.some_vendor)
e.all(x, p)
述語が、リスト e
のすべての要素を保持しているか、マップ e
のキーを保持しているかをテストします。ここで、x
は、要素またはキーにバインドする p
で使用する識別子です。all()
マクロは、要素ごとの述語結果を and
(&&)演算子で結合します。そのため、述語のいずれかが false と評価されると、このマクロは他の述語のエラーを無視して false と評価されます。例:
すべての要素が 1 より大きいとは限らないため、false を返します。
[1,2,3].all(x, x > 1)
e.exists(x, p)
all()
マクロと似ていますが、述語結果を or
(||)演算子で結合します。例:リストに 1 を超える要素が少なくとも 1 つ存在するため、true が返されます。
[1,2,3].exists(x, x > 1)
デバイスに関連付けられているエンタープライズ証明書が発行者と一致するかどうかを確認します。
device.certificates.exists(cert, cert.is_valid && cert.issuer == "[email protected] , CN=inter_1, OU=BCEDemo_1, O=BCEDemo, L=NCR, ST=UP, C=IN")
e.exists_one(x, p)
exists()
マクロと類似していますが、要素またはキーの述語が 1 つだけ true と評価され、残りが false と評価される場合にのみ true と評価されます。ブール値の結果の他の結合が false と評価され、述語エラーがあるとマクロでエラーが発生します。例:
複数の要素が 1 より大きいため、false が返されます。[1,2,3].exists_one(x, x > 1)
CEL 式の例
このセクションでは、カスタム アクセスレベルの作成に使用される CEL 式の例を示します。
例 1
device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && ( origin.region_code in [ "US" ] || device.is_admin_approved_device )
この例は、リクエストを許可するために次の条件を満たす必要があるアクセスレベルを表します。
リクエストの送信元デバイスが暗号化されている。
次のうち 1 つ以上に該当する。
例 2
( device.os_type == OsType.DESKTOP_WINDOWS && device.is_corp_owned_device ) || ( device.os_type == OsType.DESKTOP_MAC && device.is_admin_approved_device && device.versionAtLeast ( "10.11.0" ))
この例は、リクエストを許可するために次の条件を満たす必要があるアクセスレベルを表します。
例 3
( certificateBindingState ( origin , device ) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE )
この例は、リクエストを許可するために次の条件を満たす必要があるアクセスレベルを表します。
certificateBindingState
拡張関数は、要求時に提示された証明書が、デバイスがエンドポイント検証 に登録されたときに登録されたデバイス証明書の1つと一致することを判別する。