Cloud Armor 사전 구성된 WAF 규칙 Codelab

1. 소개

안녕하세요. Cloud Armor의 사전 구성된 WAF 규칙 Codelab에 오신 것을 환영합니다.

Google Cloud Armor는 규모에 맞게 DDOS 보호, WAF 규칙 적용, 적응형 관리 기능을 제공하는 Google의 엔터프라이즈 에지 네트워크 보안 솔루션입니다.

Cloud Armor는 사전 구성된 WAF 규칙 집합을 확장하여 OWASP 상위 10개 웹 애플리케이션 보안 취약점을 완화했습니다. 규칙 세트는 OWASP Modsecurity Core Rule Set 버전 3.0.2를 기반으로 하며 로컬 파일 포함 (lfi), 원격 파일 포함 (rfi), 원격 코드 실행 (rce) 등의 가장 일반적인 웹 애플리케이션 보안 위험으로부터 보호합니다.

이 Codelab에서는 Google Cloud Armor WAF 규칙을 사용하여 몇 가지 일반적인 취약점을 완화하는 방법을 알아봅니다.

학습할 내용

  • 서비스 지원을 위해 인스턴스 그룹 및 전역 부하 분산기를 설정하는 방법
  • 사전 구성된 WAF 규칙으로 Cloud Armor 보안 정책을 구성하여 lfi, rce, 스캐너, 프로토콜 공격, 세션 고정으로부터 보호하는 방법
  • 로그를 관찰하여 Cloud Armor가 공격을 완화했는지 검증하는 방법

필요한 항목

  • Google Compute Engine에 관한 기본 지식 ( Codelab)
  • 기본 네트워킹 및 TCP/IP 지식
  • 기본 Unix/Linux 명령줄 지식
  • Google Cloud의 네트워킹을 통해 GCP의 네트워킹 둘러보기를 완료하면 도움이 됩니다.
  • (선택사항) Cloudnet20 Cloud Armor 실습을 완료하여 SQL 삽입, IP 기반, 지역 기반 규칙으로 워크로드를 보호하는 방법을 알아봅니다.

Codelab 토폴로지 및 사용 사례

119e13312f3cec25.jpeg

그림 1 - Cloud Armor WAF 규칙 Codelab 토폴로지

OWASP Juice Shop 애플리케이션은 설계상 OWASP 상위 10개 보안 취약점의 인스턴스가 각각 포함되어 있으므로 보안 교육 및 인식에 유용합니다. 공격자가 테스트 목적으로 취약점을 악용할 수 있습니다. 이 Codelab에서는 이를 사용하여 몇 가지 애플리케이션 공격을 시연한 후 Cloud Armor WAF 규칙으로 애플리케이션을 보호합니다. 애플리케이션의 앞에 Cloud Armor 보안 정책 및 규칙이 적용되는 Google Cloud 부하 분산기가 있습니다. 공개 인터넷에서 제공되므로 거의 모든 곳에서 연결할 수 있으며 Cloud Armor 및 VPC 방화벽 규칙으로 보호됩니다.

2. 설정 및 요구사항

자습형 환경 설정

  1. Cloud 콘솔에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID라고 부릅니다.

  1. 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.

이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 신규 사용자에게는 미화$300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

bce75f34b2c53987.png

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

f6ef2b5f13479f3a.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 실습의 모든 작업은 브라우저만으로 수행할 수 있습니다.

시작하기 전에

Cloud Shell 내에서 프로젝트 ID가 설정되어 있는지 확인합니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $PROJECT_ID

API 사용 설정

필요한 모든 서비스 사용 설정

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com        
gcloud services enable monitoring.googleapis.com 

3. VPC 네트워크 만들기

VPC 네트워크 만들기

Cloud Shell 사용

gcloud compute networks create ca-lab-vpc --subnet-mode custom

출력

Created
NAME        SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
ca-lab-vpc  CUSTOM       REGIONAL

서브넷 만들기

Cloud Shell 사용

gcloud compute networks subnets create ca-lab-subnet \
        --network ca-lab-vpc --range 10.0.0.0/24 --region us-central1

출력

