DNS Armor の高度な脅威検出のスタートガイド

1. 導入と概要

Infoblox を活用した DNS Armor は、Google Cloud ワークロードに DNS レイヤのセキュリティを提供するフルマネージド サービスです。高度な脅威検出機能は、運用上の複雑さやパフォーマンスのオーバーヘッドを増やすことなく、攻撃チェーンの最も早い段階である DNS クエリで悪意のあるアクティビティを検出するように設計されています。

この Codelab では、DNS Armor サービスを構成してテストする手順を説明します。必要なネットワーク インフラストラクチャを設定し、脅威検出機能を作成し、DNS 脅威をシミュレートしてサービスをテストし、最後にログ エクスプローラを使用して脅威ログを分析します。

作成するアプリの概要

この Codelab では、次のリソースをプロビジョニングします。

  • 2 つの VPC ネットワーク: network-anetwork-b
  • network-a には、us-east4 リージョンと us-central1 リージョンのサブネットと仮想マシンが含まれます。
  • network-b には、us-east4 のサブネットと仮想マシンのみが含まれます。
  • DNS クエリを検査するように構成された DNS Armor の高度な脅威検出機能。

75d6eeb807735645.png

学習内容

  • VPC や仮想マシンなど、必要なネットワーキング リソースをプロビジョニングする方法。
  • 高度な脅威検出機能をデプロイし、特定のネットワークを除外する方法。
  • 脅威シミュレーション スクリプトを使用して脅威検出構成を検証する方法。
  • ログ エクスプローラで脅威ログを分析する方法。

必要なもの

  • Google Cloud プロジェクト
  • gcloud コマンドライン ツールへのアクセス。

2. 前提条件

このセクションでは、次のタスクを行います。

  • Google Cloud プロジェクトが、必要な組織のポリシーの制約を満たしていることを確認します。
  • ユーザー アカウントに必要な IAM ロールと権限が付与されていることを確認します。
  • この Codelab に不可欠な Google Cloud APIs を有効にします。
  • Compute Engine サービス アカウントに roles/logging.viewer IAM ロールを割り当てます。

組織のポリシーの制約

この Codelab を完了するには、プロジェクトに適用されている組織のポリシーの制約を確認してください。特定のポリシーは、必要なリソースのプロビジョニングを妨げる可能性があります。次の制約は、この Codelab の構成に影響する可能性があります。

  • constraints/gcp.resourceLocations: リソースを作成できるリージョンを制限します。この Codelab では us-east4us-central1 が必要です。
  • constraints/compute.vmExternalIpAccess: パブリック IP アドレスを持つ仮想マシンの作成を防ぎます。これは、--no-address フラグの使用に関する Codelab の手順に従わない場合に、設定に干渉する可能性があります。
  • constraints/compute.shieldedVm: Shielded VM の作成を強制します。このコードラボの VM 作成コマンドでは Shielded VM が指定されていないため、エラーが発生する可能性があります。
  • constraints/gcp.restrictServiceUsage: 有効にできる Google Cloud APIs を制限します。compute.googleapis.comnetworksecurity.googleapis.comlogging.googleapis.commonitoring.googleapis.com が許可されていない場合、この Codelab をブロックする可能性があります。

IAM のロールと権限

この Codelab を完了するには、ユーザーに付与されている IAM ロールと権限を確認してください。この Codelab を完了するには、次の IAM ロールと権限が必要です。

  • Service Usage 管理者roles/serviceusage.serviceUsageAdmin): このコードラボに必要な Google Cloud APIs を有効にする。
  • 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-anetwork-b)を作成します。
  • network-anetwork-b の両方で、インターネット下り(外向き)用の Cloud Router と Cloud NAT を構成します。
  • network-anetwork-b の両方で、IAP の IP 範囲から VM への SSH アクセスを許可するファイアウォール ルールを作成します。
  • パブリック IP アドレスなしで、network-anetwork-b の両方に 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

2. us-east4 リージョンに network-b とそのサブネットを作成します。Cloud Shell で次の gcloud コマンドを実行します。

gcloud compute networks create network-b --subnet-mode=custom
gcloud compute networks subnets create subnet-b-use4 \
--network=network-b \
--range=10.20.0.0/24 \
--region=us-east4

インターネット下り(外向き)を構成する

1. network-a の Cloud Router と Cloud NAT を作成して、パブリック IP を持たない VM のインターネット下り(外向き)を許可します。

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

