Common Expression Language(CEL)は、式の評価に共通のセマンティクスを実装するオープンソースの非チューリング完全言語です。Secure Web Proxy は、CEL 条件のサブセットを使用して、属性データに基づいてブール値の承認の決定を行います。一般に、条件式は論理演算子(&&、||、または!)で結合された 1 つ以上のステートメントから構成されます。論理演算子は最大で 12 個まで使用できます。各ステートメントは、ロール バインディングに適用される属性ベースの制御ルールを表します。これにより、最終的にアクセスが許可されるかどうかが決まります。
属性
セッション属性とアプリケーション属性は、ポリシーが適用されるセッション属性またはアプリケーション属性を記述する Secure Web Proxy ポリシーを定義するときに使用します。
SessionMatcher で記述されるセッション属性は、送信元 IP アドレス、ホスト、IP 範囲などのセッション固有の属性に適用されます。ApplicationMatcher で記述されるアプリケーション属性は、リクエスト ヘッダー、リクエスト メソッド、リクエストパスなどのアプリケーション属性に適用されます。
SessionMatcher と ApplicationMatcher で使用できる属性
次の表に、SessionMatcher と ApplicationMatcher の両方に適用される属性を示します。
| 属性 | 属性タイプ | 説明 | 
|---|---|---|
source.ip | 
      文字列 | リクエストを送信したクライアントの IP アドレス。 | 
source.port | 
      integer | リクエストを送信したクライアント ポート。 | 
destination.port | 
      integer | Secure Web Proxy インスタンスがトラフィックを送信するアップストリーム ポート。 | 
host() | 
      文字列 | DNS の解決とアップストリーム接続に使用されるホスト値。
        ポートは含まれません。
        **host()** の値は、次のように決まります。
        
  | 
    
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 | 
      地図 | リクエスト ヘッダーの文字列間マップ。ヘッダーに複数の値が含まれている場合、このマップの値はヘッダーのすべての値のカンマ区切り文字列になります。このマップのキーはすべて小文字です。 | 
request.method | 
      文字列 | リクエスト メソッド(GET や POST など)。 | 
request.host | 
      文字列 | 
 ほとんどの場合、  | 
    
request.path | 
      文字列 | リクエストされた URL パス。 | 
request.query | 
      文字列 | リクエストの第 1 行に現れるような、 デコードは行われません。  | 
    
request.scheme | 
      文字列 | 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 型に変換します。変換された文字列を使用して、> や <= などの標準の算術演算子で整数を比較できます。これは整数値でのみ機能します。 |