1. 简介和概览
DNS Armor 由 Infoblox 提供支持,是一项全托管式服务,可为您的 Google Cloud 工作负载提供 DNS 层安全性。其高级威胁检测器旨在在攻击链的最早阶段(即 DNS 查询)检测恶意活动,而不会增加运维复杂性或性能开销。
此 Codelab 提供了有关如何配置和测试 DNS Armor 服务的分步说明。您将设置必要的网络基础设施,创建威胁检测器,通过模拟 DNS 威胁来测试服务,最后使用 Logs Explorer 分析威胁日志。
构建内容
在此 Codelab 中,您将预配以下资源:
- 两个 VPC 网络:
network-a和network-b network-a将包含us-east4和us-central1区域中的子网和虚拟机。network-b将仅包含us-east4中的子网和虚拟机。- 已配置为检查 DNS 查询的 DNS Armor 高级威胁检测器。

学习内容
- 如何预配必要的网络资源,包括 VPC 和虚拟机。
- 如何部署高级威胁检测器并排除特定网络。
- 如何使用威胁模拟脚本验证威胁检测配置。
- 如何在 Logs Explorer 中分析威胁日志。
所需条件
- 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:防止创建具有公共 IP 地址的虚拟机,如果您不按照实验手册使用--no-address标志,这可能会干扰设置。constraints/compute.shieldedVm:强制创建安全强化型虚拟机,而实验的虚拟机创建命令并未指定安全强化型虚拟机,这可能会导致错误。constraints/gcp.restrictServiceUsage:限制可启用的 Google Cloud API,如果不允许compute.googleapis.com、networksecurity.googleapis.com、logging.googleapis.com和monitoring.googleapis.com,可能会导致无法完成 Codelab。
IAM 角色和权限
如需成功完成此 Codelab,请验证授予您用户的 IAM 角色和权限。您需要拥有以下 IAM 角色和权限才能完成此 Codelab。
- Service Usage Admin (
roles/serviceusage.serviceUsageAdmin):用于为 Codelab 启用所需的 Google Cloud API。 - Compute Network Admin (
roles/compute.networkAdmin):用于创建和管理 VPC 网络、子网和 Cloud NAT。 - Compute Security Admin (
roles/compute.securityAdmin):用于配置防火墙规则,以实现对虚拟机的 SSH 访问。 - Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1):用于创建和管理实验所需的虚拟机。 - IAP-secured Tunnel User (
roles/iap.tunnelResourceAccessor):通过 Identity-Aware Proxy (IAP) 使用 SSH 连接到虚拟机。 - Network Security Admin (
roles/networksecurity.admin):用于创建和管理 DNS Armor 威胁检测器。 - Logs Viewer (
roles/logging.viewer):在 Logs Explorer 中查看和分析威胁日志。
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 服务账号的虚拟机执行,因此必须为此服务账号分配 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 服务账号授予日志查看者角色。在 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-b)。 - 在
network-a和network-b中配置 Cloud Router 和 Cloud NAT 以实现互联网出站流量。 - 创建防火墙规则,以允许从 IAP 的 IP 范围通过 SSH 访问虚拟机(针对
network-a和network-b)。 - 在
network-a和network-b中预配没有公共 IP 地址的 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 的虚拟机进行互联网出站。
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