1. 소개 및 개요
Infoblox 기반의 DNS Armor는 Google Cloud 워크로드에 DNS 계층 보안을 제공하는 완전 관리형 서비스입니다. 고급 위협 감지기는 운영 복잡성이나 성능 오버헤드를 추가하지 않고 공격 체인의 가장 초기 지점인 DNS 쿼리에서 악의적인 활동을 감지하도록 설계되었습니다.
이 Codelab에서는 DNS Armor 서비스를 구성하고 테스트하는 단계별 안내를 제공합니다. 필요한 네트워크 인프라를 설정하고, 위협 감지기를 만들고, DNS 위협을 시뮬레이션하여 서비스를 테스트하고, 마지막으로 커스텀 Cloud Monitoring 대시보드를 사용하여 위협 로그를 시각화하고 분석합니다.
빌드할 항목
이 Codelab에서는 다음 리소스를 프로비저닝합니다.
us-east4및us-central1리전에 서브넷과 가상 머신이 프로비저닝된 VPC 네트워크 (network-a) 1개- DNS 쿼리를 검사하도록 구성된 DNS Armor 고급 위협 감지기
- DNS 위협 로그를 기반으로 하는 로그 기반 측정항목입니다.
- DNS 위협 로그를 시각화하는 맞춤 대시보드

