보안 정책의 일반적인 사용 사례

이 페이지에서는 Google Cloud Armor 보안 정책의 일반적인 사용 사례를 설명합니다. Google Cloud Armor 보안 정책은 IP 주소 허용 목록 및 차단 목록과 같은 기능, 사전 구성된 규칙 등으로 일반적인 웹 공격을 방지하기 위해 애플리케이션을 보호할 수 있습니다.

웹 애플리케이션 및 서비스에 대한 액세스 제어

이 섹션에서는 Google Cloud Armor 보안 정책을 사용하여 애플리케이션 또는 서비스에 대한 액세스를 제어하는 여러 방법을 설명합니다.

허용 목록으로 특정 IP 주소의 사용자에게 액세스 허용

허용 목록에 사용자 IP 주소를 배치하는 일반적인 사용 사례는 외부 HTTP(S) 부하 분산기를 특정 사용자 집합에서만 액세스하는 경우입니다. 다음 예시에서는 조직의 사용자만 부하 분산기 뒤에 있는 서비스에 액세스할 수 있습니다. 이러한 사용자에게는 조직에서 할당한 IP 주소나 주소 블록이 있습니다. 이러한 사용자만 부하 분산기에 액세스하도록 이러한 IP 주소나 CIDR 범위를 허용 목록에 배치할 수 있습니다.

허용 목록을 사용하여 부하 분산기 액세스 제한
허용 목록을 사용하여 부하 분산기 액세스 제한(확대하려면 클릭)

부하 분산기에 대한 액세스가 허용되는 소스 IP 주소나 소스 CIDR 범위로 허용 목록을 구성하여 외부 HTTP(S) 부하 분산기에 대한 액세스를 제어합니다. 다음 섹션에서는 이 구성을 자세히 설명합니다.

이 구성에서 IP 범위의 IP 주소를 사용하는 조직의 사용자만 외부 HTTP(S) 부하 분산기에 액세스하도록 허용하려고 합니다. 다른 모든 트래픽이 거부되게 하려고 합니다.

이 구성을 만들려면 다음 단계를 수행하세요.

  1. Google Cloud Armor 보안 정책을 만듭니다.
  2. 보안 정책에서 범위를 허용 목록에 첫 번째 규칙으로 추가하는 규칙을 추가합니다. 이 규칙의 설명은 allow [RANGE]이며, 여기서 [RANGE]는 원하는 IP 범위입니다.
  3. 정책의 기본 규칙을 허용 규칙에서 차단 규칙으로 수정합니다. 기본 규칙은 앞의 규칙과 일치하지 않는 트래픽을 관리합니다. 정책의 마지막 규칙입니다. 규칙을 allow에서 deny로 변경하면 허용 목록에 있는 범위에서 발생하지 않는 모든 트래픽이 차단됩니다.
  4. 이 정책을 외부 HTTP(S) 부하 분산기의 백엔드 서비스에 연결합니다.

조직에서 타사 보안 제공업체를 사용하여 트래픽을 스크러빙하는 경우 스크러빙된 트래픽만 외부 HTTP(S) 부하 분산기와 백엔드에 액세스할 수 있게 하는 보안 제공업체의 IP 주소를 허용 목록에 추가할 수 있습니다.

다음 이미지에서 타사 제공업체는 CIDR 범위 192.0.2.0/24로 식별되며 이 범위는 허용 목록에 있습니다.

타사 보안 제공업체의 트래픽을 허용 목록에 추가하여 부하 분산기 액세스 제한
타사 보안 제공업체의 트래픽을 허용 목록에 추가하여 부하 분산기 액세스 제한(확대하려면 클릭)

차단 목록으로 특정 IP 주소의 사용자에게 액세스 허용

차단 목록을 사용하여 IP 주소나 CIDR 범위에서 들어오는 트래픽을 거부하는 Google Cloud Armor 보안 정책을 만듭니다. 다음 이미지에서 Google Cloud Armor 보안 정책에는 악의적인 사용자로 식별된 IP 주소 198.51.100.1에서 들어오는 트래픽을 차단하는 deny 규칙이 있습니다.

차단 목록을 사용하여 부하 분산기 액세스 제한
차단 목록을 사용하여 부하 분산기 액세스 제한(확대하려면 클릭)

레이어 3부터 레이어 7 매개변수를 기준으로 필터링하는 맞춤 규칙

Google Cloud Armor 커스텀 규칙 언어를 사용하여 규칙의 일치 조건에서 표현식을 한 개 이상 정의합니다. Google Cloud Armor는 요청을 받으면 이러한 표현식과 비교하여 요청을 평가합니다. 일치 항목이 있으면 들어오는 트래픽을 거부하거나 허용하는 규칙 작업이 적용됩니다.

