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