요청 로깅 사용

보안 정책 이름, 일치 규칙 우선순위, 관련 작업, 관련 정보의 Google Cloud Armor 요청별 로그는 HTTP(S) 부하 분산 로깅의 일부로 로깅됩니다. 새 백엔드 서비스 로깅은 기본적으로 중지되어 있으므로 Google Cloud Armor의 전체 로깅 정보를 기록하려면 HTTP(S) 부하 분산 로깅을 사용 설정해야 합니다.

Google Cloud Armor 로그는 Cloud Load Balancing 로그의 일부이므로 Google Cloud Armor 로그 생성에는 HTTP(S) 부하 분산에 대해 구성된 로그 샘플링 레이트가 적용됩니다. 외부 HTTP(S) 부하 분산기의 샘플링 레이트를 줄이면 Google Cloud Armor 요청 로그는 줄어든 샘플링 레이트로 샘플링됩니다.

로깅을 사용하면 Google Cloud Armor 보안 정책으로 평가된 모든 요청과 결과 또는 수행된 작업을 볼 수 있습니다. 예를 들어 거부된 요청을 보려면 jsonPayload.enforcedSecurityPolicy.outcome="DENY" 또는 jsonPayload.statusDetails="denied_by_security_policy"와 같은 필터를 사용하면 됩니다.

로깅을 사용 설정하려면 HTTP(S) 부하 분산 로깅 및 모니터링을 참조하세요.

또한 보안 정책 및 규칙이 의도한 대로 작동하는지 평가하는 데 도움이 되는 여러 로깅 수준을 설정할 수 있습니다. 자세한 내용은 상세 로깅을 참조하세요.

보안 정책 로그 항목

로그 뷰어의 다음 로그 항목은 Google Cloud Armor 보안 정책 및 규칙 로깅에 대한 것입니다. 항목에는 jsonPayload의 다음 구조가 포함됩니다. HTTP 요청 세부정보는 httpRequest 메시지에 표시됩니다.

  • statusDetails(문자열): 응답 코드의 텍스트 설명
    • redirected_by_security_policy: 요청이 GOOGLE_RECAPTCHA 또는 EXTERNAL_302 리디렉션 규칙에 의해 리디렉션되었습니다.
    • throttled_by_security_policy: 요청이 제한 규칙에 의해 차단되었습니다.
    • rate_based_banned_by_security_policy: 요청이 비율 기반 차단 규칙에 의해 차단되었습니다.
    • denied_by_security_policy: 요청이 Google Cloud Armor 보안 정책으로 인해 부하 분산기에 의해 거부되었습니다.
    • body_denied_by_security_policy: Google Cloud Armor 보안 정책으로 인해 부하 분산기에서 요청 본문이 거부되었습니다.
  • enforcedSecurityPolicy: 적용된 보안 정책 규칙
    • name(문자열): 보안 정책 이름
    • priority(숫자): 보안 정책에서 일치하는 규칙의 우선순위
    • configuredAction(문자열): 일치하는 규칙의 구성된 작업 이름(예: ALLOW ,DENY ,GOOGLE_RECAPTCHA ,EXTERNAL_302 THROTTLE(제한 규칙의 경우), RATE_BASED_BAN(비율 기반 차단 규칙의 경우))
    • outcome(문자열): 구성된 작업을 실행한 결과(예: ACCEPT, DENY, REDIRECT, THROTTLE, RATE_BASED_BAN)
    • preconfiguredExprIds(문자열): 규칙을 트리거한 모든 사전 구성된 WAF 규칙 표현식의 ID
  • previewSecurityPolicy :요청이 미리보기용으로 구성된 규칙과 일치하면 채워짐(미리보기 규칙이 적용된 규칙보다 우선할 때만 표시됨)
    • name(문자열): 보안 정책 이름
    • priority(숫자): 보안 정책에서 일치하는 규칙의 우선순위
    • configuredAction(문자열): 일치하는 규칙의 구성된 작업 이름(예: ALLOW ,DENY ,GOOGLE_RECAPTCHA ,EXTERNAL_302 THROTTLE(제한 규칙의 경우), RATE_BASED_BAN(비율 기반 차단 규칙의 경우))
    • outcome(문자열): 구성된 작업을 실행한 결과(예: ACCEPT, DENY, REDIRECT, THROTTLE, RATE_BASED_BAN)
    • preconfiguredExprIds(문자열): 규칙을 트리거한 모든 사전 구성된 WAF 규칙 표현식의 ID
  • enforcedEdgeSecurityPolicy(미리보기): 적용된 에지 보안 정책 규칙
    • name(문자열): 보안 정책 이름
    • priority(숫자): 보안 정책에서 일치하는 규칙의 우선순위
    • configuredAction(문자열): 일치하는 규칙의 구성된 작업 이름(예: ALLOW, DENY)
    • outcome(문자열): 구성된 작업을 실행한 결과(예: ACCEPT, DENY)
  • previewEdgeSecurityPolicy(미리보기): 요청이 미리보기용으로 구성된 에지 보안 정책 규칙과 일치하는 경우 채워짐(미리보기 규칙이 시행 규칙보다 우선할 때만 표시됨)
    • name(문자열): 보안 정책 이름
    • priority(숫자): 보안 정책에서 일치하는 규칙의 우선순위
    • configuredAction(문자열): 일치하는 규칙의 구성된 작업 이름(예: ALLOW, DENY)
    • outcome(문자열): 구성된 작업을 실행한 결과(예: ACCEPT, DENY)