학습할 내용
- VPC 및 가상 머신을 비롯한 필수 네트워킹 리소스를 프로비저닝하는 방법
- 고급 위협 감지기를 배포하고 특정 네트워크를 제외하는 방법
- 위협 시뮬레이션 스크립트를 사용하여 위협 감지 구성을 검증하는 방법
- 로그 기반 측정항목 및 커스텀 대시보드를 사용하여 DNS 위협 로그를 시각화하는 방법
필요한 항목
- Google Cloud 프로젝트
gcloud명령줄 도구에 대한 액세스 권한
2. 기본 요건
이 섹션에서는 다음 태스크를 수행합니다.
- Google Cloud 프로젝트가 필요한 조직 정책 제약 조건을 충족하는지 확인합니다.
- 사용자 계정에 필요한 IAM 역할과 권한이 있는지 확인합니다.
- 이 Codelab에 필수적인 Google Cloud API를 사용 설정합니다.
- Compute Engine 서비스 계정에
roles/logging.viewerIAM 역할을 할당합니다.
조직 정책 제약 조건
이 Codelab을 성공적으로 완료하려면 프로젝트에 적용된 조직 정책 제약 조건을 확인하세요. 특정 정책은 필요한 리소스의 프로비저닝을 방해할 수 있습니다. 다음 제약 조건은 이 Codelab의 구성에 영향을 줄 수 있습니다.
constraints/gcp.resourceLocations: 리소스를 만들 수 있는 리전을 제한합니다. Codelab에는us-east4및us-central1가 필요합니다.constraints/compute.vmExternalIpAccess: Codelab의--no-address플래그 사용을 따르지 않는 경우 설정에 방해가 될 수 있는 공개 IP 주소가 있는 가상 머신이 생성되지 않도록 합니다 .constraints/compute.shieldedVm: Codelab의 VM 생성 명령어에서 지정하지 않는 보안 VM의 생성을 강제하여 오류가 발생할 수 있습니다.constraints/gcp.restrictServiceUsage: 사용 설정할 수 있는 Google Cloud API를 제한하며,compute.googleapis.com,networksecurity.googleapis.com,logging.googleapis.com,monitoring.googleapis.com를 허용하지 않으면 Codelab이 차단될 수 있습니다.
IAM 역할 및 권한
이 Codelab을 완료하려면 사용자에게 부여된 IAM 역할과 권한을 확인하세요. 이 Codelab을 완료하려면 다음 IAM 역할과 권한이 필요합니다.
- 서비스 사용량 관리자 (
roles/serviceusage.serviceUsageAdmin): Codelab에 필요한 Google Cloud API를 사용 설정합니다. - Compute 네트워크 관리자 (
roles/compute.networkAdmin): VPC 네트워크, 서브넷, Cloud NAT를 만들고 관리합니다. - Compute 보안 관리자 (
roles/compute.securityAdmin): 가상 머신에 대한 SSH 액세스를 위한 방화벽 규칙을 구성합니다. - Compute 인스턴스 관리자 (v1) (
roles/compute.instanceAdmin.v1): 실습에 필요한 가상 머신을 만들고 관리합니다. - IAP 보안 터널 사용자 (
roles/iap.tunnelResourceAccessor): Identity-Aware Proxy (IAP)를 통해 SSH를 사용하여 가상 머신에 연결합니다. - 네트워크 보안 관리자 (
roles/networksecurity.admin): DNS Armor 위협 감지기를 만들고 관리합니다. - 로그 뷰어 (
roles/logging.viewer): 로그 탐색기에서 위협 로그를 보고 분석합니다.
Google Cloud API
프로젝트에서 필요한 Google Cloud API가 사용 설정되어 있는지 확인하세요.
1. 필요한 API를 사용 설정하려면 Cloud Shell 내에서 다음 gcloud 명령어를 실행합니다.
gcloud services enable compute.googleapis.com \
networksecurity.googleapis.com \
logging.googleapis.com \
monitoring.googleapis.com
2. API가 사용 설정되었는지 확인하려면 Cloud Shell 내에서 다음 gcloud 명령어를 실행합니다.
gcloud services list --enabled
Compute Engine 서비스 계정
위협 시뮬레이션 스크립트에는 Cloud Logging에서 생성된 위협 로그를 읽고 보고할 수 있는 권한이 필요합니다. 스크립트는 기본 Compute Engine 서비스 계정을 사용하는 VM에서 실행되므로 이 서비스 계정에 roles/logging.viewer IAM 역할을 할당해야 합니다.
1. 환경 변수를 설정하려면 Cloud Shell 내에서 다음 명령어를 실행합니다.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
2. Compute Engine SA에 로깅 뷰어 역할을 부여합니다. Cloud Shell 내에서 다음 gcloud 명령어를 실행합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/logging.viewer"
3. 네트워크 및 컴퓨팅 리소스 프로비저닝
이 섹션에서는 다음 태스크를 수행합니다.
- 커스텀 서브넷으로 VPC 네트워크
network-a를 만듭니다. network-a에서 인터넷 이그레스를 위해 Cloud Router 및 Cloud NAT를 구성합니다.network-a의 IAP IP 범위에서 VM에 대한 SSH 액세스를 허용하는 방화벽 규칙을 만듭니다.- 공개 IP 주소 없이
network-a에 Linux 가상 머신을 프로비저닝합니다.
VPC 및 서브넷 만들기
1. us-east4 및 us-central1 리전에 network-a와 해당 서브넷을 만듭니다. Cloud Shell 내에서 다음 gcloud 명령어를 실행합니다.
gcloud compute networks create network-a --subnet-mode=custom
gcloud compute networks subnets create subnet-a-use4 \
--network=network-a \
--range=10.10.0.0/24 \
--region=us-east4
gcloud compute networks subnets create subnet-a-usc1 \
--network=network-a \
--range=10.10.1.0/24 \
--region=us-central1
인터넷 이그레스 구성
1. 공개 IP가 없는 VM의 인터넷 이그레스를 허용하도록 network-a용 Cloud Router 및 Cloud NAT를 만듭니다.
gcloud compute routers create router-a-use4 \
--network=network-a \
--region=us-east4
gcloud compute routers nats create nat-a-use4 \
--router=router-a-use4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-east4
gcloud compute routers create router-a-usc1 \
--network=network-a \
--region=us-central1
gcloud compute routers nats create nat-a-usc1 \
--router=router-a-usc1 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-central1
방화벽 규칙 구성
1. network-a에 대한 방화벽 규칙을 만들어 IAP의 IP 범위에서 SSH 액세스를 허용합니다. Cloud Shell 내에서 다음 gcloud 명령어를 실행합니다.
gcloud compute firewall-rules create allow-ssh-iap-a \
--network=network-a \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20
가상 머신 만들기
1. network-a.에서 Linux VM 만들기
gcloud compute instances create vm-a-use4 \
--zone=us-east4-c \
--network=network-a \
--subnet=subnet-a-use4 \
--no-address \
--scopes=cloud-platform
gcloud compute instances create vm-a-usc1 \
--zone=us-central1-a \
--network=network-a \
--subnet=subnet-a-usc1 \
--no-address \
--scopes=cloud-platform
4. DNS 위협 감지기 만들기
이 섹션에서는 다음 태스크를 수행합니다.
- 위협 감지기를 만듭니다.
- 위협 감지기를 나열합니다.
이제 VPC, 서브넷, 가상 머신이 프로비저닝되었으므로 다음 단계는 DNS 위협 감지기를 만드는 것입니다.
1. gcloud beta network-security dns-threat-detectors create 명령어를 사용하여 위협 감지기를 만듭니다.
gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--provider=infoblox
2. 위협 감지기를 나열하여 생성을 확인합니다.
gcloud beta network-security dns-threat-detectors list --location=global
5. 로그 기반 측정항목 만들기
이 섹션에서는 다음 태스크를 수행합니다.
- 로그 항목 이해
config.yaml파일을 생성합니다.- 로그 기반 측정항목을 만듭니다.
1. 로그 항목을 이해합니다. 위협 로그 문서에서 DNS Armor 로그의 모든 필드 표를 검토할 수 있습니다. 이 섹션에서는 로그 기반 측정항목을 만드는 데 사용되는 특정 필드에 중점을 둡니다.
다음 필드는 로그 기반 측정항목을 만드는 데 사용됩니다.
- vmInstanceId: Compute Engine VM에서 시작한 쿼리에만 적용되는 Compute Engine VM 인스턴스 이름입니다.
- queryName: DNS 쿼리 이름입니다.
- severity: 감지된 위협과 관련된 심각도 (높음, 중간, 낮음 또는 정보)입니다. 자세한 내용은 Infoblox의 심각도 수준 정의를 참고하세요.
- location: 응답이 제공된 Google Cloud 리전입니다.
- threat: 감지된 위협의 이름입니다.
- threatId: 고유 위협 식별자입니다.
2. config.yaml 파일을 만듭니다. 먼저 touch 명령어를 사용하여 빈 config.yaml 파일을 만듭니다.
touch config.yaml
3. config.yaml 파일을 채웁니다. 이 파일은 DNS Armor 위협 로그의 로그 기반 측정항목을 만드는 방법을 정의합니다. 필터링할 로그 항목, 해당 항목에서 추출할 라벨, 측정항목 자체의 속성을 지정합니다.
원하는 텍스트 편집기에서 config.yaml 파일을 열고 다음 콘텐츠를 붙여넣습니다.
filter: |
resource.type="networksecurity.googleapis.com/DnsThreatDetector"
jsonPayload.dnsQuery.projectNumber="PROJECT_NUMBER"
labelExtractors:
InstanceId: EXTRACT(jsonPayload.dnsQuery.vmInstanceId)
QueryName: EXTRACT(jsonPayload.dnsQuery.queryName)
Severity: EXTRACT(jsonPayload.threatInfo.severity)
region: EXTRACT(jsonPayload.dnsQuery.location)
threat: EXTRACT(jsonPayload.threatInfo.threat)
threatId: EXTRACT(jsonPayload.threatInfo.threatId)
metricDescriptor:
labels:
- key: InstanceId
- key: threat
- key: Severity
- key: threatId
- key: region
- key: QueryName
metricKind: DELTA
unit: '1'
valueType: INT64
4. 프로젝트 번호를 업데이트합니다. 다음 sed 명령어를 사용하여 PROJECT_NUMBER 자리표시자를 환경 변수의 값으로 바꿉니다.
sed -i "s/PROJECT_NUMBER/$PROJECT_NUMBER/g" config.yaml
5. 로그 기반 측정항목을 만듭니다. 마지막으로 Cloud Shell 내에서 다음 gcloud 명령어를 실행하여 측정항목을 만듭니다.
gcloud logging metrics create dns-armor-log-based-metric --config-from-file=config.yaml
6. 커스텀 대시보드 만들기
이 섹션에서는 다음 태스크를 수행합니다.
dashboard.json파일을 생성합니다.- 맞춤 대시보드 만들기
1. dashboard.json 파일을 만듭니다. 먼저 touch 명령어를 사용하여 빈 dashboard.json 파일을 만듭니다.
touch dashboard.json
2. dashboard.json 파일을 채웁니다. dashboard.json 파일은 위젯, 표시 속성, 로그 기반 측정항목의 시각화, 집계, 필터링 방식을 정의하여 맞춤 모니터링 대시보드를 구성합니다.
원하는 텍스트 편집기에서 dashboard.json 파일을 열고 다음 콘텐츠를 붙여넣습니다.
{
"displayName": "DNS Armor - Custom Dashboard",
"dashboardFilters": [],
"description": "",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 20,
"width": 24,
"widget": {
"title": "Threat Logs",
"id": "",
"xyChart": {
"chartOptions": {
"displayHorizontal": false,
"mode": "COLOR",
"showLegend": false
},
"dataSets": [
{
"breakdowns": [],
"dimensions": [],
"legendTemplate": "",
"measures": [],
"minAlignmentPeriod": "60s",
"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"timeSeriesQuery": {
"outputFullDuration": false,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
},
"unitOverride": ""
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
}
},
{
"xPos": 24,
"height": 20,
"width": 24,
"widget": {
"title": "Threat Logs per region",
"id": "",
"xyChart": {
"chartOptions": {
"displayHorizontal": false,
"mode": "COLOR",
"showLegend": false
},
"dataSets": [
{
"breakdowns": [],
"dimensions": [],
"legendTemplate": "",
"measures": [],
"minAlignmentPeriod": "60s",
"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"timeSeriesQuery": {
"outputFullDuration": false,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"region\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
},
"unitOverride": ""
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
}
},
{
"yPos": 20,
"height": 20,
"width": 24,
"widget": {
"title": "Group by Threat",
"id": "",
"pieChart": {
"chartType": "DONUT",
"dataSets": [
{
"breakdowns": [],
"dimensions": [],
"measures": [],
"minAlignmentPeriod": "60s",
"sliceNameTemplate": "",
"timeSeriesQuery": {
"outputFullDuration": true,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"threat\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
},
"unitOverride": ""
}
}
],
"showLabels": false,
"showTotal": false,
"sliceAggregatedThreshold": 0
}
}
},
{
"yPos": 20,
"xPos": 24,
"height": 20,
"width": 24,
"widget": {
"title": "Top List - ThreatID",
"timeSeriesTable": {
"columnSettings": [
{
"column": "threatId",
"visible": true
},
{
"column": "threat",
"visible": true
},
{
"column": "project_id",
"visible": false
},
{
"column": "value",
"visible": true
}
],
"dataSets": [
{
"minAlignmentPeriod": "60s",
"timeSeriesQuery": {
"outputFullDuration": true,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"threatId\"",
"metric.label.\"threat\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\"",
"pickTimeSeriesFilter": {
"direction": "TOP",
"numTimeSeries": 30,
"rankingMethod": "METHOD_MEAN"
}
}
}
}
],
"metricVisualization": "BAR"
}
}
},
{
"yPos": 40,
"height": 20,
"width": 24,
"widget": {
"title": "Group by Severity",
"id": "",
"pieChart": {
"chartType": "DONUT",
"dataSets": [
{
"breakdowns": [],
"dimensions": [],
"measures": [],
"minAlignmentPeriod": "60s",
"sliceNameTemplate": "",
"timeSeriesQuery": {
"outputFullDuration": true,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"Severity\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
},
"unitOverride": ""
}
}
],
"showLabels": false,
"showTotal": false,
"sliceAggregatedThreshold": 0
}
}
},
{
"yPos": 40,
"xPos": 24,
"height": 20,
"width": 24,
"widget": {
"title": "Top List - Source",
"id": "",
"timeSeriesTable": {
"columnSettings": [
{
"column": "InstanceId",
"visible": true
},
{
"column": "region",
"visible": true
},
{
"column": "project_id",
"visible": true
},
{
"column": "value",
"visible": true
}
],
"dataSets": [
{
"minAlignmentPeriod": "60s",
"tableTemplate": "",
"timeSeriesQuery": {
"outputFullDuration": true,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"InstanceId\"",
"metric.label.\"region\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\"",
"pickTimeSeriesFilter": {
"direction": "TOP",
"numTimeSeries": 30,
"rankingMethod": "METHOD_MEAN"
}
},
"unitOverride": ""
}
}
],
"displayColumnType": false,
"metricVisualization": "BAR"
}
}
},
{
"yPos": 60,
"height": 20,
"width": 48,
"widget": {
"title": "Group by Domains",
"id": "",
"xyChart": {
"chartOptions": {
"displayHorizontal": false,
"mode": "COLOR",
"showLegend": false
},
"dataSets": [
{
"breakdowns": [],
"dimensions": [],
"legendTemplate": "",
"measures": [],
"minAlignmentPeriod": "60s",
"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"timeSeriesQuery": {
"outputFullDuration": false,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"metric.label.\"QueryName\""
],
"perSeriesAligner": "ALIGN_SUM"
},
"filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
},
"unitOverride": ""
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
}
}
]
}
}
2. 커스텀 대시보드를 만듭니다. Cloud Shell 내에서 다음 gcloud 명령어를 실행합니다.
gcloud monitoring dashboards create --config-from-file=dashboard.json
7. 에뮬레이션된 악성 DNS 쿼리 생성
이 섹션에서는 다음 태스크를 수행합니다.
- VM에 SSH를 통해 연결합니다.
- VM에 Git을 설치합니다.
- Infoblox 위협 감지 시뮬레이터 저장소를 클론합니다.
- 스크립트를 실행하고 생성된 출력을 분석합니다.
VM에서 에뮬레이션된 악성 DNS 쿼리를 생성하여 설정을 검증합니다.
1. vm-a-use4에 SSH를 사용합니다. Cloud Shell 내에서 다음 gcloud 명령어를 실행합니다.
gcloud compute ssh vm-a-use4 --zone=us-east4-c
2. VM에 Git을 설치합니다.
sudo apt-get install git -y
3. Infoblox 위협 감지 시뮬레이터 저장소를 클론합니다.
git clone https://github.com/infobloxopen/ib-threat-detection-simulator
4. 디렉터리를 시뮬레이터의 디렉터리로 변경합니다.
cd ib-threat-detection-simulator/threat_detection_simulator/
5. 스크립트를 실행하고 생성된 출력을 분석합니다.
스크립트를 실행 가능하게 만듭니다.
chmod +x run.sh
스크립트를 실행합니다.
./run.sh info basic
6. 샘플 출력
다음 이미지는 network-a 내 VM에 표시된 스크립트 출력의 일부를 보여줍니다. 이 출력은 테스트 스크립트에서 에뮬레이션한 다양한 DNS 위협 유형의 감지율을 자세히 보여줍니다.