다음 예시는 Common Expression Language(CEL)의 Google Cloud Armor 확장 프로그램으로 작성된 표현식입니다. 자세한 내용은 커스텀 규칙 언어 참조를 확인하세요.

규칙에 표현식을 정의하려면 gcloud --expression 플래그나 Google Cloud Console을 사용합니다. 자세한 내용은 Google Cloud Armor 보안 정책, 규칙, 표현식 만들기를 참조하세요.

다음 예시에서 AU 리전에 있는 2001:db8::/32(예: 알파 테스터)의 요청은 다음 표현식과 일치합니다.

origin.region_code == "AU" && inIpRange(origin.ip, '2001:db8::/32')

다음 예시는 192.0.2.0/24의 요청과 WordPress 문자열을 포함하는 사용자 에이전트와 일치합니다.

inIpRange(origin.ip, '192.0.2.0/24') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('WordPress')

추가 예시는 커스텀 규칙 언어 참조의 예시 표현식을 참조하세요.

애플리케이션 레이어 공격으로부터 배포를 보호하고 OWASP 10대 위험 완화

Google Cloud Armor를 사용하여 SQL 삽입(SQLi) 및 교차 사이트 스크립팅(XSS)과 같은 애플리케이션 레이어(L7) 공격으로부터 Cloud CDN 원본 서버를 보호할 수 있습니다. 캐시 콘텐츠는 정적이며 웹에서 공격 대상이 될 위험이 없습니다. 그러나 기본 콘텐츠 원본 서버는 알려지거나 잠재적인 웹 앱 취약점이 있는 동적 애플리케이션일 수 있습니다. 보안 또는 규정 준수 요구사항에 따라 인터넷 취약점을 악용해 원본 서버를 공격하지 못하도록 이러한 위험을 완화해야 할 수도 있습니다.

위험을 완화하려면 다음 단계를 수행합니다.

  1. CDN을 사용 설정하여 백엔드 서비스를 만들거나 식별합니다.
  2. Google Cloud Armor 보안 정책을 만듭니다.
  3. 보안 정책에 L7 공격을 차단하는 규칙을 하나 이상 만듭니다.
  4. 보안 정책의 대상 중 하나를 1단계에서 만들거나 식별한 백엔드 서비스로 구성합니다.

사전 구성된 규칙을 사용하여 일반적인 애플리케이션 레이어 공격을 감지하고 차단할 수 있습니다. 사전 구성된 규칙은 Google Cloud Armor 보안 정책에 추가할 수 있는 사전 정의된 표현식 세트입니다. 이러한 표현식 세트를 규칙에 추가하려면 gcloud --expression 플래그나 Cloud Console을 사용합니다. 자세한 내용은 보안 정책, 규칙, 표현식 만들기를 참조하세요.

사전 구성된 규칙에 대한 자세한 내용은 커스텀 규칙 언어 참조의 사전 구성된 규칙을 참조하세요.

다음 예시에서는 사전 구성된 규칙을 사용하여 교차 사이트 스크립팅(XSS) 공격을 완화합니다.

evaluatePreconfiguredExpr('xss-stable')

다음 예시에서는 사전 구성된 규칙을 사용하여 SQL 주입(SQLi) 공격을 완화합니다.

evaluatePreconfiguredExpr('sqli-stable')

사전 구성된 규칙을 다른 표현식과 결합할 수도 있습니다. 다음 예시에서는 사전 구성된 규칙을 사용하여 192.0.2.1/24 IP 주소 범위에서 SQLi 공격을 완화합니다.

inIpRange(origin.ip, '192.0.2.1/24') && evaluatePreconfiguredExpr('sqli-stable')

하이브리드 워크로드의 OWASP 완화 상위 10개

Google Cloud Armor는 Google Cloud, 온프레미스 또는 타사 제공업체에 배포되었는지 여부와 상관없이 다음 공격에 대한 완화를 제공합니다.

  • SQL 삽입(SQLi)
  • 교차 사이트 스크립팅(XSS)
  • 로컬 파일 포함(LFI)
  • 원격 파일 포함(RCI)
  • 원격 코드 실행(RCE)

이러한 기능을 사용하면 OWASP 상위 10개 목록에서 식별된 위험을 비롯한 가장 일반적인 웹 애플리케이션 보안 위험 일부를 해결할 수 있습니다.