2. network-b の Cloud Router と Cloud NAT を作成して、パブリック IP を持たない VM のインターネット下り(外向き)を許可します。

gcloud compute routers create router-b-use4 \
--network=network-b \
--region=us-east4
gcloud compute routers nats create nat-b-use4 \
--router=router-b-use4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-east4

ファイアウォール ルールを構成する

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

2. network-bファイアウォール ルールを作成して、IAP の IP 範囲からの SSH アクセスを許可します。Cloud Shell で次の gcloud コマンドを実行します。

gcloud compute firewall-rules create allow-ssh-iap-b \
--network=network-b \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20

仮想マシンを作成する

1. network-aLinux 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

2. network-b で Linux VM を作成する

gcloud compute instances create vm-b-use4 \
--zone=us-east4-c \
--network=network-b \
--subnet=subnet-b-use4 \
--no-address \
--scopes=cloud-platform

4. DNS 脅威検出機能を作成する

このセクションでは、次のタスクを行います。

  • 脅威検出機能を作成します。
  • 脅威検出機能を一覧表示します。
  • リソースの説明を入力します。

VPC、サブネット、仮想マシンがプロビジョニングされたので、次は DNS 脅威検出機能を作成します。

1. gcloud beta network-security dns-threat-detectors create コマンドを使用して脅威検出器を作成します。network-b を除外するには、--excluded-networks フラグを使用します。

gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--provider=infoblox \
--excluded-networks=projects/$PROJECT_ID/global/networks/network-b

2. 脅威検出機能を一覧表示して、作成を確認します。

gcloud beta network-security dns-threat-detectors list --location=global

3. リソースを説明して、network-bexcludedNetworks に正しくリストされていることを確認します。

gcloud beta network-security dns-threat-detectors describe my-dns-threat-detector --location=global

出力例:

createTime: '2025-08-06T17:06:30.297586089Z'
excludedNetworks:
- projects/dns-armor-demo-project/global/networks/network-b
name: projects/dns-armor-demo-project/locations/global/dnsThreatDetectors/my-dns-threat-detector
provider: INFOBLOX
updateTime: '2025-08-27T01:14:09.666357239Z'

5. セットアップのテスト

このセクションでは、次のタスクを行います。

  • VM に SSH 接続します。
  • VM に Git をインストールします。
  • Infoblox 脅威検出シミュレータ リポジトリのクローンを作成します。
  • スクリプトを実行し、生成された出力を分析します。

VM からエミュレートされた悪意のある DNS クエリを生成して、設定を検証します。network-a からのクエリのログエントリは確認できますが、network-b. からのログは生成されません。

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 からのスクリプト出力の一部を示しています。出力には、脅威の 100% が検出されたことが示されます。

a66c1757f8c74da6.png

次のスクリーンショットは、network-b の VM からのスクリプト出力の一部を示しています。出力には、脅威の 0% が検出されたことが示されます。これは、脅威検出機能の作成時に network-b が除外されたためです。

c12d130c95c04e84.png

7. SSH セッションを終了してCloud Shell に戻ります。

exit

6. ログ エクスプローラで脅威ログを表示する

生成された脅威ログは、テスト スクリプトの実行後にログ エクスプローラで確認できます。これは、ログが Cloud Logging に書き込まれるためです。

ログエントリの例

このセクションでは、検出された DNS の脅威のログエントリの例を示します。この例では、DNS Armor によってキャプチャされた詳細情報(送信元 IP、クエリされたドメイン、脅威カテゴリなど)を確認できます。これは、分析するログの構造と内容を理解するためのリファレンスとして使用されます。