7. SSH 세션을 종료하여 Cloud Shell로 돌아갑니다.
exit
8. 커스텀 대시보드 보기
대시보드 보기
1. Google Cloud 콘솔 상단의 검색창에 대시보드를 입력한 다음 상위 결과에서 대시보드를 클릭합니다.

2. 검색창에 DNS Armor - Custom Dashboard를 검색한 후 DNS Armor - Custom Dashboard를 클릭하여 대시보드를 엽니다.

3. 대시보드를 봅니다.

대시보드의 위젯
이 섹션에서는 맞춤 대시보드에서 사용할 수 있는 다양한 위젯을 간략히 설명하고 각 위젯의 기능과 표시되는 데이터를 개략적으로 보여줍니다.
- 위협 로그: 지정된 기간 동안 프로젝트에 포함된 모든 네트워크에 대해 생성된 위협 로그를 표시하는 누적 막대 그래프입니다.
- 지역별 위협 로그: 정의된 기간 동안 지역별로 그룹화된 위협 로그를 보여주는 누적 막대 그래프입니다.
- 위협별 그룹화: 특정 기간 내의 위협 유형을 기준으로 위협 로그를 분류하는 원형 차트입니다.
- 상위 목록 - ThreatID: 지정된 기간 내의 상위 30개 위협 ID를 보여주는 목록입니다.
- 심각도별 그룹화: 정의된 기간 내에서 심각도 수준별로 위협 로그를 그룹화한 원형 차트입니다.
- 상위 목록 - 소스: 지정된 기간 내의 상위 30개 인스턴스 ID (소스 VM)를 표시하는 목록입니다.
- 도메인별 그룹화: 쿼리에서 발견된 도메인 이름별로 위협 로그를 그룹화하는 누적 막대 그래프입니다.
9. 삭제
향후 요금이 청구되지 않도록 이 Codelab에서 만든 리소스를 삭제합니다. 정리 명령어를 실행할 때는 VM의 셸을 종료하고 Cloud Shell로 돌아가야 합니다.
1. 맞춤 대시보드를 삭제합니다.
대시보드 ID는 생성 시 동적으로 생성되므로 먼저 표시 이름을 사용하여 리소스 이름을 검색해야 합니다.
DASHBOARD_NAME=$(gcloud monitoring dashboards list --filter="displayName='DNS Armor - Custom Dashboard'" --format='value(name)')
gcloud monitoring dashboards delete $DASHBOARD_NAME --quiet
2. 로그 기반 측정항목을 삭제합니다.
gcloud logging metrics delete dns-armor-log-based-metric --quiet
3. VM을 삭제합니다.
gcloud compute instances delete vm-a-use4 --zone=us-east4-c --quiet
gcloud compute instances delete vm-a-usc1 --zone=us-central1-a --quiet
4. 방화벽 규칙을 삭제합니다.
gcloud compute firewall-rules delete allow-ssh-iap-a --quiet
5. Cloud NAT 게이트웨이를 삭제합니다.
gcloud compute routers nats delete nat-a-use4 --router=router-a-use4 --region=us-east4 --quiet
gcloud compute routers nats delete nat-a-usc1 --router=router-a-usc1 --region=us-central1 --quiet
6. Cloud Router를 삭제합니다.
gcloud compute routers delete router-a-use4 --region=us-east4 --quiet
gcloud compute routers delete router-a-usc1 --region=us-central1 --quiet
7. 서브넷을 삭제합니다.
gcloud compute networks subnets delete subnet-a-use4 --region=us-east4 --quiet
gcloud compute networks subnets delete subnet-a-usc1 --region=us-central1 --quiet
8. DNS 위협 감지기를 삭제합니다.
gcloud beta network-security dns-threat-detectors delete my-dns-threat-detector --location=global --quiet
9. VPC를 삭제합니다.
gcloud compute networks delete network-a --quiet
10. 축하합니다
축하합니다. DNS Armor 위협 탐지 로그를 성공적으로 구성, 배포, 시각화했습니다 . DNS 기반 위협으로부터 Google Cloud 환경을 보호하고 보안 통계를 위한 맞춤 모니터링 솔루션을 구축하는 실무 경험을 쌓았습니다.
이 Codelab에서 학습한 내용은 다음과 같습니다.
- VPC, 서브넷, 가상 머신으로 네트워크 환경을 프로비저닝했습니다.
- Cloud NAT를 사용하여 비공개 VM의 인터넷 이그레스를 구성했습니다.
- DNS Armor 위협 감지기를 배포했습니다.
- DNS 위협을 시뮬레이션하고 위협 감지 구성을 검증했습니다.
- DNS 위협 로그에서 커스텀 로그 기반 측정항목을 만들었습니다.
- DNS 위협을 시각화하고 분석하기 위해 맞춤 Cloud Monitoring 대시보드를 빌드했습니다.