Common Expression Language(CEL)は、式の評価に共通のセマンティクスを実装するオープンソースの非 TEL 完了言語です。安全なウェブプロキシは、CEL 条件のサブセットを使用して、属性データに基づいてブール値の承認を行います。一般に、条件式は論理演算子(&&
、||
、または!
)で結合された 1 つ以上のステートメントから構成されます。論理演算子は最大で 12 個まで使用できます。各ステートメントは、ロール バインディングに適用される属性ベースの制御ルールを表します。これにより、最終的にアクセスが許可されるかどうかが決まります。
属性
セッション属性とアプリケーション属性は、ポリシーが適用されるセッション属性またはアプリケーション属性を記述する Secure Web Proxy ポリシーを定義するときに使用されます。
SessionMatcher
で記述されたセッション属性は、送信元または宛先の IP アドレス、ホスト、IP 範囲など、セッション固有の属性に適用されます。アプリケーション属性(ApplicationMatcher
で記述)は、リクエスト ヘッダー、HTTP リクエスト メソッド、リクエストパスなどのアプリケーション属性に適用されます。
SessionMatcher
と ApplicationMatcher
で使用可能な属性
次の表は、SessionMatcher
と ApplicationMatcher
の両方に適用される属性を示しています。
属性 | 属性タイプ | 説明 |
---|---|---|
source.ip |
string | リクエストを送信したクライアントの IP アドレス。 |
source.port |
integer | リクエストを送信したクライアント ポート。 |
destination.port |
integer | Secure Web Proxy インスタンスがトラフィックを送信するアップストリーム ポート。 |
host() |
string | DNS の解決とアップストリーム接続に使用されるホスト値。
ポートは含まれません。
値は次の要素によって決まります。
|
source.matchTag(SECURE_TAG) |
ブール値 |
引数は、 |
source.matchServiceAccount(SERVICE_ACCOUNT) |
ブール値 | True は、ソースが SERVICE_ACCOUNT に関連付けられている場合(source.matchServiceAccount('x@my-project.iam.gserviceaccount.com') など)。 |
inUrlList(HOST_OR_URL, NAMED_LIST) |
ブール値 |
|
inIpRange(IP_ADDRESS, |
ブール値 | True (IP_ADDRESS が inIpRange(source.ip, '1.2.3.0/24') などの IP_RANGE 内に含まれている場合)。IPv6 アドレスのサブネット マスクは /64 以下にしてください。 |
ApplicationMatcher
でのみ使用できる属性
次の表は、ApplicationMatcher
にのみ適用される属性を示したものです。
属性 | 属性タイプ | 説明 |
---|---|---|
request.headers |
地図 | HTTP リクエスト ヘッダーの文字列間マップヘッダーに複数の値が含まれている場合、このマップの値はヘッダーのすべての値のカンマ区切り文字列になります。このマップのキーはすべて小文字です。 |
request.method |
string | GET や POST などの HTTP リクエスト メソッド。 |
request.host |
string |
通常は |
request.path |
string | リクエストした HTTP URL パス。 |
request.query |
string | HTTP リクエストの第 1 行に現れるような、 デコードは行われません。 |
request.scheme |
string | HTTP URL スキーム(HTTP、HTTPS など)。この属性の値はすべて小文字です。 |
request.url() |
string |
ポートは含まれず、ホストヘッダーとは異なるホスト値が使用されます。 |
request.useragent() |
string | request.headers['user-agent'] と同等の利便性。 |
オペレーター
Secure Web Proxy では、単純な式のステートメントから複雑な論理式を作成するために使用できる演算子がいくつかサポートされています。Secure Web Proxy では、&&
、||,
、!
などの論理演算子と、x.contains('y')
などの文字列操作演算子がサポートされています。
論理演算子を使用すると、1 つの条件式で複数の変数を検証できます。たとえば、request.method == 'GET' && host().matches('.*\.example.com')
は 2 つのステートメントを結合し、True
の全体的な結果を生成するには、両方のステートメントが True
である必要があります。
文字列操作演算子は、定義した文字列や部分文字列と照合します。これにより、考えられるすべての組み合わせを一覧表示することなく、リソースへのアクセスを制御するルールを作成できます。
論理演算子
次の表に、Secure Web Proxy がサポートする論理演算子を示します。
式の例 | 説明 |
---|---|
x == "foo" |
x が定数文字列リテラル引数と等しい場合、True を返します。 |
x == R"fo'o" |
x がエスケープ シーケンスを解釈しない所定の raw 文字列リテラルと等しい場合、True を返します。raw 文字列リテラルは、コードがシーケンス文字をエスケープするために使用する必要がある文字列を表現するのに便利です。 |
x == y |
x が y と等しい場合、True を返します。 |
x != y |
x が y と等しくない場合、True を返します。 |
x && y |
x と y の両方が True の場合、True を返します。 |
x || y |
x 、y 、またはその両方が True の場合、True を返します。 |
!x |
戻り値True ブール値の場合x =False 、またはFalse ブール値の場合
x =True 。 |
m['k'] |
キー k が存在する場合、文字列間マップ m でキー k の値を返します。キー k が存在しない場合は、評価中のルールが一致しなくなるエラーを返します。 |
文字列操作演算子
次の表に、Secure Web Proxy がサポートする文字列操作演算子を示します。
式 | 説明 |
---|---|
x.contains(y) |
文字列 x に部分文字列 y が含まれている場合、True を返します。 |
x.startsWith(y) |
文字列 x が部分文字列 y で始まる場合、True を返します。 |
x.endsWith(y) |
文字列 x が部分文字列 y で終わる場合、True を返します。 |
x.matches(y) |
文字列 RE2 パターンは、Unicode 機能を無効にする RE2::Latin1 オプションを使用してコンパイルされます。 |
x.lower() |
文字列x の小文字の値を返します。 |
x.upper() |
文字列x の大文字の値を返します。 |
x + y |
連結された文字列 xy を返します。 |
int(x) |
x の文字列の結果を int 型に変換します。変換された文字列は、> や <= などの標準の算術演算子との整数比較に使用できます。この方法は、整数にできる値に対してのみ機能します。 |