Common Expression Language(CEL)는 표현식 평가를 위한 공통 시맨틱스를 구현하는 오픈소스 비튜링 완전 언어입니다. 보안 웹 프록시는 속성 데이터를 기반으로 CEL 조건의 하위 집합을 사용하여 불리언 승인 결정을 내립니다. 일반적으로 조건 표현식은 논리 연산자(&&
, ||
, !
)를 사용하여 결합된 하나 이상의 문으로 구성됩니다. 각 문은 역할 결합에 적용되는 속성 기반 제어 규칙을 나타내며 최종적으로 액세스가 허용되는지 여부를 결정합니다.
속성
세션 속성과 애플리케이션 속성은 보안 웹 프록시 정책을 정의할 때 세션 속성 또는 정책이 적용되는 애플리케이션 속성을 설명할 때 사용됩니다.
SessionMatcher
로 설명된 세션 속성은 소스 또는 대상 IP 주소, 호스트, IP 범위와 같은 세션별 속성에 적용됩니다. ApplicationMatcher
로 설명된 애플리케이션 속성은 요청 헤더, HTTP 요청 메서드, 요청 경로와 같은 애플리케이션 속성에 적용됩니다.
SessionMatcher
및 ApplicationMatcher
에서 사용할 수 있는 속성
다음 표에서는 SessionMatcher
및 ApplicationMatcher
모두에 적용되는 속성을 설명합니다.
속성 | 속성 유형 | 설명 |
---|---|---|
source.ip |
문자열 | 요청을 보낸 클라이언트의 IP 주소입니다. |
source.port |
정수 | 요청을 보낸 클라이언트 포트입니다. |
destination.port |
정수 | 보안 웹 프록시 인스턴스가 트래픽을 전송하는 업스트림 포트입니다. |
host() |
문자열 | DNS 변환 및 업스트림 연결에 사용되는 호스트 값입니다.
여기에는 포트가 포함되지 않습니다.
값은 다음에 따라 결정됩니다.
|
source.matchTag(SECURE_TAG) |
부울 | 소스가 인수는 |
source.matchServiceAccount(SERVICE_ACCOUNT) |
부울 | 소스가 SERVICE_ACCOUNT 와 연결된 경우 True 입니다(예: source.matchServiceAccount('x@my-project.iam.gserviceaccount.com') ).
|
inUrlList(HOST_OR_URL, NAMED_LIST) |
부울 |
제공된
|
inIpRange(IP_ADDRESS, |
부울 | IP_ADDRESS 가 IP_RANGE 내에 포함된 경우 True 입니다(예: inIpRange(source.ip, '1.2.3.0/24') ). IPv6 주소의 서브넷 마스크는 /64보다 클 수 없습니다.
|
ApplicationMatcher
에만 사용할 수 있는 속성
다음 표에서는 ApplicationMatcher
에만 적용되는 속성을 설명합니다.
속성 | 속성 유형 | 설명 |
---|---|---|
request.headers |
지도 | HTTP 요청 헤더의 문자열 간 매핑입니다. 헤더에 여러 값이 포함된 경우 이 매핑의 값은 모든 헤더 값의 쉼표로 구분된 문자열입니다. 이 지도의 키는 모두 소문자입니다. |
request.method |
문자열 | HTTP 요청 메서드(예: GET 또는 POST)입니다. |
request.host |
문자열 | 편의상 대부분의 경우 |
request.path |
문자열 | 요청한 HTTP URL 경로 |
request.query |
문자열 | HTTP 요청의 첫 번째 행에 표시되는 디코딩이 수행되지 않습니다. |
request.scheme |
문자열 | HTTP, HTTPS와 같은 HTTP URL 스키마입니다. 이 속성 값은 모두 소문자입니다. |
request.url() |
문자열 | 편의상 포트는 포함되지 않으며 호스트 헤더와 다른 호스트 값을 사용합니다. |
request.useragent() |
문자열 | 편의상 request.headers['user-agent'] 와 동일합니다. |
연산자
보안 웹 프록시는 간단한 표현식 문에서 복잡한 논리 표현식을 작성하는 데 사용할 수 있는 여러 연산자를 지원합니다. 보안 웹 프록시는 &&
, ||,
, !
와 같은 논리 연산자와 x.contains('y')
와 같은 문자열 조작 연산자를 지원합니다.
논리 연산자를 사용하면 조건부 표현식에서 여러 변수를 확인할 수 있습니다. 예를 들어 request.method == 'GET' && host().matches('.*\.example.com')
은 두 개의 문을 결합하며, 전체 결과 True
를 도출하려면 두 문이 모두 True
여야 합니다.
문자열 조작 연산자는 정의된 문자열 또는 하위 문자열과 일치하며, 가능한 모든 조합을 나열하지 않고도 리소스에 대한 액세스를 제어하는 규칙을 개발할 수 있게 해줍니다.
논리 연산자
다음 표에서는 보안 웹 프록시에서 지원하는 논리 연산자를 설명합니다.
표현식 예 | 설명 |
---|---|
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 키가 없으면 평가 시 규칙이 일치하지 않는 오류가 반환됩니다. |
문자열 조작 연산자
다음 표에서는 보안 웹 프록시에서 지원하는 문자열 조작 연산자를 설명합니다.
표현식 | 설명 |
---|---|
x.contains(y) |
문자열 x 에 하위 문자열 y 가 포함된 경우 True 를 반환합니다. |
x.startsWith(y) |
문자열 x 가 하위 문자열 y 로 시작하면 True 를 반환합니다. |
x.endsWith(y) |
문자열 x 가 하위 문자열 y 로 끝나면 True 를 반환합니다. |
x.matches(y) |
문자열 RE2 패턴은 유니코드 기능을 사용 중지하는 RE2::Latin1 옵션을 통해 컴파일됩니다. |
x.lower() |
문자열 x 의 소문자 값을 반환홥니다. |
x.upper() |
문자열 x 의 대문자 값을 반환합니다. |
x + y |
연결된 문자열 xy 를 반환합니다. |
int(x) |
x 의 문자열 결과를 int 유형으로 변환합니다. 변환된 문자열은 > 및 <= 같은 표준 산술 연산자를 사용한 정수 비교에 사용할 수 있습니다. 이는 정수가 될 수 있는 값에만 작용합니다. |