상세 로깅

사전 구성된 WAF 규칙이 특정 요청으로 인해 트리거된 이유를 파악하기 어려울 수 있습니다. Google Cloud Armor의 기본 이벤트 로그에는 트리거된 규칙과 하위 서명이 포함됩니다. 그러나 문제 해결, 규칙 유효성 검사 또는 규칙 조정을 목적으로 규칙을 트리거한 수신 요청의 세부정보를 식별해야 할 수 있습니다.

--log-level 플래그를 사용하여 정책에 로깅되는 세부정보의 수준을 변경할 수 있습니다. 이 플래그의 값은 NORMAL 또는 VERBOSE일 수 있습니다.

--log-level=[NORMAL | VERBOSE]

예를 들면 다음과 같습니다.

gcloud compute security-policies update ca-policy-1 \
    --log-level=VERBOSE

처음 정책을 만들거나, 정책을 변경하거나, 정책 문제를 해결할 때 상세 로깅을 사용 설정하는 것이 좋습니다.

상세 로깅이 사용 설정된 경우 로깅되는 값

상세 로깅이 사용 설정되면 추가 정보가 Cloud Logging으로 전송되는 HTTP(S) 부하 분산 요청 로그에 로깅됩니다. 상세 로깅이 사용 설정되면 다음 추가 필드가 요청 로그에 표시됩니다.

  • matchedFieldType(문자열): 일치를 유발하는 필드 유형입니다.

    • ARG_NAMES
    • ARG_VALUES
    • BODY

      • BODY 필드가 로그에 있으면 전체 게시물 본문이 규칙과 일치한다는 의미입니다.
    • COOKIE_VALUES

    • COOKIE_NAMES

    • FILENAME

    • HEADER_VALUES

    • RAW_URI

    • REFERER

    • REQUEST_LINE

    • URI

    • USER_AGENT

    • HEADER_NAMES

    • ARGS_GET

    • X_FILENAME

    • ARG_NAME_COUNT

    • TRANSFER_ENCODING

    • REQUEST_METHOD

  • matchedFieldName(문자열): 이 값이 키-값 쌍의 값 부분과 일치하면 키 값이 이 필드에 저장됩니다. 그렇지 않으면 비어 있습니다.

  • matchedFieldValue(문자열): 일치를 유발하는 필드 부분에 대한 최대 16바이트 프리픽스입니다.

  • matchedFieldLength(정수): 필드의 총 길이입니다.

  • matchedOffset(정수): 일치를 유발하는 필드 내의 시작 오프셋입니다.

  • matchedLength(정수): 일치하는 길이입니다.

