요청 로깅 사용

보안 정책 이름, 일치 규칙 우선순위, 관련 작업, 관련 정보에 대한 Google Cloud Armor 요청별 로그는 외부 애플리케이션 부하 분산기 및 외부 프록시 네트워크 부하 분산기에 대한 로깅의 일부로 로깅됩니다. 새 백엔드 서비스 로깅은 기본적으로 중지되어 있으므로 Google Cloud Armor의 전체 로깅 정보를 기록하려면 로깅을 사용 설정해야 합니다.

Google Cloud Armor 로그는 Cloud Load Balancing 로그의 일부입니다. 즉, Google Cloud Armor 로그 생성에는 부하 분산기에 구성된 로그 샘플링 레이트가 적용됩니다. 부하 분산기의 샘플링 레이트를 줄이면 Google Cloud Armor 요청 로그가 줄어든 레이트로 샘플링됩니다. 또한 교차 프로젝트 서비스 참조를 사용하는 경우 부하 분산기의 프런트엔드 및 URL 맵을 포함하는 호스트 또는 서비스 프로젝트에서 로그가 생성됩니다. 따라서 프런트엔드 프로젝트의 관리자는 백엔드 프로젝트의 관리자에게 로그와 측정항목을 읽을 수 있는 권한을 부여하는 것이 좋습니다.

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

외부 애플리케이션 부하 분산기에 대해 로깅을 사용 설정하려면 외부 애플리케이션 부하 분산기 로깅 및 모니터링을 참조하세요. 외부 프록시 네트워크 부하 분산기의 경우 이전 외부 애플리케이션 부하 분산기 로깅 및 모니터링 페이지에 나열된 대로 Google Cloud CLI 명령어를 사용할 수 있습니다. Google Cloud 콘솔을 사용해서는 외부 프록시 네트워크 부하 분산기에 로깅을 사용 설정할 수 없습니다.

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

보안 정책 로그 항목

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

  • statusDetails(문자열): 응답 코드의 텍스트 설명
    • redirected_by_security_policy: 요청이 GOOGLE_RECAPTCHA 또는 EXTERNAL_302 리디렉션 규칙에 의해 리디렉션되었습니다.
    • denied_by_security_policy: 요청이 Google Cloud Armor 보안 정책으로 인해 부하 분산기에 의해 거부되었습니다.
    • body_denied_by_security_policy: Google Cloud Armor 보안 정책으로 인해 부하 분산기에서 요청 본문이 거부되었습니다.
  • enforcedSecurityPolicy: 적용된 보안 정책 규칙
    • name(문자열): 보안 정책 이름
    • priority(숫자): 보안 정책에서 일치하는 규칙의 우선순위
    • adaptiveProtection: 해당되는 경우 자동으로 배포된 Adaptive Protection 규칙에 대한 정보입니다.
      • autoDeployAlertId: Adaptive Protection에서 감지한 이벤트의 알림 ID입니다.
    • configuredAction(문자열): 일치하는 규칙의 구성된 작업 이름(예: ALLOW ,DENY ,GOOGLE_RECAPTCHA ,EXTERNAL_302, THROTTLE(제한 규칙의 경우), RATE_BASED_BAN(비율 기반 차단 규칙의 경우))
    • rateLimitAction: 제한 규칙 또는 비율 기반 차단 규칙이 일치할 때 비율 제한 작업에 대한 정보
      • key (문자열): 비율 제한 키 값(최대 32바이트). 키 유형이 ALL이거나, 키 유형이 HTTP-HEADER 또는 HTTP-COOKIE인데 지정된 헤더 또는 쿠키가 요청에 없는 경우 이 필드는 생략됩니다.
      • outcome(문자열): 가능한 값은 다음과 같습니다.
        • 구성된 비율 제한 기준 미만인 경우 "RATE_LIMIT_THRESHOLD_CONFORM"
        • 구성된 비율 제한 기준을 초과하는 경우 "RATE_LIMIT_THRESHOLD_EXCEED"
        • 구성된 차단 기준을 초과하는 경우 "BAN_THRESHOLD_EXCEED"
    • outcome(문자열): 구성된 작업을 실행한 결과(예: ACCEPT, DENY, REDIRECT, EXEMPT)
    • preconfiguredExprIds(문자열): 규칙을 트리거한 모든 사전 구성된 WAF 규칙 표현식의 ID
    • threatIntelligence: 위협 인텔리전스의 일치하는 IP 주소 목록에 대한 정보(해당하는 경우)
      • categories: (문자열) 일치하는 IP 주소 목록 이름
  • previewSecurityPolicy: 요청이 미리보기용으로 구성된 규칙과 일치하면 채워짐(미리보기 규칙이 적용된 규칙보다 우선할 때만 표시됨)
    • name(문자열): 보안 정책 이름
    • priority(숫자): 보안 정책에서 일치하는 규칙의 우선순위
    • configuredAction(문자열): 일치하는 규칙의 구성된 작업 이름(예: ALLOW ,DENY ,GOOGLE_RECAPTCHA ,EXTERNAL_302, THROTTLE(제한 규칙의 경우), RATE_BASED_BAN(비율 기반 차단 규칙의 경우))
    • rateLimitAction: 제한 규칙 또는 비율 기반 차단 규칙이 일치할 때 비율 제한 작업에 대한 정보
      • key (문자열): 비율 제한 키 값(최대 32바이트). 키 유형이 ALL이거나, 키 유형이 HTTP-HEADER 또는 HTTP-COOKIE인데 지정된 헤더 또는 쿠키가 요청에 없는 경우 이 필드는 생략됩니다.
      • outcome(문자열): 가능한 값은 다음과 같습니다.
        • 구성된 비율 제한 기준 미만인 경우 "RATE_LIMIT_THRESHOLD_CONFORM"
        • 구성된 비율 제한 기준을 초과하는 경우 "RATE_LIMIT_THRESHOLD_EXCEED"
        • 구성된 차단 기준을 초과하는 경우 "BAN_THRESHOLD_EXCEED"
    • outcome(문자열): 구성된 실행 결과
    • outcome(문자열): 구성된 작업을 실행한 결과(예: ACCEPT, DENY, REDIRECT, EXEMPT)
    • preconfiguredExprIds(문자열): 규칙을 트리거한 모든 사전 구성된 WAF 규칙 표현식의 ID
    • threatIntelligence: 위협 인텔리전스의 일치하는 IP 주소 목록에 대한 정보(해당하는 경우)
      • categories: (문자열) 일치하는 IP 주소 목록 이름
  • enforcedEdgeSecurityPolicy(미리보기): 적용된 에지 보안 정책 규칙
    • name(문자열): 보안 정책 이름
    • priority(숫자): 보안 정책에서 일치하는 규칙의 우선순위
    • configuredAction(문자열): 일치하는 규칙의 구성된 작업 이름(예: ALLOW, DENY)
    • outcome(문자열): 구성된 작업을 실행한 결과(예: ACCEPT, DENY)
  • previewEdgeSecurityPolicy(미리보기): 요청이 미리보기용으로 구성된 에지 보안 정책 규칙과 일치하는 경우 채워짐(미리보기 규칙이 시행 규칙보다 우선할 때만 표시됨)
    • name(문자열): 보안 정책 이름
    • priority(숫자): 보안 정책에서 일치하는 규칙의 우선순위
    • configuredAction(문자열): 일치하는 규칙의 구성된 작업 이름(예: ALLOW, DENY)
    • outcome(문자열): 구성된 작업을 실행한 결과(예: ACCEPT, DENY)

