1. 소개
Google Cloud Armor의 명명된 IP 주소 목록을 사용하면 서드 파티 제공업체에서 유지관리하는 IP 주소 및 IP 범위 목록을 참조할 수 있습니다. 보안 정책 내에서 명명된 IP 주소 목록을 구성할 수 있습니다. 각 IP 주소나 IP 범위를 개별적으로 직접 지정할 필요가 없습니다.
학습할 내용
- Cloud Armor의 명명된 IP 주소 목록의 이점
- Cloud Armor 보안 정책 만들기
- Cloud Armor의 명명된 IP 주소 목록 배포
- 전역 부하 분산기 만들기
- 샘플 테스트 애플리케이션으로 관리형 인스턴스 그룹 만들기
필요한 항목
- 보안 정책 및 부하 분산기 관련 경험
2. 허용된 타사 제공업체의 트래픽만 허용
일반적인 사용 사례는 허용된 서드 파티 파트너의 IP 주소가 포함된 허용 목록을 만들어 이 파트너에서 유입되는 트래픽만 부하 분산기와 백엔드에 액세스할 수 있도록 하는 것입니다.
예를 들어 CDN 제공업체는 일정한 간격으로 원본 서버에서 콘텐츠를 가져와 자체 캐시에 배포해야 합니다. Google과의 파트너십을 통해 CDN 제공업체와 Google 네트워크 에지를 직접 연결할 수 있습니다. Google Cloud의 CDN 사용자는 원본 가져오기 중에 이 직접 연결을 사용할 수 있습니다. 이 경우 CDN 사용자는 특정 CDN 제공업체에서 들어오는 트래픽만 허용하는 보안 정책을 구축할 수 있습니다.
이 예에서 CDN 제공업체는 IP 주소 목록 23.235.32.0/20, 43.249.72.0/22, 로그를 게시합니다. CDN 사용자가 이러한 IP 주소에서 들어오는 트래픽만 허용하는 보안 규칙을 구성합니다. 따라서 두 개의 CDN 제공업체 액세스 포인트 (23.235.32.10 및 43.249.72.10)가 허용되고 트래픽이 허용됩니다. 승인되지 않은 액세스 포인트 198.51.100.1의 트래픽이 차단됩니다.
Google Cloud Armor의 명명된 IP 주소
3. 사전 구성된 규칙을 사용하여 구성 및 관리 간소화
CDN 제공업체는 잘 알려져 있고 많은 CDN 사용자가 사용해야 하는 IP 주소를 사용하는 경우가 많습니다. 이러한 목록은 시간이 지남에 따라 제공업체가 IP 주소를 추가, 삭제, 업데이트함에 따라 변경됩니다.
Google Cloud Armor는 매일 CDN 제공업체의 정보를 자동으로 동기화하므로 보안 정책 규칙에 명명된 IP 주소 목록을 사용하면 IP 주소를 구성하고 관리하는 프로세스가 간소화됩니다. 이렇게 하면 시간이 오래 걸리고 오류가 발생하기 쉬운 대규모 IP 주소 목록을 수동으로 유지관리해야 하는 프로세스를 없앨 수 있습니다.
IP 주소 목록 제공업체
다음 표의 IP 주소 목록 제공업체는 Google Cloud Armor에 지원됩니다. 다음은 Google과 파트너십을 맺은 CDN 제공업체입니다. 이러한 제공업체의 IP 주소 목록은 개별 공개 URL을 통해 게시됩니다.
이러한 제공업체는 IPv4 주소 목록과 IPv6 주소 목록을 별도로 제공합니다. Google Cloud Armor는 제공된 URL을 사용하여 목록을 가져온 후 목록을 명명된 IP 주소 목록으로 변환합니다. 표에 있는 이름으로 목록을 참조합니다.
또는 Cloud Shell을 사용하여 사전 구성된 명명된 IP 주소 목록의 목록을 가져옵니다.
Cloud Shell에 로그인하여 프로젝트 ID 설정
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] Perform setting your projectID: projectid=YOUR-PROJECT-ID echo $projectid
Cloud Shell에서
gcloud compute security-policies list-preconfigured-expression-sets \ --filter="id:sourceiplist"
이는 다음을 반환합니다.
EXPRESSION_SET sourceiplist-fastly sourceiplist-cloudflare sourceiplist-imperva
4. Codelab 토폴로지
5. 설정 및 요구사항
자습형 환경 설정
- Cloud 콘솔에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID
라고 부릅니다.
- 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.
이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 신규 사용자에게는 미화$300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.
가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 실습의 모든 작업은 브라우저만으로 수행할 수 있습니다.
6. VPC 네트워크 만들기
VPC 네트워크
Cloud Shell 사용
gcloud compute networks create
named-list-vpc
--subnet-mode custom
서브넷 만들기
Cloud Shell 사용
gcloud compute networks subnets create named-ip-subnet \ --network
named-list-vpc
--range 10.0.0.0/24 --region us-east1
방화벽 규칙 만들기
Cloud Shell 사용
gcloud compute --project=$projectid firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0
gcloud compute --project=$projectid firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16
부하 분산기 만들기
인스턴스 템플릿 만들기
Cloud Shell 사용
gcloud beta compute --project=$projectid instance-templates create us-east1-template --machine-type=e2-medium --subnet=projects/$projectid/regions/us-east1/subnetworks/named-ip-subnet --network-tier=PREMIUM --metadata=startup-script-url=gs://cloud-training/gcpnet/httplb/startup.sh --maintenance-policy=MIGRATE --image=debian-10-buster-v20210217 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=us-east1-template --no-shielded-secure-boot --no-shielded-vtpm --no-shielded-integrity-monitoring --reservation-affinity=any
관리형 인스턴스 그룹 만들기
Cloud Shell 사용
gcloud compute --project=$projectid instance-groups managed create us-east1-mig --base-instance-name=us-east1-mig --template=us-east1-template --size=1 --zone=us-east1-b
7. 백엔드 확인
VM 인스턴스가 두 리전에서 모두 만들어지고 있는지 확인하고 해당 HTTP 사이트에 액세스합니다.
- Compute Engine의 왼쪽 메뉴에서 VM 인스턴스를 클릭합니다.
- us-east1-mig로 시작하는 인스턴스를 확인합니다. 이러한 인스턴스는 관리형 인스턴스 그룹의 일부입니다.
- us-east1-mig 인스턴스의 외부 IP를 클릭합니다. 클라이언트 IP (IP 주소)와 호스트 이름 (us-east1-mig로 시작)이 표시되어야 합니다.
HTTP 부하 분산기 구성
- Cloud 콘솔에서 탐색 메뉴 ( ) > 네트워크 서비스를 클릭합니다. '부하 분산기 만들기'를 클릭합니다
- HTTP(S) 부하 분산에서 '구성 시작'을 클릭합니다.
- '인터넷 트래픽을 VM으로 분산'을 선택하고 '계속'을 클릭합니다.
- 이름을 http-lb로 설정합니다.
백엔드 구성
백엔드 서비스는 수신 트래픽을 하나 이상의 연결된 백엔드에 전달합니다. 각 백엔드는 인스턴스 그룹과 추가 제공 용량 메타데이터로 구성됩니다.
- 백엔드 구성을 클릭합니다.
- 백엔드 서비스 및 '만들기'를 클릭하고 '백엔드 서비스'를 선택한 다음 백엔드 버킷을 클릭하고 백엔드 서비스를 클릭한 다음 '백엔드 서비스 만들기'를 클릭하세요.
- 백엔드 유형은 인스턴스 그룹입니다.
- 다음 값을 설정하고 나머지 값은 모두 기본값으로 유지합니다.
- 완료를 클릭합니다.
- 상태 점검에서 '상태 점검 만들기'를 선택합니다.
- 다음 값을 설정하고 나머지 값은 모두 기본값으로 유지합니다.
- 저장하고 계속하기를 클릭합니다.
- '만들기'를 클릭하여 백엔드 서비스를 만듭니다.
프런트엔드 구성
호스트 및 경로 규칙은 트래픽의 전달 방식을 결정합니다. 예를 들어 동영상 트래픽을 한 백엔드에 전달하고 정적 트래픽은 다른 백엔드로 전달할 수 있습니다. 그러나 이 실습에서는 호스트 및 경로 규칙을 구성하지 않습니다.
- 프런트엔드 구성을 클릭합니다.
- http-front-end
- 다음을 지정하고 다른 모든 값은 기본값인 로 둡니다.
- 완료를 클릭합니다.
8. HTTP 부하 분산기 검토 및 만들기
- '검토 및 완료'를 클릭합니다.
- 백엔드 서비스와 프런트엔드를 검토합니다.
- '만들기'를 클릭합니다.
- 부하 분산기가 생성될 때까지 몇 분 정도 기다립니다.
- 부하 분산기의 이름 (http-lb)을 클릭합니다.
- 다음 작업을 위한 부하 분산기의 IPv4 주소(http-lb라고 함)를 확인합니다.
9. 무단 액세스 성공 여부 확인
명명된 IP 주소 정책을 구현하기 전에 실습 분산기 및 후속 웹 애플리케이션에 대한 무단 액세스가 성공적인지 확인합니다. 명명된 IP 주소 정책이 구현되면 웹 애플리케이션에 대한 액세스가 프로비저닝된 표현식 세트로 제한됩니다.
- 이전 단계에서 만든 부하 분산기 IP 주소 (http-lb)를 확인하고 웹브라우저에 붙여넣습니다. 출력은 아래 스크린샷과 유사합니다.
참고: 이 단계는 몇 분 정도 걸립니다. 웹페이지가 생성되면 클라이언트 IP를 워크스테이션 IP가 아닌 Google 프런트엔드에서 가져옵니다.
워크스테이션에서 아래에 표시된 것과 유사한 유효성 검사를 수행합니다.
bash-3.2$ curl <load-balancer-IP>
10. 출력 예
bash-3.2$ curl <load-balancer-ip> <h1>HTTP Load Balancing Lab</h1><h2>Client IP</h2>Your IP address : 35.191.0.151<h2>Hostname</h2>Server Hostname: us-east1-mig-8nqq<h2>Server Location</h2>Region and Zone: us-east1-b
11. 명명된 IP 목록 구성
명명된 IP 목록의 새 Cloud Amour 정책 만들기
Cloud Shell 사용
gcloud compute --project=$projectid security-policies create ca-policy
Cloud Shell 사용
gcloud compute --project=$projectid security-policies rules update 2147483647 --action=deny-403 --security-policy=ca-policy --description="Default rule, higher priority overrides it" --src-ip-ranges=\*
사용 가능한 CDN 명명된 IP 목록 주소를 식별합니다.
Cloud Shell 사용
gcloud compute security-policies list-preconfigured-expression-sets \ --filter="id:sourceiplist"
이는 다음을 반환합니다.
EXPRESSION_SET sourceiplist-fastly sourceiplist-cloudflare sourceiplist-imperva
Cloud Shell에서 CDN 사용 가능한 표현식 세트를 기준으로 명명된 IP 주소 목록을 구성합니다.
gcloud beta compute security-policies rules create 600 \ --security-policy ca-policy \ --expression "evaluatePreconfiguredExpr('expression_set')" \ --action "allow"
cloudflare 사용 예
gcloud beta compute security-policies rules create 600 \ --security-policy ca-policy \ --expression "evaluatePreconfiguredExpr('sourceiplist-cloudflare')" \ --action "allow"
12. CA 보안 정책 적용
CA 보안 정책을 적용하고 전역 정책 전파를 위해 몇 분 대기
gcloud compute backend-services update http-backend --security-policy ca-policy --global
13. 명명된 IP 주소 검증
- 보안 정책이 구현되었으므로 워크스테이션에서 부하 분산기에 대한 액세스가 승인되지 않습니다.
- 검증하려면 워크스테이션에서 터미널 창을 열고 부하 분산기 IP 주소에 대해 curl을 수행합니다. curl의 출력은 '403'을 반환합니다. 이제 워크스테이션이 승인되지 않으므로 금지된 오류입니다.
워크스테이션에서
bash-3.2$ curl <load-balancer-IP> <!doctype html><meta charset="utf-8"><meta name=viewport content="width=device-width, initial-scale=1"><title>403</title>403 Forbidden
정리 단계
gcloud -q compute backend-services update http-backend --security-policy "" --global gcloud -q compute --project=$projectid security-policies delete ca-policy gcloud -q compute forwarding-rules delete http-front-end --global gcloud -q compute target-http-proxies delete http-lb-target-proxy gcloud -q compute url-maps delete http-lb gcloud -q compute backend-services delete http-backend --global gcloud -q compute health-checks delete http-health-check gcloud -q compute --project=$projectid instance-groups managed delete us-east1-mig --zone=us-east1-b gcloud -q beta compute --project=$projectid instance-templates delete us-east1-template gcloud -q compute --project=$projectid firewall-rules delete default-allow-http gcloud -q compute --project=$projectid firewall-rules delete default-allow-health-check gcloud -q compute networks subnets delete named-ip-subnet --region us-east1 gcloud -q compute networks delete named-list-vpc
14. 축하합니다.
축하합니다. Codelab을 완료했습니다.
학습한 내용
- Cloud Armor의 명명된 IP 주소 목록의 이점
- 전역 부하 분산기 만들기
- 샘플 테스트 애플리케이션으로 관리형 인스턴스 그룹 만들기
- Cloud Armor 보안 정책 만들기
- Cloud Armor의 명명된 IP 주소 목록 배포
- 명명된 IP Cloud Armor 정책 검증