예를 들어 SQL 삽입 WAF 규칙이 사용 설정된 프로젝트에 이 요청을 전송할 수 있습니다.

curl http://IP_ADDR/?sql_table=abc%20pg_catalog%20xyz

로그 탐색기의 항목은 다음과 같습니다.

enforcedSecurityPolicy: {
 name: "user-staging-sec-policy"
 priority: 100
 configuredAction: "DENY"
 outcome: "DENY
 preconfiguredExprIds: [
   0: "owasp-crs-v030001-id942140-sqli"
  ]
matchedFieldType: "ARG_VALUES"
matchedFieldName: "sql_table"
matchedFieldValue: "pg_catalog"
matchedFieldLength: 18
matchedOffset: 4
matchedLength: 10
}

상세 로깅이 사용 설정된 경우 개인 정보 보호 유지

상세 로깅을 사용하면 Google Cloud Armor는 사전 구성된 특정 WAF 규칙을 트리거한 수신 요청의 요소 스니펫을 로깅합니다. 이러한 스니펫에는 요청 헤더, 요청 매개변수 또는 POST 본문의 요소가 포함될 수 있습니다. 요청 헤더 또는 본문에 있는 내용과 WAF 규칙을 트리거하는 항목에 따라 수신 요청의 민감한 정보(IP 주소 또는 기타 민감한 정보)가 스니펫에 포함될 수 있습니다.

상세 로깅을 사용 설정하면 Logging의 로그에 잠재적으로 민감한 정보가 누적될 위험이 있습니다. 규칙 생성 및 검증 중에 또는 문제 해결을 위해서만 상세 로깅을 사용 설정하는 것이 좋습니다. 일반 작업 중에는 상세 로깅을 사용 중지된 상태로 두는 것이 좋습니다.

로그 보기

Google Cloud Armor 보안 정책 로그는 Google Cloud Console에서만 볼 수 있습니다.

Console

  1. Google Cloud Console에서 네트워크 보안 페이지로 이동합니다.

    네트워크 보안으로 이동

  2. 보안 정책 페이지의 보안 정책 행에서 로그를 보려는 정책의 메뉴를 클릭합니다.

  3. 로그 보기를 선택합니다.

봇 관리

Google Cloud Armor가 reCAPTCHA Enterprise 토큰을 평가하는 방법을 볼 수 있도록 jsonPayload에 다음과 같은 추가 필드가 있습니다.

  • securityPolicyRequestData: 최종적으로 일치하는 규칙과 관계없이 보안 정책에 따라 처리 중인 요청과 관련된 데이터
    • recaptchaToken: reCAPTCHA Enterprise 토큰(작업 토큰 또는 세션 토큰)과 관련된 데이터
      • score (float): reCAPTCHA Enterprise 토큰에 삽입된 사용자 적법성 점수. reCAPTCHA Enterprise 토큰이 요청과 연결되어 있고 토큰이 올바르게 디코딩된 경우에만 제공됩니다. reCAPTCHA Enterprise 토큰 기반 규칙이 있는 경우에만 Google Cloud Armor가 토큰을 디코딩하려고 시도합니다. 자세한 내용은 reCAPTCHA Enterprise 평가 시행을 참조하세요.

로그 예시

다음은 요청을 차단하는 제한 규칙의 로그 세부정보 예시입니다.

jsonPayload: {
 enforcedSecurityPolicy: {
  priority: 100
  name: "sample-prod-policy"
  configuredAction: "THROTTLE"
  outcome: "THROTTLE"
 }
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 statusDetails: "throttled_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:16:48.185763Z"

다음은 요청을 차단하는 비율 기반 차단 규칙의 로그 세부정보 예시입니다.

jsonPayload: {
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 enforcedSecurityPolicy: {
  priority: 150
  name: "sample-prod-policy"
  outcome: "RATE_BASED_BAN"
  configuredAction: "RATE_BASED_BAN"
 }
 statusDetails: "rate_based_banned_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:27:17.393244Z"

다음 단계

Google Cloud Armor 문제 해결 알아보기