로그 보기

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

콘솔

  1. Google Cloud 콘솔에서 Google Cloud Armor 정책으로 이동합니다.

    Google Cloud Armor 정책으로 이동

  2. 작업을 클릭합니다.

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

데이터 로깅 요청

Google Cloud Armor와 함께 사용할 경우 jsonPayload에 다음과 같은 추가 필드가 포함됩니다.

  • securityPolicyRequestData: 최종적으로 일치하는 규칙과 관계없이 보안 정책에 따라 처리 중인 요청과 관련된 데이터
    • recaptchaActionToken: reCAPTCHA 작업 토큰과 관련된 데이터.
      • score (float): reCAPTCHA 작업 토큰에 삽입된 사용자 적법성 점수. reCAPTCHA 작업 토큰이 요청에 연결되고 보안 정책 규칙에 따라 성공적으로 디코딩되는 경우에만 표시됩니다. 자세한 내용은 reCAPTCHA 평가 시행을 참조하세요.
    • recaptchaSessionToken: reCAPTCHA 세션 토큰과 관련된 데이터.
      • score (float): reCAPTCHA 토큰에 삽입된 사용자 적법성 점수. reCAPTCHA 세션 토큰이 요청에 연결되고 보안 정책 규칙에 따라 성공적으로 디코딩되는 경우에만 표시됩니다.
    • tlsJa3Fingerprint: 클라이언트가 HTTPS, HTTP/2, HTTP/3을 사용하여 연결하는 경우 JA3 TTL/SSL 디지털 지문입니다. 디지털 지문을 사용할 수 있고 정책의 표현식이 요청과 일치하는지 여부에 관계없이 요청을 평가하는 보안 정책이 있을 때만 제공됩니다.

로그 예시

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

jsonPayload: {
 enforcedSecurityPolicy: {
  priority: 100
  name: "sample-prod-policy"
  configuredAction: "THROTTLE"
  outcome: "DENY"
  rateLimitAction: {
    key:"sample-key"
    outcome:"RATE_LIMIT_THRESHOLD_EXCEED"
  }
 }
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 statusDetails: "denied_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: "DENY"
  configuredAction: "RATE_BASED_BAN"
  rateLimitAction: {
    key:"sample-key"
    outcome:"BAN_THRESHOLD_EXCEED"
  }
 }
 statusDetails: "denied_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:27:17.393244Z"

다음 단계

Google Cloud Armor 문제 해결 알아보기