Created 
NAME           REGION       NETWORK       RANGE
ca-lab-subnet  us-central1  ca-lab-vpc    10.0.0.0/24

VPC 방화벽 규칙 만들기

VPC와 서브넷을 만든 후 이제 몇 가지 방화벽 규칙을 설정합니다. 첫 번째 방화벽 규칙은 모든 IP가 포트 3000에서 테스트 애플리케이션 웹사이트의 외부 IP에 액세스하도록 허용하는 데 사용됩니다. 두 번째 방화벽 규칙은 부하 분산기의 소스 IP에서 상태 확인을 허용하는 데 사용됩니다.

Cloud Shell 사용

gcloud compute firewall-rules create allow-js-site --allow tcp:3000 --network ca-lab-vpc

출력

Creating firewall...done.
NAME           NETWORK     DIRECTION  PRIORITY  ALLOW     DENY  DISABLED
allow-js-site  ca-lab-vpc  INGRESS    1000      tcp:3000        False

Google 상태 점검 범위에서 상태 점검을 허용하는 FW 규칙을 만듭니다.

Cloud Shell 사용

gcloud compute firewall-rules create allow-health-check \
    --network=ca-lab-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-healthcheck \
    --rules=tcp

출력

Creating firewall...done.
NAME                NETWORK     DIRECTION  PRIORITY  ALLOW  DENY  DISABLED
allow-health-check  ca-lab-vpc  INGRESS    1000      tcp          False

4. 테스트 애플리케이션 설정

다음 단계는 테스트 애플리케이션(이 경우 OWASP Juice Shop 웹 서버)을 만드는 것입니다.

컴퓨팅 인스턴스를 만들 때는 서버에 적절한 서비스가 제공되도록 컨테이너 이미지를 사용합니다. 이 서버는 us-central1-c에 배포되며 상태 점검을 허용하는 네트워크 태그가 포함됩니다.

OWASP Juice Shop 애플리케이션 만들기

잘 알려진 오픈소스 OWASP Juice Shop 애플리케이션을 취약한 애플리케이션으로 사용합니다. 이 애플리케이션을 사용하여 해당 웹사이트를 통해 OWASP 보안 문제를 수행할 수도 있습니다.

Cloud Shell 사용

gcloud compute instances create-with-container owasp-juice-shop-app --container-image bkimminich/juice-shop \
     --network ca-lab-vpc \
     --subnet ca-lab-subnet \
     --private-network-ip=10.0.0.3 \
     --machine-type n1-standard-2 \
     --zone us-central1-c \
     --tags allow-healthcheck

출력

NAME                  ZONE           MACHINE_TYPE   PREEMPTIBLE  
owasp-juice-shop-app  us-central1-c  n1-standard-2               

INTERNAL_IP  EXTERNAL_IP     STATUS
10.0.0.3     <public IP>     RUNNING

Cloud 부하 분산기 구성요소 설정: 인스턴스 그룹

비관리형 인스턴스 그룹을 만듭니다.

Cloud Shell 사용

gcloud compute instance-groups unmanaged create juice-shop-group \
    --zone=us-central1-c

출력

NAME              LOCATION       SCOPE  NETWORK  MANAGED  INSTANCES
juice-shop-group  us-central1-c  zone                     0

비관리형 인스턴스 그룹에 Juice Shop GCE 인스턴스를 추가합니다.

Cloud Shell 사용

gcloud compute instance-groups unmanaged add-instances juice-shop-group \
    --zone=us-central1-c \
    --instances=owasp-juice-shop-app

출력

