目标
本教程介绍如何完成以下任务:
- 创建包含两个子网的自定义 VPC 网络,这些子网位于不同区域内。
- 在以下每个区域创建一个虚拟机实例:美国和新加坡。
- 创建 Cloud Router 路由器和 Cloud NAT 网关,以允许美国虚拟机访问公共互联网。
- 创建全球网络防火墙政策并添加防火墙规则以启用 Identity-Aware Proxy (IAP)。
- 在新加坡虚拟机上安装 Apache 服务器。
- 添加防火墙规则,阻止流量进入特定地理位置。
- 测试地理位置防火墙规则。
下图展示了自定义 VPC 网络内 us-central1
和 asia-southeast1
区域中的虚拟机之间的流量。全球网络防火墙政策会阻止流向特定地理位置的出站流量。us-central1
区域中的虚拟机使用 Cloud Router 和 Cloud NAT 访问互联网,而不使用外部 IP 地址。us-central1
区域中的虚拟机使用 asia-southeast1
区域中虚拟机的外部 IP 地址来测试防火墙规则。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 确保您具有 Compute Network Admin 角色 (
roles/compute.networkAdmin
)。 -
Enable the Compute Engine and Identity-Aware Proxy (IAP) APIs.
- 如果您希望通过命令行进行操作,请安装 Google Cloud CLI。 如需了解该工具的概念性信息和安装信息,请参阅 gcloud CLI 概览。
注意:如果您之前未运行过 Google Cloud CLI,请运行
gcloud init
命令来初始化 gcloud CLI 目录:
创建包含子网的自定义 VPC 网络
创建包含两个 IPv4 子网的自定义模式 VPC 网络。
控制台
在 Google Cloud 控制台中,进入 VPC 网络页面。
点击创建 VPC 网络。
对于名称,输入
vpc-geo-location
。对于子网创建模式,选择自定义。
在新子网部分,为子网指定以下配置参数:
- 名称:
subnet-1-us
- 区域:
us-central1
- IPv4 范围:
10.0.0.0/24
- 名称:
点击完成。
点击添加子网并指定以下配置参数:
- 名称:
subnet-2-sg
- 区域:
asia-southeast1
- IPv4 范围:
192.168.200.0/24
- 名称:
点击完成。
点击创建。
gcloud
- 如需打开终端,请点击激活 Cloud Shell。
如需创建 VPC 网络,请运行以下命令:
gcloud compute networks create vpc-geo-location \ --subnet-mode=custom
在为 Cloud Shell 提供授权对话框中,点击授权。
如需创建子网,请运行以下命令:
gcloud compute networks subnets create subnet-1-us \ --network=vpc-geo-location \ --region=us-central1 \ --range=10.0.0.0/24
如需创建另一个子网,请运行以下命令:
gcloud compute networks subnets create subnet-2-sg \ --network=vpc-geo-location \ --region=asia-southeast1 \ --range=192.168.200.0/24
创建虚拟机
在本部分中,您将在上一部分配置的子网中创建两个虚拟机。
在 us-central1
区域中创建虚拟机。
在 us-central1
区域中创建一个没有外部 IP 地址的虚拟机。
控制台
如需在 us-central1
区域中创建虚拟机,请按照以下步骤操作:
在 Google Cloud 控制台中,转到创建实例页面。
对于名称,输入
instance-1-us
。对于区域,请选择
us-central1 (Iowa)
。展开高级选项,然后展开网络。
在网络接口部分中,展开默认并指定以下配置参数:
- 网络:
vpc-geo-location
- 子网:
subnet-1-us IPv4 (10.0.0.0/24)
- 外部 IPv4 地址:无
- 网络:
点击完成。
点击创建。
gcloud
如需在 us-central1
区域中创建虚拟机,请运行以下命令:
gcloud compute instances create instance-1-us \ --network=vpc-geo-location \ --zone=us-central1-a \ --stack-type=IPV4_ONLY \ --no-address \ --subnet=subnet-1-us
在 asia-southeast1
区域中创建虚拟机。
控制台
如需在 asia-southeast1
区域中创建虚拟机,请按照以下步骤操作:
在 Google Cloud 控制台中,转到创建实例页面。
对于名称,输入
instance-2-sg
。对于区域,请选择
asia-southeast1 (Singapore)
。展开高级选项,然后展开网络。
在网络接口部分中,展开默认并指定以下配置参数:
- 网络:
vpc-geo-location
- 子网:
subnet-2-sg IPv4 (192.168.200.0/24)
- 网络:
点击完成。
点击创建。
gcloud
如需在 asia-southeast1
区域中创建虚拟机,请运行以下命令:
gcloud compute instances create instance-2-sg \ --network=vpc-geo-location \ --zone=asia-southeast1-b \ --subnet=subnet-2-sg \ --stack-type=IPV4_ONLY
创建 Cloud Router 路由器和 Cloud NAT 网关
在上一部分中,您创建了两个虚拟机:instance-1-us
和 asia-southeast1
。如需允许 instance-1-us
虚拟机访问公共互联网,请创建 Cloud Router 路由器和 Cloud NAT 网关。
控制台
在 Google Cloud 控制台中,转到 Cloud NAT 页面。
点击开始使用或创建 Cloud NAT 网关。
对于网关名称,输入
nat-gateway
。在 NAT 类型列表中,选择公共。
在选择 Cloud Router 路由器部分中,指定以下配置参数:
- 网络:
vpc-geo-location
- 区域:
us-central1
- Cloud Router 路由器:创建新路由器。
- 对于名称,输入
router-fw-rules
。 - 点击创建。
- 对于名称,输入
- 网络:
点击创建。
在 Google Cloud 控制台中,进入 IP 地址页面。
点击外部 IP 地址标签页,然后复制 Cloud NAT 的 IP 地址 (
nat-auto-ip
)。当您验证instance-1-us
虚拟机与instance-2-sg
虚拟机之间的连接时,将使用此 IP 地址。
gcloud
要创建 Cloud Router 路由器,请运行以下命令:
gcloud compute routers create router-fw-rules \ --network=vpc-geo-location \ --region=us-central1
如需创建 Cloud NAT 网关,请运行以下命令:
gcloud compute routers nats create nat-gateway \ --router=router-fw-rules \ --region=us-central1 \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
如需查看 Cloud NAT IP 地址,请运行以下命令:
gcloud compute routers get-nat-ip-info \ router-fw-rules \ --region=us-central1
请务必复制您的 Cloud NAT 的 IP 地址 (
natIp
)。当您验证instance-1-us
虚拟机与instance-2-sg
虚拟机之间的连接时,将使用此 IP 地址。
创建全球网络防火墙政策以启用 IAP
在本部分中,您将创建全球网络防火墙政策并添加防火墙规则以启用 IAP。IAP 允许对虚拟机实例的管理员权限。
该防火墙规则具有以下特征。
- 来自 IP 范围
35.235.240.0/20
的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址。 与您希望通过使用 IAP TCP 转发访问的所有端口(例如,用于 SSH 的端口
22
)的连接。
控制台
如需允许 IAP 访问 vpc-geo-location
网络中的所有虚拟机实例,请按照以下步骤操作:
在 Google Cloud 控制台中,转到防火墙页面。
点击创建防火墙政策。
在配置政策部分的政策名称中,输入
fw-policy
。在部署范围列表中,选择全局,然后点击继续。
如需为政策创建规则,请在添加规则部分中点击添加规则。
- 在优先级字段中,输入
100
。 - 对于流量方向,选择入站。
- 对于对匹配项执行的操作,选择允许。
- 在日志列表中,选择开启。
- 在目标部分的目标类型中,选择网络中的所有实例。
- 在来源部分的 IP 范围中,输入
35.235.240.0/20
。 - 在协议和端口部分中,选择指定的协议和端口。
- 选中 TCP 复选框,在端口字段中,输入
22
。 - 点击创建。
- 在优先级字段中,输入
点击继续。
如需将 VPC 网络与政策关联,在将政策与 VPC 网络关联部分中,点击关联。
选中
vpc-geo-location
对应的复选框,然后点击关联。点击继续。
点击创建。
gcloud
如需允许 IAP 访问 vpc-geo-location
网络中的所有虚拟机实例,请运行以下命令:
如需创建防火墙政策,请运行以下命令:
gcloud compute network-firewall-policies create fw-policy \ --global
如需创建允许流量流向所有目的地并启用日志的防火墙规则,请运行以下命令:
gcloud compute network-firewall-policies rules create 100 \ --firewall-policy=fw-policy \ --direction=INGRESS \ --action=ALLOW \ --layer4-configs=tcp:22 \ --src-ip-ranges=35.235.240.0/20 \ --global-firewall-policy \ --enable-logging
如需将防火墙政策与 VPC 网络关联,请运行以下命令:
gcloud compute network-firewall-policies associations create \ --firewall-policy=fw-policy \ --network=vpc-geo-location \ --name=pol-association-fw-rules \ --global-firewall-policy
创建防火墙规则
在本部分中,您将创建防火墙规则以允许在 instance-2-sg
虚拟机上建立入站连接。
控制台
在 Google Cloud 控制台中,转到防火墙页面。
在网络防火墙政策部分中,点击
fw-policy
。点击创建规则。
在优先级字段中,输入
500
。对于流量方向,选择入站。
对于对匹配项执行的操作,选择允许。
在日志列表中,选择开启。
在目标部分的目标类型中,选择网络中的所有实例。
在来源部分的 IP 范围中,输入 NAT_IP_ADDRESS。
将
NAT_IP_ADDRESS
替换为分配给您的 Cloud NAT 的 IP 地址。如需了解详情,请参阅创建 Cloud Router 路由器和 Cloud NAT 网关。点击创建。
gcloud
如需更新防火墙政策,请运行以下命令:
gcloud compute network-firewall-policies rules create 500 \ --firewall-policy=fw-policy \ --direction=INGRESS \ --action=ALLOW \ --src-ip-ranges=NAT_IP_ADDRESS \ --layer4-configs=all \ --global-firewall-policy \ --enable-logging
将 NAT_IP_ADDRESS
替换为分配给您的 Cloud NAT 的 IP 地址。如需了解详情,请参阅创建 Cloud Router 路由器和 Cloud NAT 网关。
安装 Apache 服务器
在本部分中,您将在 instance-2-sg
虚拟机上安装 Apache 服务器。
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
在
instance-2-sg
虚拟机实例的连接列中,点击 SSH。在 SSH-in-browser 对话框中,点击授权并等待连接建立。
如需更新实例上的软件包列表,请运行以下命令:
sudo apt-get update
该过程完成后,会生成以下消息:
Reading package lists... Done.
如需安装
apache2 HTTP Server
软件包,请在命令提示符下运行以下命令:sudo apt-get install apache2 php7.0
在此过程中,它会生成以下消息:
After this operation, 56.0 MB of additional disk space will be used. Do you want to continue? [Y/n]
按 Y 键进行确认,然后按 Enter 键。
如需覆盖 Apache Web 服务器的默认网页,请运行以下命令:
echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | sudo tee /var/www/html/index.html
关闭 SSH-in-browser 对话框。
gcloud
如需使用 SSH 连接到
instance-2-sg
虚拟机,请运行以下命令:gcloud compute ssh instance-2-sg \ --zone=asia-southeast1-b \ --tunnel-through-iap
出现提示时,按 Y 键进行确认,然后按 Enter 键。
如需更新实例上的软件包列表,请运行以下命令:
sudo apt-get update
该过程完成后,会生成以下消息:
Reading package lists... Done.
如需安装
apache2 HTTP Server
软件包,请在命令提示符下运行以下命令:sudo apt-get install apache2 php7.0
在此过程中,它会生成以下消息:
After this operation, 56.0 MB of additional disk space will be used. Do you want to continue? [Y/n]
按 Y 键进行确认,然后按 Enter 键。
如需覆盖 Apache Web 服务器的默认网页,请运行以下命令:
echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | sudo tee /var/www/html/index.html
若要关闭 SSH-in-browser,请输入
exit
。
验证连接
在 instance-2-sg
虚拟机上安装 Apache 服务器后,使用 instance-2-sg
虚拟机的外部 IP 地址从 instance-2-sg
虚拟机连接到 instance-1-us
虚拟机。
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
从
instance-2-sg
虚拟机的外部 IP 列中,复制虚拟机的外部 IP 地址。在
instance-1-us
虚拟机实例的连接列中,点击 SSH。在 SSH-in-browser 对话框中,点击授权并等待连接建立。
如需验证连接,请运行以下命令:
curl EXTERNAL_IP -m 2
将
EXTERNAL_IP
替换为instance-2-sg
虚拟机的 IP 地址。预期响应消息如下所示:
<!doctype html><html><body><h1>Hello World!</h1></body></html>
关闭 SSH-in-browser 对话框。
gcloud
如需查看
instance-2-sg
虚拟机的外部 IP 地址,请运行以下命令:gcloud compute instances describe instance-2-sg \ --zone=asia-southeast1-b \ --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
出现提示时,按 Y 键进行确认,然后按 Enter 键。 请务必记下
instance-2-sg
虚拟机的外部 IP 地址。如需使用 SSH 连接到
instance-1-us
虚拟机,请运行以下命令:gcloud compute ssh instance-1-us \ --zone=us-central1-a \ --tunnel-through-iap
如需验证连接,请运行以下命令:
curl EXTERNAL_IP -m 2
将
EXTERNAL_IP
替换为instance-2-sg
虚拟机的 IP 地址。预期响应消息如下所示:
<!doctype html><html><body><h1>Hello World!</h1></body></html>
若要关闭 SSH-in-browser,请输入
exit
。
添加防火墙规则,阻止流量进入特定地理位置
在本部分中,您将为 VPC vpc-geo-location
添加防火墙规则,以阻止流向意大利、波兰和新加坡的出站流量。
控制台
如需在创建全球网络防火墙政策部分中创建的 fw-policy
中添加新规则,请按照以下步骤操作:
在 Google Cloud 控制台中,转到防火墙页面。
在网络防火墙政策部分中,点击
fw-policy
。点击创建规则。
在优先级字段中,输入
200
。在流量方向列表中,选择出站。
在对匹配项执行的操作部分,选择拒绝。
在日志列表中,选择开启。
在目的地部分的地理位置中,选择新加坡 (SG)、波兰 (PL)。和意大利 (IT)。
点击确定。
点击创建。
gcloud
如需在创建全球网络防火墙政策部分中创建的 fw-policy
中添加新规则,请运行以下命令:
gcloud compute network-firewall-policies rules create 200 \ --firewall-policy=fw-policy \ --direction=EGRESS \ --action=DENY \ --dest-region-codes=SG,PL,IT \ --layer4-configs=all \ --global-firewall-policy \ --enable-logging
测试地理位置防火墙规则
控制台
添加阻止流向新加坡 (SG)、波兰 (PL) 和意大利 (IT) 的出站流量的规则后,请按照以下步骤测试规则:
在 Google Cloud 控制台中,转到虚拟机实例页面。
从
instance-2-sg
虚拟机的外部 IP 列中,复制虚拟机的外部 IP 地址。在
instance-1-us
虚拟机实例的连接列中,点击 SSH。在 SSH-in-browser 对话框中,点击授权并等待连接建立。
如需验证流向
instance-2-sg
虚拟机的出站流量是否被阻止,请运行以下命令:curl EXTERNAL_IP -m 2
将
EXTERNAL_IP
替换为instance-2-sg
虚拟机的 IP 地址。Connection timed out
是预期消息,因为您创建了防火墙规则来拒绝从美国虚拟机流向新加坡虚拟机的外部流量。如需验证流向波兰的出站流量是否被阻止,请运行以下命令:
curl `https://www.gov.pl` -m 2
Connection timed out
是预期消息,因为您创建了防火墙规则来拒绝流向波兰网站的外部流量。如需验证流向意大利的出站流量是否被阻止,请运行以下命令:
curl `https://www.esteri.it/it/` -m 2
Connection timed out
是预期消息,因为您创建了防火墙规则来拒绝流向意大利网站的外部流量。关闭 SSH-in-browser 对话框。
gcloud
添加阻止流向新加坡 (SG)、波兰 (PL) 和意大利 (IT) 的出站流量的规则后,请运行以下命令来测试该规则:
如需查看
instance-2-sg
虚拟机的外部 IP 地址,请运行以下命令:gcloud compute instances describe instance-2-sg \ --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
出现提示时,按 Y 键进行确认,然后按 Enter 键。请务必记下
instance-2-sg
虚拟机的外部 IP 地址。如需使用 SSH 连接到
instance-1-us
虚拟机,请运行以下命令:gcloud compute ssh instance-1-us \ --zone=us-central1-a \ --tunnel-through-iap
如需验证流向新加坡的出站流量是否已被阻止,请运行以下命令:
curl EXTERNAL_IP -m 2
将
EXTERNAL_IP
替换为instance-2-sg
虚拟机的 IP 地址。Connection timed out
是预期消息,因为您创建了防火墙规则来拒绝从美国虚拟机流向新加坡虚拟机的外部流量。如需验证流向波兰的出站流量是否被阻止,请运行以下命令:
curl https://www.gov.pl -m 2
Connection timed out
是预期消息,因为您创建了防火墙规则来拒绝来自波兰网站的外部流量。如需验证流向意大利的出站流量是否被阻止,请运行以下命令:
curl https://www.esteri.it/it/ -m 2
Connection timed out
是预期消息,因为您创建了防火墙规则来拒绝流向意大利网站的外部流量。若要关闭 SSH-in-browser 对话框,请输入
exit
。
查看日志
您可以通过访问日志来验证防火墙规则是否已应用于出站流量。如需查看日志详细信息,请按以下步骤操作:
在 Google Cloud 控制台中,转到防火墙页面。
在网络防火墙政策部分中,点击
fw-policy
名称。点击
列显示选项。在显示的列对话框中,选择命中数,然后点击确定。
在命中数列中,选择您在创建全球网络防火墙政策期间创建的规则的数量。Logs Explorer 页面随即会打开。
如需查看应用于出站流量的防火墙规则,请展开单个日志。您可以查看连接、处置和远程位置详细信息。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
在本部分中,您将删除在本教程中创建的资源。
删除防火墙政策
控制台
在 Google Cloud 控制台中,转到防火墙页面。
在网络防火墙政策部分中,点击
fw-policy
名称。点击关联标签页。
选中
vpc-geo-location
复选框,然后点击移除关联。在移除防火墙政策关联对话框中,点击移除。
点击
fw-policy
标题旁边的删除。在删除防火墙政策对话框中,点击删除。
gcloud
移除防火墙政策与 VPC 网络之间的关联。
gcloud compute network-firewall-policies associations delete \ --name=pol-association-fw-rules \ --firewall-policy=fw-policy \ --global-firewall-policy
删除防火墙政策。
gcloud compute network-firewall-policies delete fw-policy \ --global
出现提示时,按 Y 键进行确认,然后按 Enter 键。
删除虚拟机
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
选中
instance-1-us
和instance-2-sg
虚拟机对应的复选框。点击删除。
在删除 2 个实例?对话框中,点击删除。
gcloud
如需删除
instance-1-us
虚拟机,请运行以下命令:gcloud compute instances delete instance-1-us \ --zone=us-central1-a
出现提示时,按 Y 键进行确认,然后按 Enter 键。
如需删除
instance-2-sg
虚拟机,请运行以下命令:gcloud compute instances delete instance-2-sg \ --zone=asia-southeast1-b
出现提示时,按 Y 键进行确认,然后按 Enter 键。
删除 Cloud NAT 网关和 Cloud Router 路由器
控制台
在 Google Cloud 控制台中,前往 Cloud Router 路由器页面。
选中
router-fw-rules
复选框。点击删除。
在删除 router-pf-rules 对话框中,点击删除。
删除 Cloud Router 路由器时,关联的 Cloud NAT 网关也会被删除。
gcloud
如需删除 router-fw-rules
Cloud Router 路由器,请运行以下命令:
gcloud compute routers delete router-fw-rules \ --region=us-central1
出现提示时,按 Y 键进行确认,然后按 Enter 键。
删除 Cloud Router 路由器时,关联的 Cloud NAT 网关也会被删除。
删除 VPC 网络及其子网
控制台
在 Google Cloud 控制台中,进入 VPC 网络页面。
在名称列中,点击
vpc-geo-location
。点击删除 VPC 网络。
在删除网络对话框中,点击删除。
删除 VPC 时,其子网也会被删除。
gcloud
如需删除
vpc-geo-location
VPC 网络的子网subnet-1-us
,请运行以下命令:gcloud compute networks subnets delete subnet-1-us \ --region=us-central1
出现提示时,按 Y 键进行确认,然后按 Enter 键。
如需删除
vpc-geo-location
VPC 网络的子网subnet-2-sg
,请运行以下命令:gcloud compute networks subnets delete subnet-2-sg \ --region=asia-southeast1
出现提示时,按 Y 键进行确认,然后按 Enter 键。
如需删除
vpc-geo-location
VPC 网络,请运行以下命令:gcloud compute networks delete vpc-geo-location
出现提示时,按 Y 键进行确认,然后按 Enter 键。
后续步骤
- 如需了解防火墙政策的概念性信息,请参阅防火墙政策。
- 如需了解防火墙政策规则的概念信息,请参阅防火墙政策规则。
- 如需创建、更新、监控和删除 VPC 防火墙规则,请参阅使用 VPC 防火墙规则。
- 如需确定费用,请参阅 Cloud NGFW 价格。