Google Cloud Armor 문제 해결

Google Cloud Armor 보안 정책 문제를 해결하려면 다음 안내를 따르세요.

일반적인 문제

보안 정책 디버깅

어떤 특정 이벤트가 사전 구성된 규칙을 트리거하는지에 대한 추가 정보가 필요한 경우 요청 로깅 사용을 참조하여 상세 로깅을 사용 설정합니다. Cloud Logging은 정책과 규칙을 분석하고 디버깅하는 데 사용할 수 있는 높은 수준의 세부정보를 로그에 기록합니다.

Google Cloud Armor 보안 정책에 구성된 거부 규칙에도 불구하고 트래픽이 허용됨

이를 해결하려면 다음 단계를 따르세요.

  1. Google Cloud Armor 보안 정책이 대상 백엔드 서비스에 연결되어 있는지 확인합니다. 예를 들어 다음 명령어는 백엔드 서비스 BACKEND에 연결된 모든 데이터를 설명합니다. 반환된 결과에는 이 백엔드 서비스에 연결된 Google Cloud Armor 보안 정책의 이름이 포함되어야 합니다.

    gcloud compute backend-services describe BACKEND
    
  2. HTTP(S) 로그를 검토하여 관련 작업과 함께 트래픽과 일치하는 정책과 규칙을 결정합니다. 로그를 확인하려면 Cloud Logging을 사용합니다.

    다음은 관심 있는 필드가 강조표시된 허용 요청의 샘플 로그입니다. 다음 필드를 확인하고 트래픽을 거부하도록 구성한 규칙과 일치하는지 확인합니다.

    • configuredAction은 규칙에 구성된 작업과 일치해야 합니다.
    • name은 이 백엔드 서비스에 연결된 Google Cloud Armor 보안 정책의 이름과 일치해야 합니다.
    • outcomeconfiguredAction과 일치해야 합니다.
    • priority는 규칙의 우선순위 번호와 일치해야 합니다.
      httpRequest:
       remoteIp: 104.133.0.95
       requestMethod: GET
       requestSize: '801'
       requestUrl: http://74.125.67.38/
       responseSize: '246'
       serverIp: 10.132.0.4
       status: 200
       userAgent: curl/7.35.0
         insertId: ajvis5ev4i60
         internalId:
           projectNumber: '895280006100'
         jsonPayload:
           '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
           enforcedSecurityPolicy:
             configuredAction: ACCEPT
             name: mydev-policy-log-test1
             outcome: ACCEPT
             priority: 2147483647
           statusDetails: response_sent_by_backend
         logName: projects/mydev-staging/logs/requests
         resource:
           labels:
             backend_service_name: BACKEND_SERVICE_NAME
             forwarding_rule_name: FORWARDING_RULE_NAME
             project_id: PROJECT_ID
             target_proxy_name: TARGET_HTTP_PROXY_NAME
             url_map_name: URL_MAP_NAME
             zone: global
           type: http_load_balancer
         severity: INFO
         timestamp: '2017-04-18T18:57:05.845960288Z'
    
  3. 규칙의 계층 구조를 검토하여 올바른 규칙이 일치하는지 확인합니다. 허용 작업이 있는 우선순위가 높은 규칙이 트래픽과 일치할 수 있습니다. Google Cloud CLI의 security-policies에서 describe 명령어를 사용하여 Google Cloud Armor 보안 정책의 콘텐츠를 확인하세요.

    예를 들어 다음 예시에서는 우선순위가 높은 허용 규칙(우선순위 100)이 1.2.3.4 IP 주소에서 들어오는 트래픽과 일치하여 우선순위가 낮은 거부 규칙(우선순위 200)이 트래픽을 트리거하고 차단하는 것을 방지하는 방법을 보여줍니다.

    gcloud compute security-policies describe POLICY_NAME
    

    출력:

      creationTimestamp: '2017-04-18T14:47:58.045-07:00
      description: ''
      fingerprint: Yu5spBjdoC0=
      id: '2560355463394441057'
      kind: compute#securityPolicy
      name: POLICY_NAME
      rules:
      -action: allow
       description: allow high priority rule
       kind: compute#securityPolicyRule
       match:
         srcIpRanges:
         -'1.2.3.4/32'
       preview: false
       priority: 100
      -action: deny
       description: deny lower priority rule
       kind: compute#securityPolicyRule
       match:
         srcIpRanges:
         -'1.2.3.0/24
       preview: false
       priority: 200
      -action: deny
       description: default rule
       kind: compute#securityPolicyRule
       match:
         srcIpRanges:
         -'*'
       preview: false
       priority: 2147483647
       selfLink: http://www.googleapis.com/compute/v1/projects/bigclustertestdev0-devconsole/global/securityPolicies/sp
    

사전 구성된 규칙이 거짓양성을 반환합니다.

XSS 및 SQLi 감지는 HTTP 요청 헤더 및 기타 L7 매개변수의 정적 서명 일치를 기반으로 합니다. 이러한 정규 표현식 패턴에는 거짓양성 경향이 있습니다. 미리보기 모드에서 사전 구성된 규칙을 XSS 및 SQLi 감지에 사용하면 로그에서 거짓양성을 확인할 수 있습니다.