Updated [https://www.googleapis.com/compute/v1/projects/<project name>/zones/us-central1-c/instanceGroups/juice-shop-group].

이름이 지정된 포트를 Juice Shop 애플리케이션의 포트로 설정합니다.

Cloud Shell 사용

gcloud compute instance-groups unmanaged set-named-ports \
juice-shop-group \
   --named-ports=http:3000 \
   --zone=us-central1-c

출력

Updated [https://www.googleapis.com/compute/v1/projects/<project name>/zones/us-central1-c/instanceGroups/juice-shop-group].

비관리형 인스턴스 그룹을 만들었으므로 다음 단계는 상태 점검, 백엔드 서비스, URL 맵, 대상 프록시, 전달 규칙을 만드는 것입니다.

Cloud 부하 분산기 구성요소 설정: 상태 점검

Juice Shop 서비스 포트의 상태 점검을 만듭니다.

Cloud Shell 사용

gcloud compute health-checks create tcp tcp-port-3000 \
        --port 3000

출력

Created 
NAME           PROTOCOL
tcp-port-3000  TCP

Cloud 부하 분산기 구성요소 설정: 백엔드 서비스

백엔드 서비스 매개변수를 만듭니다.

Cloud Shell 사용

gcloud compute backend-services create juice-shop-backend \
        --protocol HTTP \
        --port-name http \
        --health-checks tcp-port-3000 \
        --enable-logging \
        --global 

출력

NAME                BACKENDS  PROTOCOL
juice-shop-backend            HTTP

백엔드 서비스에 Juice Shop 인스턴스 그룹을 추가합니다.

Cloud Shell 사용

 gcloud compute backend-services add-backend juice-shop-backend \
        --instance-group=juice-shop-group \
        --instance-group-zone=us-central1-c \
        --global

출력

Updated [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/backendServices/juice-shop-backend].

Cloud 부하 분산기 구성요소: URL 맵을 설정합니다.

백엔드로 전송할 URL 맵을 만듭니다.

Cloud Shell 사용

gcloud compute url-maps create juice-shop-loadbalancer \
        --default-service juice-shop-backend

출력

NAME                     DEFAULT_SERVICE
juice-shop-loadbalancer  backendServices/juice-shop-backend

Cloud 부하 분산기 구성요소: 대상 프록시를 설정합니다.

URL 맵 앞에 대상 프록시를 만듭니다.

Cloud Shell 사용

gcloud compute target-http-proxies create juice-shop-proxy \
        --url-map juice-shop-loadbalancer

출력

NAME              URL_MAP
juice-shop-proxy  juice-shop-loadbalancer

Cloud 부하 분산기 구성요소 설정: 전달 규칙

부하 분산기의 전달 규칙을 만듭니다.

Cloud Shell 사용

gcloud compute forwarding-rules create juice-shop-rule \
        --global \
        --target-http-proxy=juice-shop-proxy \
        --ports=80

출력

Created [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/forwardingRules/juice-shop-rule].

Juice Shop 서비스가 온라인 상태인지 확인하기

Cloud Shell 사용

PUBLIC_SVC_IP="$(gcloud compute forwarding-rules describe juice-shop-rule  --global --format="value(IPAddress)")"

Cloud Shell 사용

echo $PUBLIC_SVC_IP

출력

<public VIP of service>

몇 분 정도 기다린 후에 계속 진행합니다. 그렇지 않으면 HTTP/1.1 404 Not Found 응답을 검색할 수 있습니다.

Cloud Shell 사용

curl -Ii http://$PUBLIC_SVC_IP

출력

HTTP/1.1 200 OK
<...>

브라우저로 이동하여 Juice Shop을 확인해 보세요.

428c18eee6708c28.png

이제 Juice Shop 취약점과 Cloud Armor WAF 규칙 세트로 이를 방지하는 방법을 살펴볼 준비가 되었습니다.

5. 알려진 취약점 입증

시간 절약을 위해 Cloud Armor WAF 규칙이 적용된 전후의 상태를 간략하게 보여줍니다.

LFI 취약점 관찰: 경로 순회

로컬 파일 포함은 요청의 입력 검증 부족을 이용하여 민감한 정보를 노출하는 방식으로 서버에 존재하는 파일을 관찰하는 프로세스입니다. 다음은 경로 순회가 가능함을 보여줍니다. 브라우저에서 또는 curl을 사용하여 애플리케이션이 제공하는 기존 경로를 관찰합니다.

Cloud Shell 사용

curl -Ii http://$PUBLIC_SVC_IP/ftp

출력

HTTP/1.1 200 OK
<...>

경로 순회도 작동하는지 확인합니다.

Cloud Shell 사용

curl -Ii http://$PUBLIC_SVC_IP/ftp/../

출력

HTTP/1.1 200 OK
<...>

RCE 취약점 관찰

원격 코드 실행에는 다양한 UNIX 및 Windows 명령 주입 시나리오가 포함되어 있어 공격자가 일반적으로 권한이 있는 사용자로 제한되는 OS 명령을 실행할 수 있습니다. 다음은 전달된 간단한 ls 명령어 실행을 보여줍니다.

Cloud Shell 사용

curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls

출력

HTTP/1.1 200 OK
<...>

curl 플래그를 삭제하면 전체 출력을 관찰할 수 있습니다.

잘 알려진 스캐너의 액세스 관찰

상용 및 오픈소스 모두 취약점 스캔을 포함한 다양한 목적으로 애플리케이션을 스캔합니다. 이러한 도구는 잘 알려진 사용자 에이전트 및 기타 헤더를 사용합니다. 잘 알려진 사용자 에이전트 헤더에서 curl이 작동하는지 확인합니다.

Cloud Shell 사용

curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"

출력

HTTP/1.1 200 OK
<...>

프로토콜 공격 관찰: HTTP 분할

일부 웹 애플리케이션은 사용자의 입력을 사용하여 응답에서 헤더를 생성합니다. 애플리케이션이 입력을 제대로 필터링하지 않으면 공격자가 시퀀스 %0d%0a (서로 다른 줄을 구분하는 데 사용되는 CRLF 시퀀스)로 입력 매개변수를 감염시킬 수 있습니다. 중개 프록시 서버와 같이 응답을 파싱하는 모든 경우에 응답이 두 개의 응답으로 해석될 수 있으며, 이 경우 후속 요청에서 잘못된 콘텐츠가 제공될 수 있습니다. 시퀀스 %0d%0a을(를) 입력 매개변수에 삽입합니다. 이 경우 사용자가 오해의 소지가 있는 페이지를 게재할 수 있습니다.

Cloud Shell 사용

curl -Ii "http://$PUBLIC_SVC_IP/index.html?foo=advanced%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2035%0d%0a%0d%0a<html>Sorry,%20System%20Down</html>"

출력

HTTP/1.1 200 OK
<...>

세션 고정 관찰

Cloud Shell 사용

curl -Ii http://$PUBLIC_SVC_IP -H session_id=X

출력

HTTP/1.1 200 OK
<...>

6. Cloud Armor WAF 규칙 정의

사전 구성된 WAF 규칙을 나열합니다.

Cloud Shell 사용

gcloud compute security-policies list-preconfigured-expression-sets

출력

EXPRESSION_SET
Sqli-canary
RULE_ID
    owasp-crs-v030001-id942110-sqli
    owasp-crs-v030001-id942120-sqli
<...>

Cloud Armor 보안 정책 만들기

Cloud Shell에서

gcloud compute security-policies create block-with-modsec-crs \
    --description "Block with OWASP ModSecurity CRS"

보안 정책 기본 규칙 업데이트

기본 규칙 우선순위의 숫자 값은 2147483647입니다.

Cloud Shell에서

gcloud compute security-policies rules update 2147483647 \
    --security-policy block-with-modsec-crs \
    --action "deny-403"

기본 규칙이 작업 거부로 구성되어 있으므로 IP에서 액세스를 허용해야 합니다. 공개 IP (curl, ipmonkey, whatismyip 등)를 확인하세요.

Cloud Shell에서

MY_IP=$(curl ifconfig.me)

내 IP에서 액세스를 허용하는 첫 번째 규칙을 추가합니다 (아래에 IP 삽입).

Cloud Shell에서

gcloud compute security-policies rules create 10000 \
    --security-policy  block-with-modsec-crs  \
    --description "allow traffic from my IP" \
    --src-ip-ranges "$MY_IP/32" \
    --action "allow"

보안 정책을 업데이트하여 LFI 공격 차단

로컬 파일 포함을 위한 경로 순회를 방지하는 OWASP ModSecurity Core Rule Set을 적용합니다.

Cloud Shell에서

gcloud compute security-policies rules create 9000 \
    --security-policy block-with-modsec-crs  \
    --description "block local file inclusion" \
     --expression "evaluatePreconfiguredExpr('lfi-stable')" \
    --action deny-403

원격 코드 실행 (rce)을 차단하도록 보안 정책 업데이트

OWASP ModSecurity Core Rule Set에 따라 명령 주입을 포함하여 rce를 찾는 규칙을 적용합니다. 일반적인 OS 명령어가 감지되고 차단됩니다.

Cloud Shell에서

gcloud compute security-policies rules create 9001 \
    --security-policy block-with-modsec-crs  \
    --description "block rce attacks" \
     --expression "evaluatePreconfiguredExpr('rce-stable')" \
    --action deny-403

보안 스캐너를 차단하기 위한 보안 정책 업데이트

OWASP ModSecurity Core Rule Set을 적용하여 잘 알려진 보안 스캐너, 스크립팅 HTTP 클라이언트 및 웹 크롤러를 차단합니다.

Cloud Shell에서

gcloud compute security-policies rules create 9002 \
    --security-policy block-with-modsec-crs  \
    --description "block scanners" \
     --expression "evaluatePreconfiguredExpr('scannerdetection-stable')" \
    --action deny-403

프로토콜 공격을 차단하도록 보안 정책 업데이트

OWASP ModSecurity Core Rule Set에 따라 캐리지 리턴(CR) %0d 및 라인피드(LF) %0a 문자 및 다른 유형의 프로토콜 공격(예: HTTP 요청 밀수)을 찾는 규칙을 적용합니다.

Cloud Shell에서

gcloud compute security-policies rules create 9003 \
    --security-policy block-with-modsec-crs  \
    --description "block protocol attacks" \
     --expression "evaluatePreconfiguredExpr('protocolattack-stable')" \
    --action deny-403

세션 고정을 차단하도록 보안 정책 업데이트

OWASP ModSecurity Core Rule Set에 따라 다음과 같은 규칙을 적용합니다.

Cloud Shell에서

gcloud compute security-policies rules create 9004 \
    --security-policy block-with-modsec-crs  \
    --description "block session fixation attacks" \
     --expression "evaluatePreconfiguredExpr('sessionfixation-stable')" \
    --action deny-403

백엔드 서비스에 보안 정책 연결

Cloud Shell에서

gcloud compute backend-services update juice-shop-backend \
    --security-policy block-with-modsec-crs \
    --global

규칙이 적용되는 데 다소 시간이 걸릴 수 있습니다 (10분 이내). 충분한 시간이 지났다고 확신하면 이전에 입증된 취약점을 테스트하여 다음 단계에서 Cloud Armor WAF 규칙 적용을 확인합니다.

7. OWASP ModSecurity 핵심 규칙 세트를 사용하여 Cloud Armor 보호 관찰

LFI 취약점이 완화되었는지 확인

Cloud Shell 사용

curl -Ii http://$PUBLIC_SVC_IP/?a=../

출력

HTTP/1.1 403 Forbidden
<...>

RCE 공격이 완화되었는지 확인

Cloud Shell 사용

curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls

출력

HTTP/1.1 403 Forbidden
<..>

잘 알려진 스캐너 감지 확인

Cloud Shell 사용

curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"

출력

HTTP/1.1 403 Forbidden
<..>

프로토콜 공격이 완화되었는지 확인

OWASP ModSecurity Core Rule Set ver.3.0.2에 따라 프로토콜 공격은

Cloud Shell 사용

curl -Ii "http://$PUBLIC_SVC_IP/index.html?foo=advanced%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2035%0d%0a%0d%0a<html>Sorry,%20System%20Down</html>"

출력

HTTP/1.1 403 Forbidden
<..>

세션 고정 시도가 차단되었는지 확인

Cloud Shell 사용

curl -Ii http://$PUBLIC_SVC_IP/?session_id=a

출력

HTTP/1.1 403 Forbidden
<..>

8. Cloud Armor 보안 규칙 검토

보안 정책을 만들었으므로 이제 정확히 어떤 규칙이 구성되었는지 살펴보겠습니다.

d00e4102fc89e44f.png

규칙은 우선순위에 따라 평가됩니다. 숫자가 낮을수록 먼저 평가되고 일단 트리거되면 우선순위 값이 더 높은 규칙은 처리가 계속되지 않습니다.

  • 우선순위 9000 - LFI 차단 (로컬 파일 포함)
  • 우선순위 9001 - RCE 차단 (원격 코드 실행/명령어 삽입)
  • 우선순위 9002 - 블록 스캐너 감지됨
  • 우선순위 9003 - HTTP 분할 및 HTTP 밀수와 같은 프로토콜 공격 차단
  • 우선 순위 9004 - 세션 고정 공격 차단
  • 우선순위 10000 - IP가 웹사이트에 액세스하도록 허용
  • 우선순위 기본값 - 거부

*'IP 주소 허용' 규칙이 사이트에 대한 액세스를 허용하도록 가장 높은 우선순위 번호로 구성되지만 모든 공격을 차단합니다.

9. Cloud Armor 보안 정책 로그 관찰

Cloud Armor 콘솔 페이지에서 보안 정책의 세부정보를 확인하고 Logs 탭을 클릭한 다음 View policy logs 링크를 클릭하면 Cloud Logging 페이지로 이동합니다. 관심 있는 보안 정책에 따라 자동으로 필터링합니다(예: resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(block-with-modsec-crs) 403 오류 응답 코드를 관찰하고 로그 세부정보를 펼쳐 적용된 보안 정책의 이름, 일치하는 필드 값, 사전 구성된 표현식 ID (또는 서명 ID)를 확인합니다. 다음 스크린샷은 이 Codelab에서 구성된 시행된 보안 정책의 로그 예를 보여줍니다.

LFI 로그

983a6cab0cff940d.png

RCE 로그

988a3a571f9d9d45.png

스캐너 감지 로그

7ed661863ba27555.png

프로토콜 공격 로그

17ee3cbe0bd98939.png

세션 고정 로그

80d1ddfd0fe982e1.png

10. 실습 정리

실습을 완료했으므로 이제 리소스를 삭제합니다.

다음 명령어를 실행하여 Cloud Armor 보안 정책, 부하 분산기, 인스턴스, 방화벽 규칙, VPC 네트워크를 삭제하세요.

백엔드 서비스에서 Cloud Armor 보안 정책 삭제

gcloud -q compute backend-services update juice-shop-backend --security-policy "" --global

Cloud Armor 보안 정책 삭제

보안 정책을 삭제하면 연결된 규칙이 자동으로 삭제됩니다.

gcloud -q compute security-policies delete block-with-modsec-crs

부하 분산기 리소스 삭제

삭제할 부하 분산기 리소스에는 전달 규칙, target-http-proxies, URL-maps, 백엔드, 상태 점검, 인스턴스 그룹이 포함됩니다.

gcloud -q compute forwarding-rules delete juice-shop-rule --global

gcloud -q compute target-http-proxies delete juice-shop-proxy

gcloud -q compute url-maps delete juice-shop-loadbalancer

gcloud -q compute backend-services delete juice-shop-backend \
    --global

gcloud -q compute health-checks delete tcp-port-3000

gcloud -q compute instance-groups unmanaged delete juice-shop-group --zone=us-central1-c

인스턴스 삭제

gcloud -q compute instances delete owasp-juice-shop-app --zone us-central1-c

방화벽 규칙, 서브넷, VPC 삭제

gcloud -q compute firewall-rules delete allow-health-check
gcloud -q compute firewall-rules delete allow-js-site
gcloud -q compute networks subnets delete ca-lab-subnet --region us-central1
gcloud -q compute networks delete ca-lab-vpc

11. 축하합니다.

축하합니다. Cloud Armor 사전 구성된 WAF 규칙 Codelab을 완료했습니다.

학습한 내용

  • 인스턴스 그룹 및 전역 Cloud 부하 분산기를 설정하는 방법
  • 사전 구성된 WAF 규칙으로 Cloud Armor 보안 정책을 구성하여 lfi, rce, 스캐너, 프로토콜 공격, 세션 고정으로부터 보호하는 방법
  • Cloud Armor가 로그를 통해 OWASP 상위 10개 공격 중 일부를 완화했는지 검증하는 방법

다음 단계