Google Cloud Armor의 사전 구성된 WAF 규칙을 보안 정책에 추가하여 SQLi 또는 XSS 시도를 비롯한 원치 않는 레이어 7 요청을 감지하고 거부할 수 있습니다. Google Cloud Armor는 악의적인 요청을 감지하여 Google 인프라의 에지에서 삭제합니다. 백엔드 서비스가 배포된 위치에 관계없이 요청이 백엔드 서비스로 프록시되지 않습니다.

Google 네트워크 에지에서 Google Cloud가 호스팅하지 않는 워크로드를 보호하려면 다음 단계를 따르세요.

  1. 인터넷 NEG가 백엔드로 있는 백엔드 서비스를 사용하여 외부 HTTP(S) 부하 분산기를 구성합니다.
  2. Google Cloud Armor 보안 정책을 만듭니다.
  3. 정책에 사전 구성된 SQLi 규칙과 XSS 규칙을 추가합니다.
  4. 1단계에서 만든 백엔드 서비스에 보안 정책을 연결합니다.
  5. Cloud Logging, Cloud Monitoring, Security Command Center로 전송된 발견 항목을 사용하여 Google Cloud Armor 활동을 모니터링합니다.

Cloud CDN 외부 원본 서버 DDoS 방어 및 레이어 7 모니터링

외부 원본 서버를 사용한 Cloud CDN 배포에는 Google의 에지 인프라가 프록시, 캐싱, Google Cloud Armor 레이어 7 필터링에 사용되는 프런트엔드로 있을 수 있습니다. 원본 서버는 인터넷 NEG를 사용하여 온프레미스 또는 타사 인프라 제공업체와 함께 위치할 수 있습니다.

Google Cloud Armor와 나머지 Google 에지 인프라는 L3/L4 공격을 완화 및 제거하고, 의심스러운 레이어 7 활동을 경고하며, 커스텀 규칙으로 원치 않는 레이어 7 요청을 거부할 수 있습니다. Cloud Logging, Cloud Monitoring, Security Command Center의 Google Cloud Armor 로깅 및 원격 분석은 배포된 위치와 관계없이 보호된 애플리케이션의 활용 가능한 분석 정보를 제공합니다.

CDN 외부 원본 서버에 Google Cloud Armor 보호를 사용 설정하려면 다음 단계를 수행합니다.

  1. 인터넷 NEG가 백엔드로 있는 백엔드 서비스를 사용하여 외부 HTTP(S) 부하 분산기를 구성합니다.
  2. 이 백엔드 서비스에 Cloud CDN을 사용 설정합니다.
  3. Google Cloud Armor 보안 정책을 만듭니다.
  4. 1단계에서 만든 백엔드 서비스에 보안 정책을 연결합니다.
  5. Security Command Center, Cloud Logging, Cloud Monitoring에서 Google Cloud Armor 알림, 로깅, 원격 분석에 액세스합니다.

레이어 7 액세스 제어 및 캐시 무효화 공격

애플리케이션 아키텍처에 따라 캐시할 수 있고 캐시할 수 없는 콘텐츠를 포함하여 다양한 URL에 요청을 제공하도록 백엔드 서비스 하나를 구성할 수 있습니다. 이러한 배포 시나리오에서는 특정 요청 경로에서 원치 않는 트래픽을 거부하지만 모든 클라이언트가 다른 요청 경로에서 정적 콘텐츠에 액세스할 수 있게 하는 Google Cloud Armor 보안 정책을 만듭니다.

다른 상황에서는 콘텐츠가 캐시에서 효율적으로 제공되고 있지만 악의적이거나 잘못된 클라이언트에서 요청을 대량 생성하여 캐시 부적중이 발생하고 이로 인해 기본 원본 서버가 요청된 콘텐츠를 가져오거나 생성해야 할 수 있습니다. 이로 인해 제한된 리소스가 부족해지고 모든 사용자의 애플리케이션 가용성이 부정적인 영향을 받을 수 있습니다. 문제의 원인인 모든 클라이언트의 서명과 일치하도록 Google Cloud Armor 보안 정책을 만들어 요청이 원본 서버에 도달하여 성능에 영향을 미치기 전에 요청을 거부할 수 있습니다.

이를 달성하려면 다음 단계를 수행합니다.

  1. Google Cloud Armor 보안 정책을 만듭니다.
  2. 규칙을 구성합니다. 예를 들어 다음 규칙은 "/admin"에 대한 액세스를 거부합니다.

    request.path.contains("/admin") && !inIpRange(origin.ip, '<allowed_ip_range>'
    
  3. 1단계의 보안 정책을 Cloud CDN이 사용 설정된 백엔드 서비스에 연결합니다.

다음 단계