{
  "insertId": "1izjkneb44",
  "jsonPayload": {
    "partnerId": "Infoblox",
    "detectionTime": "2025-08-08T01:49:54.092250101Z",
    "dnsQuery": {
      "authAnswer": false,
      "rdata": "random.malicious-domain.com.\t300\tIN\ta\t196.251.118.39",
      "protocol": "UDP",
      "projectNumber": "1234567890",
      "responseCode": "NOERROR",
      "queryType": "A",
      "location": "us-east4",
      "sourceIp": "10.10.0.2",
      "queryName": "random.malicious-domain.com.",
      "vmProjectNumber": "1234567890",
      "vmInstanceId": "01234567899876543210",
      "destinationIp": "",
      "queryTime": "2025-08-08T01:49:53.712692495Z"
    },
    "threatInfo": {
      "severity": "HIGH",
      "confidence": "HIGH",
      "threatDescription": "",
      "category": "EmergentDomain",
      "threatId": "Suspicious_EmergentDomain",
      "type": "Suspicious",
      "threatIndicator": "izumisv1.cc",
      "threatIndicatorType": "FQDN",
      "threat": "Suspicious",
      "threatFeed": "suspicious-noed"
    }
  },
  "resource": {
    "type": "networksecurity.googleapis.com/DnsThreatDetector",
    "labels": {
      "resource_container": "projects/1234567890",
      "id": "",
      "location": "us-east4"
    }
  },
  "timestamp": "2025-08-08T01:49:54.092250101Z",
  "severity": "INFO",
  "logName": "projects/dns-armor-demo-project/logs/networksecurity.googleapis.com%2Fdns_threat_events",
  "receiveTimestamp": "2025-08-08T01:49:55.290965780Z"
}

ログ エクスプローラでログを表示する

1. Google Cloud コンソールでMonitoring セクションに移動し、Logs explorer を選択します。

4a90c593d7e339d8.png

2. すべての DNS Armor 脅威ログをフィルタするには、次のクエリを使用します。これにより、DNS Threat Detector のリソースタイプに基づいてログがフィルタされます。

resource.type="networksecurity.googleapis.com/DnsThreatDetector"

3. us-east4 リージョンのログをフィルタし、ロケーションのフィルタを追加します。このクエリでは、us-east4 リージョンで検出された脅威のみが表示されます。

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
resource.labels.location="us-east4"

4. 送信元ネットワークでログをフィルタする: DNS クエリの送信元 IP アドレスに基づいてログをフィルタし、特定の VPC ネットワークから発生した脅威を確認します。

network-a(サブネット 10.10.0.0/24 と 10.10.1.0/24)のログを表示するには:

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
(jsonPayload.dnsQuery.sourceIp:"10.10.0." OR jsonPayload.dnsQuery.sourceIp:"10.10.1.")

network-b(サブネット 10.20.0.0/24)のログを表示するには:

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
jsonPayload.dnsQuery.sourceIp:"10.20.0."

7. クリーンアップ

今後課金されないようにするには、この Codelab で作成したリソースを削除します。クリーンアップ コマンドを実行するときは、必ず VM のシェルを終了して Cloud Shell に戻ってください。

1. 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
gcloud compute instances delete vm-b-use4 --zone=us-east4-c --quiet

2. ファイアウォール ルールを削除します。

gcloud compute firewall-rules delete allow-ssh-iap-a --quiet
gcloud compute firewall-rules delete allow-ssh-iap-b --quiet

3. 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
gcloud compute routers nats delete nat-b-use4 --router=router-b-use4 --region=us-east4 --quiet

4. Cloud Router を削除する

gcloud compute routers delete router-a-use4 --region=us-east4 --quiet
gcloud compute routers delete router-a-usc1 --region=us-central1 --quiet
gcloud compute routers delete router-b-use4 --region=us-east4 --quiet

5. サブネットを削除します。

gcloud compute networks subnets delete subnet-a-use4 --region=us-east4 --quiet
gcloud compute networks subnets delete subnet-a-usc1 --region=us-central1 --quiet
gcloud compute networks subnets delete subnet-b-use4 --region=us-east4 --quiet

6. DNS 脅威検出機能を削除します。

gcloud beta network-security dns-threat-detectors delete my-dns-threat-detector --location=global --quiet

7. VPC を削除します。

gcloud compute networks delete network-a --quiet
gcloud compute networks delete network-b --quiet

8. 完了

おめでとうございます!これで、DNS Armor 脅威検出機能を構成、デプロイ、テストできました。DNS ベースの脅威から Google Cloud 環境を保護する実践的な経験を積みました。

この Codelab では、次のことを行いました。

  • 複数の VPC、サブネット、仮想マシンを含むネットワーク環境をプロビジョニングしました。
  • Cloud NAT を使用して、プライベート VM のインターネット下り(外向き)を構成しました。
  • DNS Armor 脅威検出機能をデプロイし、特定のネットワークを除外する方法を学習しました。
  • DNS 脅威をシミュレートし、脅威検出構成を検証しました。
  • ログ エクスプローラで脅威ログを分析して、悪意のある DNS アクティビティを特定して把握しました。

次のステップ

リファレンス ドキュメント