DNS Armor 的高级威胁检测功能使用入门

1. 简介和概览

DNS Armor 由 Infoblox 提供支持,是一项全托管式服务,可为您的 Google Cloud 工作负载提供 DNS 层安全性。其高级威胁检测器旨在在攻击链的最早阶段(即 DNS 查询)检测恶意活动,而不会增加运维复杂性或性能开销。

此 Codelab 提供了有关如何配置和测试 DNS Armor 服务的分步说明。您将设置必要的网络基础设施,创建威胁检测器,通过模拟 DNS 威胁来测试服务,最后使用 Logs Explorer 分析威胁日志。

构建内容

在此 Codelab 中,您将预配以下资源:

  • 两个 VPC 网络:network-anetwork-b
  • network-a 将包含 us-east4us-central1 区域中的子网和虚拟机。
  • network-b 将仅包含 us-east4 中的子网和虚拟机。
  • 已配置为检查 DNS 查询的 DNS Armor 高级威胁检测器。

75d6eeb807735645.png

学习内容

  • 如何预配必要的网络资源,包括 VPC 和虚拟机。
  • 如何部署高级威胁检测器并排除特定网络。
  • 如何使用威胁模拟脚本验证威胁检测配置。
  • 如何在 Logs Explorer 中分析威胁日志。

所需条件

  • Google Cloud 项目
  • gcloud 命令行工具的访问权限。

2. 前提条件

在本部分中,您将执行以下任务:

  • 验证您的 Google Cloud 云项目是否满足必要的组织政策限制条件。
  • 确认您的用户账号具有所需的 IAM 角色和权限。
  • 启用此 Codelab 必需的 Google Cloud API。
  • 向 Compute Engine 服务账号分配 roles/logging.viewer IAM 角色。

组织政策限制条件

为成功完成此 Codelab,请验证应用于项目的组织政策限制条件。某些政策可能会妨碍必要资源的配置。以下限制可能会影响此 Codelab 的配置:

  • constraints/gcp.resourceLocations:限制可创建资源的区域;此 Codelab 需要 us-east4us-central1
  • constraints/compute.vmExternalIpAccess:防止创建具有公共 IP 地址的虚拟机,如果您不按照实验手册使用 --no-address 标志,这可能会干扰设置。
  • constraints/compute.shieldedVm:强制创建安全强化型虚拟机,而实验的虚拟机创建命令并未指定安全强化型虚拟机,这可能会导致错误。
  • constraints/gcp.restrictServiceUsage:限制可启用的 Google Cloud API,如果不允许 compute.googleapis.comnetworksecurity.googleapis.comlogging.googleapis.commonitoring.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-anetwork-b)。
  • network-anetwork-b 中配置 Cloud Router 和 Cloud NAT 以实现互联网出站流量。
  • 创建防火墙规则,以允许从 IAP 的 IP 范围通过 SSH 访问虚拟机(针对 network-anetwork-b)。
  • network-anetwork-b 中预配没有公共 IP 地址的 Linux 虚拟机。

创建 VPC 和子网

1. 在 us-east4us-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