거짓양성을 발견하면 트래픽 콘텐츠를 OWASP CRS 규칙과 비교할 수 있습니다. 규칙이 유효하지 않거나 관련이 없으면 evaluatePreconfiguredWaf 표현식을 사용하여 규칙을 사용 중지하고 exclude ID list 인수에 규칙의 ID를 지정합니다.

로그를 검토하고 모든 거짓양성을 삭제한 후 미리보기 모드를 중지합니다.

미리보기 모드에서 사전 구성된 규칙을 추가하는 방법:

  1. 미리 구성된 표현식이 미리보기 모드로 설정된 보안 정책을 작성합니다.

    gcloud compute security-policies rules create 1000
       --security-policy POLICY_NAME
       --expression "evaluatePreconfiguredWaf('xss-stable')"
       --action deny-403
       --preview
    
  2. urlcookie와 같은 HTTP 요청 필드의 HTTP(S) 로그를 검토합니다. 예를 들어 requestUrl은 OWASP CRS 규칙 ID 941180과 긍정적으로 비교합니다.

    httpRequest:
      remoteIp: 104.133.0.95
      requestMethod: GET
      requestSize: '801'
      requestUrl: http://74.125.67.38/foo?document.cookie=1010"
      responseSize: '246'
      serverIp: 10.132.0.4
      status: 200
      userAgent: curl/7.35.0
    insertId: ajvis5ev4i60
    internalId:
      projectNumber: '895280006100'
    jsonPayload:
      '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
      enforcedSecurityPolicy:
        configuredAction: ACCEPT
        name: POLICY_NAME
        outcome: ACCEPT
        priority: 2147483647
        preconfiguredExprIds: [ 'owasp-crs-v030001-id941180-xss' ]
      statusDetails: response_sent_by_backend
    logName: projects/mydev-staging/logs/requests
    resource:
      labels:
        backend_service_name: BACKEND_SERVICE
        forwarding_rule_name: mydev-forwarding-rule
        project_id: mydev-staging
        target_proxy_name: mydev-target-http-proxy
        url_map_name: mydev-url-map
        zone: global
      type: http_load_balancer
    severity: INFO
    timestamp: '2017-04-18T18:57:05.845960288Z'
    
  3. Google Cloud Armor 보안 정책에서 규칙을 업데이트하여 OWASP CRS 규칙 ID 941180을 제외합니다.

    gcloud compute security-policies rules update 1000 \
        --security-policy POLICY_NAME \
        --expression "evaluatePreconfiguredWaf('xss-stable', ['owasp-crs-v030001-id941180-xss'])" \
        --action deny-403 \
        --preview
    
  4. 로그를 다시 검토한 후 미리보기 모드를 사용 중지하여 규칙을 구현합니다.

서명이 거부된 클라이언트는 차단되거나 거부되지 않음

Cloud CDN과 함께 Google Cloud Armor를 사용하는 경우 보안 정책은 동적 콘텐츠, 캐시 부적중 또는 CDN 원본 서버를 대상으로 지정된 기타 요청에 대해서만 적용됩니다. 다운스트림 Google Cloud Armor 보안 정책으로 인해 해당 요청이 CDN 원본 서버에 도달하지 못하더라도 캐시 적중은 제공됩니다.

비율 제한 문제

트래픽이 예상대로 제한되지 않음

클라이언트 IP 주소가 설정된 기준을 초과하는 속도로 애플리케이션에 높은 수준의 트래픽을 전송하지만 트래픽이 예상대로 제한되지 않을 수 있습니다. 이 문제를 조사하려면 다음 단계를 따르세요.

먼저 우선순위가 더 높은 규칙이 해당 IP 주소의 트래픽을 허용하는지 확인합니다. 로그를 검토하여 IP 주소에 대해 ALLOW 규칙이 트리거되었는지 확인합니다. 이는 자체 ALLOW 규칙일 수도 있고 다른 THROTTLE 또는 RATE_BASED_BAN 규칙에 있을 수도 있습니다.

우선순위가 더 높은 규칙을 찾으면 다음 중 하나를 수행합니다.

  1. 비율 제한 규칙에 더 낮은 숫자 값을 할당하여 더 높은 우선순위를 갖도록 우선순위를 변경합니다.
  2. 우선순위가 더 높은 규칙의 일치 표현식에서 IP 주소를 제외합니다.

또한 기준이 잘못 설정되었을 수도 있습니다. 이 경우 요청이 정확하게 일치하지만 준수 작업이 트리거됩니다. 로그를 검토하여 이러한 경우에 해당하는지 확인한 다음 규칙의 기준을 줄입니다.

마지막으로 IP 주소가 제한 또는 비율 기반 차단 규칙과 일치하지 않을 수 있습니다. 이 문제를 해결하려면 일치 조건에서 실수가 있는지 확인한 후 규칙의 일치 조건을 올바른 값으로 변경합니다.

다음 단계