1. 소개
Cloud Armor 보안 정책은 사용자 정의 규칙을 구성하여 인프라의 업스트림인 Google 네트워크 에지에서 트래픽을 필터링하는 데 사용됩니다. 네트워크 에지 보안 정책을 사용하면 네트워크 부하 분산기, 프로토콜 전달, 공개 IP가 있는 VM 등의 엔드포인트 유형을 대상으로 하는 트래픽을 보호하고 허용 또는 차단할 수 있습니다.
이 Codelab에서는 DDoS 공격을 방지하기 위해 사용자 정의 규칙으로 Cloud Armor 보안 정책을 구성하는 방법을 보여줍니다.
그림 1. 공개 IP 보호 기능이 있는 VM용 Cloud Armor
학습할 내용
- 사용자 정의 규칙 구성이 포함된 Cloud Armor 보안 정책
- UDP 오프셋 구성 및 테스트
필요한 항목
- TCP/IP에 대한 지식
- Unix/Linux 명령줄에 관한 지식
2. 시작하기 전에
Cloud Shell 내에서 프로젝트 ID가 설정되어 있는지 확인합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. 대상 VPC 네트워크 만들기
다음 섹션에서는 VPC 네트워크 및 관련 네트워킹 구성을 설정합니다. Cloud Armor 네트워크 에지 보안 정책은 리전을 기반으로 하며 모든 관련 리소스는 asia-southeast1 리전에 설정됩니다.
VPC 네트워크
Cloud Shell 사용
gcloud compute networks create ca4nlb --project=$prodproject --subnet-mode=custom
서브넷 만들기
Cloud Shell 사용
gcloud compute networks subnets create ca4nlb-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=ca4nlb --region=asia-southeast1
방화벽 규칙을 만듭니다.
이 섹션에서는 예상되는 UDP 트래픽을 포트 10000에 허용하는 방화벽 규칙을 추가합니다.
Cloud Shell에서 다음 테스트를 위해 UDP 포트 10000을 여는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create ca4nlb-udp10000 --allow udp:10000 --network ca4nlb --source-ranges 0.0.0.0/0 --enable-logging
Cloud Shell에서 IAP가 VM 인스턴스에 연결하도록 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create ca4nlb-iap-prod --network ca4nlb --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
4. 대상 VM 인스턴스 만들기
보안 정책 테스트를 위한 대상 VM 만들기 이 VM에는 공개 IP 주소가 있어야 하며 UDP 포트 10000을 열어야 합니다.
Cloud Shell에서 targetvm 인스턴스 만들기
gcloud compute instances create targetvm \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=ca4nlb-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring
5. 고급 네트워크 DDoS 보호 구성
Cloud Shell 사용
gcloud compute security-policies create ca_advanced_ddos \ --type CLOUD_ARMOR_NETWORK \ --region asia-southeast1 gcloud compute security-policies update ca_advanced_ddos \ --network-ddos-protection ADVANCED \ --region asia-southeast1 gcloud compute network-edge-security-services create caedgepolicy \ --security-policy ca_advanced_ddos \ --region asia-southeast1
6. 기본 규칙으로 네트워크 에지 보안 정책 만들기
네트워크 에지 보안 정책 만들기
Cloud Shell 사용
gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1
기본 규칙 수정
Cloud Shell 사용
gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1
7. 사용된 구성된 규칙으로 네트워크 에지 보안 정책 만들기
사용자가 사전 정의된 UDP 오프셋이며 Cloud Armor 정책에서 구성되었습니다. 이 '오프셋 값'이 있는 패킷 정책 검사를 전달하여 백엔드 VM으로 전송합니다. 다음 예에서는 두 개의 'offset'을 정의합니다. 다른 값을 사용할 수 있습니다.
첫 번째 값은 UDP 헤더 바로 뒤, 2바이트와 정확히 일치함 0x1700
두 번째 값은 UDP 헤더의 8바이트 오프셋이며 4바이트와 정확하게 일치합니다.0x12345678
사전 정의된 값보다 큰 값은 UDP 패킷 비트 뷰로 변환됩니다.
Cloud Shell 사용
gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG1_AT_0 \ --base=udp --offset=8 --size=2 --mask=0xFF00 \ --region=asia-southeast1 gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG2_AT_8 \ --base=udp --offset=16 --size=4 --mask=0xFFFFFFFF \ --region=asia-southeast1 gcloud alpha compute security-policies rules create 1000 \ --security-policy=customnetworkedge \ --network-user-defined-fields="SIG1_AT_0;0x1700,SIG2_AT_8;0x12345678" \ --action=allow --region=asia-southeast1
8. 대상 VM에 보안 정책 연결
Cloud Shell에서 보호된 VM에 보안 정책을 연결합니다.
gcloud alpha compute instances network-interfaces update targetvm \ --security-policy=customnetworkedge \ --security-policy-region=asia-southeast1 \ --network-interface=nic0 \ --zone=asia-southeast1-b
Cloud Shell에서 대상 VM을 설명하면 securityPolicy가 연결된 것을 확인할 수 있습니다. 다음 테스트를 위해 공개 IP를 기록합니다.
gcloud alpha compute instances describe targetvm --zone=asia-southeast1-b networkInterfaces: - accessConfigs: - kind: compute#accessConfig name: External NAT natIP: 35.240.148.100 networkTier: PREMIUM securityPolicy: https://www.googleapis.com/compute/alpha/projects/<project>/regions/asia-southeast1/securityPolicies/customnetworkedge
Cloud Shell에서 보호되는 VM에서 보안 정책을 분리합니다.
gcloud alpha compute instances network-interfaces update targetvm \ --network-interface=nic0 \ --zone=asia-southeast1-b \ --security-policy=
9. 테스트 리소스 준비
테스트 VPC 네트워크 만들기
Cloud Shell 사용
gcloud compute networks create test --project=$prodproject --subnet-mode=custom
테스트 서브넷 만들기
Cloud Shell 사용
gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1
방화벽 만들기
Cloud Shell에서 IAP가 VM 인스턴스에 연결하도록 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create test-iap-prod --network test --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
테스트 VM 만들기
Cloud Shell 사용
gcloud compute instances create test01 \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=test-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring
10. 인증
테스트 VM 콘솔에 로그인하고 패킷 생성기 packit
을 설치합니다.
sudo apt install packit
UDP 오프셋 설계에 따라packit을 사용하여 UDP 패킷을 생성합니다. 소스 포트 (-S 10000)를 사용하여 인터페이스 (-s ens4) 소스 IP 주소 (-s 10.0.1.2)의 (-t udp) 패킷을 대상 포트 (-D 10000)를 사용하여 대상 VM 대상 IP 주소 (-d 35.240.148.100)로 시뮬레이션합니다. 패킷 콘텐츠가 값 (-p ‘0x 17 00 00 00 00 00 00 00 12 34 56 78')과 일치합니다. 우리는 (-c 4) 패킷을 보낼 것입니다.
sudo packit -m inject -t UDP -i ens4 -s 10.0.1.2 -d 35.240.148.100 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 4
대상 VM에서 tcpdump를 실행하여 UDP 패킷을 캡처합니다.
sudo tcpdump port 10000 -v -n tcpdump: listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes 06:36:18.434106 IP (tos 0x0, ttl 128, id 17173, offset 0, flags [none], proto UDP (17), length 40) 35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12 06:36:19.433656 IP (tos 0x0, ttl 128, id 55641, offset 0, flags [none], proto UDP (17), length 40) 35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12 06:36:20.433935 IP (tos 0x0, ttl 128, id 27161, offset 0, flags [none], proto UDP (17), length 40) 35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12 06:36:21.434150 IP (tos 0x0, ttl 128, id 46782, offset 0, flags [none], proto UDP (17), length 40) 35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
테스트 VM에서 트래픽 패턴을 변경하면 대상 VM에서 패킷을 캡처할 수 없습니다.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 33 33 00 00 00 00 00 00 12 34 56 78' -c 4
11. 원격 분석
Cloud 측정항목을 열고 MQL 아래 MQL을 사용하여 NetworkSercurityPolicy 원격 분석 데이터를 쿼리합니다.
fetch networksecurity.googleapis.com/RegionalNetworkSecurityPolicy | metric 'networksecurity.googleapis.com/l3/external/packet_count' | filter (resource.policy_name == 'customnetworkedge') | align rate(1m) | every 1m | group_by [metric.blocked], [value_packet_count_mean: mean(value.packet_count)] | group_by 1m, [value_packet_count_mean_mean: mean(value_packet_count_mean)] | every 1m
오프셋 일치 명령어로 대용량 트래픽을 생성합니다.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
일치하지 않는 오프셋 명령어를 사용하여 대용량 트래픽을 생성합니다.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 11 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
원격 분석이 policy_name으로 필터링되고 차단됨으로 그룹화됩니다. 파란색 선은 정책 규칙에서 허용되는 트래픽을 나타냅니다. 녹색 선은 정책 규칙에 의해 차단된 트래픽을 나타냅니다.
12. 정리 단계
터미널의 단일 Cloud Shell에서 실습 구성요소를 삭제합니다.
gcloud compute instances delete targetvm --zone=asia-southeast1-b gcloud compute firewall-rules delete ca4nlb-udp10000 gcloud compute firewall-rules delete ca4nlb-iap-prod gcloud compute networks subnets delete ca4nlb-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete ca4nlb gcloud alpha compute security-policies delete customnetworkedge --region=asia-southeast1 gcloud alpha compute network-edge-security-services delete caedgepolicy --region=asia-southeast1 gcloud alpha compute security-policies delete ca_advanced_ddos --region=asia-southeast1 gcloud compute instances delete test01 --zone=asia-southeast1-b gcloud compute firewall-rules delete test-iap-prod gcloud compute networks subnets delete test-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete test
13. 축하합니다.
축하합니다. Codelab을 완료했습니다.
학습한 내용
- 고객이 정의한 규칙이 포함된 Cloud Armor 보안 정책