ext-proc 기반 백엔드 서비스의 플러그인 또는 콜아웃을 사용하여 확장 프로그램을 구성할 때 이러한 서비스로 전달할 요청 및 연결 속성을 지정할 수 있습니다. 이 페이지에서는 지원되는 속성을 설명하고 각 확장 프로그램 유형에 사용할 수 있는 속성을 지정합니다.
특정 속성을 전달하도록 확장 프로그램을 구성하면 다음을 수행할 수 있습니다.
- 동적 라우팅 결정을 내립니다.
- 클라이언트 정보로 요청 헤더를 보강합니다.
- 클라이언트 위치 또는 TLS 매개변수를 기반으로 맞춤 보안 정책을 구현합니다.
- 자세한 맞춤 로그를 생성합니다.
플러그인 및 콜아웃 확장 프로그램의 YAML 구성에서 forwardAttributes 필드를 사용하여 속성을 지정할 수 있습니다. 예를 들어 교통 확장 프로그램의 경우 교통 확장 프로그램 구성을 참고하세요.
forwardAttributes를 사용하여 속성을 지정하는 것은 승인, 에지, 경로, 트래픽 확장 프로그램에서 지원됩니다. 다음 제품에서 Wasm 플러그인 또는 콜아웃 (ext_proc 프로토콜 사용)을 사용하여 forwardAttributes를 구현할 수 있습니다.
- 리전 외부 애플리케이션 부하 분산기
- 리전 내부 애플리케이션 부하 분산기
- 전역 외부 애플리케이션 부하 분산기
- 교차 리전 내부 애플리케이션 부하 분산기
다음 표에는 지원되는 속성과 확장 프로그램이 나와 있습니다.
| 속성 | 설명 | 확장 프로그램 |
|---|---|---|
request.origin |
교차 출처 리소스 공유 (CORS) 사용 사례에 대한 요청의 원본 헤더 값입니다. | 교통정보 |
request.method |
HTTP 요청 메서드(예: GET 또는 POST)입니다. |
승인, 에지, 경로, 트래픽 |
request.mcp_method |
HTTP 요청 메서드(예: GET 또는 POST)입니다. |
승인 |
request.host |
편의상 request.headers['host']와 동일합니다. |
승인, 에지, 경로, 트래픽 |
request.path |
요청한 HTTP URL 경로입니다. | 승인, 에지, 경로, 트래픽 |
request.query |
HTTP 요청의 첫 번째 행에 표시되는 name1=value&name2=value2 형식의 HTTP URL 쿼리입니다. 디코딩이 수행되지 않습니다. |
승인, 에지, 경로, 트래픽 |
request.scheme |
HTTP 또는 HTTPS과 같은 HTTP URL 스키마입니다. 이 속성의 값은 소문자입니다. |
승인, 에지, 경로, 트래픽 |
request.backend_service_name |
요청이 전달될 백엔드 서비스입니다. | 승인, 트래픽 |
request.backend_service_project_number |
공유 VPC를 사용하는 경우 요청이 전달될 백엔드 서비스의 프로젝트 번호입니다. | 승인, 트래픽 |
request.mcp_param |
MCP 매개변수입니다. | 승인 |
request.user_agent_family |
User-Agent 헤더 값에서 파생된 클라이언트의 브라우저 유형입니다. 이러한 값은 수신 HTTP 클라이언트 (예: 웹브라우저, 모바일 앱, 자동화 도구)가 표준 HTTP User-Agent 요청 헤더에서 전송하는 원시 텍스트 문자열을 나타냅니다. |
edge, traffic (전역 외부 애플리케이션 부하 분산기 및 리전 외부 애플리케이션 부하 분산기만 해당) |
request.device_request_type |
클라이언트의 기기 유형입니다. 이 속성에 대해 가능한 값은 APPLE, APPLEWEBKIT, BLACKBERRY, DOCOMO, GECKO, GOOGLE, KHTML, KOREAN, MICROSOFT, MSIE, NETFRONT, NOKIA, OBIGO, OPERA, OPENWAVE, OTHER, POLARIS, SEMC, SMIT, TELECA 또는 USER_DEFINED입니다. |
edge, traffic (전역 외부 애플리케이션 부하 분산기 및 리전 외부 애플리케이션 부하 분산기만 해당) |
request.header_order |
클라이언트 요청의 HTTP 헤더 순서입니다. 헤더 이름의 쉼표로 구분된 문자열입니다(예: host,accept,cookie). 이 속성은 accept, accept-charset, accept-encoding, accept-language, connection, content-length, content-type, cookie, host, if-modified-since, ping-from, ping-to, pragma, referer, user-agent, via, x-forwarded-for 헤더를 지원합니다. |
트래픽 (전역 외부 애플리케이션 부하 분산기만 해당) |
response.cdn_cache_id |
요청을 처리하는 데 사용되는 캐시 인스턴스의 위치 코드와 ID입니다. 이 값은 Cloud CDN 요청 로그의 jsonPayload.cacheId 필드에 채워진 값과 동일합니다.
|
트래픽 (전역 외부 애플리케이션 부하 분산기만 해당) |
response.cdn_cache_status |
요청을 처리하는 데 사용되는 캐시 인스턴스의 현재 상태입니다. 이 속성에 가능한 값은 hit, miss, revalidated, stale, uncacheable 또는 disabled입니다. |
트래픽 (전역 외부 애플리케이션 부하 분산기만 해당) |
source.ip |
클라이언트의 IP 주소입니다. | edge, route, traffic |
source.port |
클라이언트의 소스 포트입니다. | edge, route, traffic |
source.client_region |
클라이언트의 IP 주소와 연결된 국가 또는 지역입니다.
값은 유니코드 CLDR 지역 코드입니다(예: US 또는 FR). 대부분의 국가에서 이 코드는 ISO-3166-2 코드와 바로 대응합니다. |
edge, traffic (전역 외부 애플리케이션 부하 분산기 및 리전 외부 애플리케이션 부하 분산기만 해당) |
source.client_region_subdivision |
클라이언트의 IP 주소와 연결된 국가의 구획입니다 (예: 주 또는 시/도). 유니코드 CLDR 하위 영역 ID입니다(예: USCA 또는 CAON). 이러한 유니코드 코드는 ISO-3166-2 표준에 정의된 하위 영역에서 파생된 것입니다. |
에지, 트래픽 (전역 외부 애플리케이션 부하 분산기만 해당) |
source.client_city |
요청이 시작된 도시의 이름입니다. 예를 들어 캘리포니아주 마운틴뷰의 경우 Mountain View입니다.
이 변수에 유효한 값의 표준 목록은 없습니다.
도시 이름에는 US-ASCII 문자, 숫자, 공백, !#$%&'*+-.^_`|~ 문자가 포함될 수 있습니다. |
에지, 트래픽 (전역 외부 애플리케이션 부하 분산기만 해당) |
source.client_city_lat_long |
요청이 시작된 도시의 위도와 경도입니다(예: 마운틴뷰에서 요청한 경우 37.386051,-122.083851). |
에지, 트래픽 (전역 외부 애플리케이션 부하 분산기만 해당) |
connection.client_encrypted |
클라이언트와 부하 분산기 간의 연결이 암호화된 경우(HTTPS, HTTP/2 또는 HTTP/3 사용) 값은 true이고, 그렇지 않으면 false입니다. |
교통정보 |
connection.client_rtt_msec |
부하 분산기와 HTTP(S) 클라이언트 간의 예상 왕복 전송 시간(밀리초)입니다. 이는 부하 분산기의 TCP 스택이 측정하는 평활 왕복 시간 (SRTT) 파라미터 (RFC 2988에 정의됨)입니다. | 트래픽 (전역 외부 애플리케이션 부하 분산기만 해당) |
connection.client_protocol |
클라이언트와 부하 분산기 간의 통신에 사용되는 HTTP 프로토콜입니다. HTTP/1.0, HTTP/1.1, HTTP/2 또는 HTTP/3 중 하나일 수 있습니다. |
교통정보 |
connection.server_ip_address |
클라이언트가 연결되는 부하 분산기의 IP 주소입니다.
이 값은 여러 부하 분산기가 공통 백엔드를 공유할 때 유용합니다. X-Forwarded-For 헤더의 마지막 IP 주소와 동일합니다. |
교통정보 |
connection.server_port |
클라이언트가 연결되는 대상 포트 번호입니다. | 교통정보 |
connection.sni |
TLS 또는 QUIC 핸드셰이크 중에 클라이언트가 제공한 경우 서버 이름 표시 (RFC 6066에 정의된 대로)입니다. 호스트 이름이 소문자로 변환되고 모든 후행 점이 삭제됩니다. | 승인, 에지, 트래픽 |
connection.tls_version |
SSL 핸드셰이크 중 클라이언트와 부하 분산기 사이에 협상된 TLS 버전입니다. 가능한 값은 TLSv1, TLSv1.1, TLSv1.2, TLSv1.3입니다. 클라이언트가 TLS 대신 QUIC를 사용하여 연결하면 값은 QUIC입니다. |
edge, traffic |
connection.sha256_peer_certificate_digest |
다운스트림 TLS 연결에 피어 인증서가 있는 경우 피어 인증서의 16진수 인코딩 SHA256 해시입니다. | 승인, 에지, 트래픽 |
connection.tls_cipher_suite |
TLS 핸드셰이크 중에 협상된 암호 모음입니다. 값은 IANA TLS 암호화 스위트 레지스트리로 정의된 네 자리 16진수입니다(예: TLS_RSA_WITH_AES_128_GCM_SHA256의 경우 009C). QUIC 및 암호화되지 않은 클라이언트 연결의 경우 이 값은 비어 있습니다. |
교통정보 |
connection.tls_ja3_fingerprint |
클라이언트가 HTTPS, HTTP/2, HTTP/3을 사용하여 연결하는 경우 JA3 TLS/SSL 디지털 지문입니다. |
교통정보 |
connection.tls_ja4_fingerprint |
클라이언트가 HTTPS, HTTP/2 또는 HTTP/3을 사용하여 연결하는 경우 JA4 TLS/SSL 디지털 지문입니다. |
edge, traffic |
connection.client_cert_present |
TLS 핸드셰이크 중에 클라이언트가 인증서를 제공한 경우 값은 true이고 그렇지 않으면 false입니다. |
승인, 트래픽 |
connection.client_cert_chain_verified |
클라이언트 인증서 체인이 구성된 TrustStore에 대해 확인된 경우 값은 true이고 그렇지 않으면 false입니다. |
승인, 트래픽 |
connection.client_cert_error |
오류 조건을 나타내는 사전 정의된 문자열입니다. 오류 문자열에 대한 자세한 내용은 mTLS 클라이언트 검증 모드를 참고하세요. | 승인, 트래픽 |
connection.client_cert_serial_number |
클라이언트 인증서의 일련번호입니다. 일련번호가 50바이트보다 길면 client_cert_error가 client_cert_serial_number_exceeded_size_limit로 설정되고 일련번호가 빈 문자열로 설정됩니다. |
승인, 트래픽 |
connection.client_cert_spiffe_id |
주체 대체 이름 (SAN) 필드의 SPIFFE ID입니다. 값이 유효하지 않거나 2, 048바이트를 초과할 경우 SPIFFE ID가 빈 문자열로 설정됩니다. SPIFFE ID가 2, 048바이트보다 길면 client_cert_error가 client_cert_spiffe_id_exceeded_size_limit로 설정됩니다. |
승인, 트래픽 |
connection.client_cert_uri_sans |
쉼표로 구분되고 Base64로 인코딩된 URI 유형의 SAN 확장 프로그램 목록입니다. SAN 확장 프로그램은 클라이언트 인증서에서 추출됩니다. SPIFFE ID는 client_cert_uri_sans 필드에 포함되지 않습니다. client_cert_uri_sans이 512바이트보다 길면 client_cert_error이 client_cert_uri_sans_exceeded_size_limit로 설정되고 쉼표로 구분된 목록이 빈 문자열로 설정됩니다. |
승인, 트래픽 |
connection.client_cert_dnsname_sans |
쉼표로 구분되고 Base64로 인코딩된 DNSName 유형의 SAN 확장 프로그램 목록입니다. SAN 확장 프로그램은 클라이언트 인증서에서 추출됩니다. client_cert_dnsname_sans이 512바이트보다 길면 client_cert_error이 client_cert_dnsname_sans_exceeded_size_limit로 설정되고 쉼표로 구분된 목록이 빈 문자열로 설정됩니다. |
승인, 트래픽 |
connection.client_cert_valid_not_before |
클라이언트 인증서가 유효하지 않은 이전의 타임스탬프(RFC 3339 날짜 문자열 형식)(예: 2022-07-01T18:05:09+00:00)입니다.
|
승인, 트래픽 |
connection.client_cert_valid_not_after |
클라이언트 인증서가 유효하지 않은 이후의 타임스탬프(RFC 3339 날짜 문자열 형식)입니다(예: 2022-07-01T18:05:09+00:00).
|
승인, 트래픽 |
connection.client_cert_issuer_dn |
인증서의 전체 Issuer 필드에서 Base64로 인코딩된 DER 인코딩입니다. client_cert_issuer_dn이 512바이트보다 길면 client_cert_issuer_dn_exceeded_size_limit 문자열이 client_cert_error에 추가되고 client_cert_issuer_dn은 빈 문자열로 설정됩니다. |
승인, 트래픽 |
connection.client_cert_subject_dn |
인증서의 전체 Subject 필드에서 Base64로 인코딩된 DER 인코딩입니다. client_cert_subject_dn이 512바이트보다 길면 client_cert_subject_dn_exceeded_size_limit 문자열이 client_cert_error에 추가되고 client_cert_subject_dn은 빈 문자열로 설정됩니다. |
승인, 트래픽 |
connection.client_cert_leaf |
인증서가 유효성 검사를 통과한 설정된 mTLS 연결의 클라이언트 리프 인증서입니다. 인증서 인코딩은 RFC 9440을 준수합니다. 즉, 바이너리 DER 인증서가 Base64로 인코딩되고 양쪽에서 콜론으로 구분됩니다. client_cert_leaf가 인코딩되지 않은 상태에서 16KB를 초과하면 문자열 client_cert_validated_leaf_exceeded_size_limit가 client_cert_error에 추가되고 client_cert_leaf이 빈 문자열로 설정됩니다. |
승인, 트래픽 |
connection.client_cert_chain |
리프 인증서를 포함하지 않은 클라이언트 인증서가 검증을 통과한 설정된 mTLS 연결의 클라이언트 인증서 체인에 대한 표준 TLS 순서의 쉼표로 구분된 인증서 목록입니다. 인증서 인코딩은 RFC 9440을 준수합니다. Base64 인코딩 전의 client_cert_leaf 및 client_cert_chain을 합친 크기가 16KB를 초과하면 문자열 client_cert_validated_chain_exceeded_size_limit가 client_cert_error에 추가되고 client_cert_chain이 빈 문자열로 설정됩니다. |
승인, 트래픽 |
제한사항
속성 사용 가능 여부: 일부 속성은 일부 확장 유형에서 지원되지 않습니다. 자세한 내용은 이 페이지의 표를 참고하세요.
필수 구성: 확장 프로그램에 속성을 전송하려면 확장 프로그램 구성의
forwardAttributes필드에 속성을 명시적으로 나열해야 합니다. 이 필드에 속성을 나열하지 않으면 부하 분산기가 해당 속성을 확장 프로그램으로 전달하지 않습니다.크기 제한: 단일 확장 프로그램에 최대 16개의 속성을 구성할 수 있습니다.
mTLS 속성: mTLS를 사용 설정했고 클라이언트가 인증서를 제공한 경우에만 클라이언트 인증서 속성(
connection.client_cert_*)이 확장 프로그램에 전달되는 데이터에 채워집니다.