配置分层防火墙政策以允许来自特定 VPC 网络的出站流量

了解如何创建和配置分层防火墙政策,以允许源自文件夹中的特定 Virtual Private Cloud (VPC) 网络的出站流量流向作为目的地的特定 IP 地址。防火墙政策会阻止源自您的文件夹的所有其他出站流量。本页面通过一个示例演示了如何创建两个 VPC 网络、在 VPC 网络中创建虚拟机 (VM) 实例、设置包含防火墙规则的分层防火墙政策,然后测试防火墙政策。

准备工作

创建文件夹

在您的组织中创建文件夹。

  1. 在 Google Cloud 控制台中,前往管理资源页面。

    转到“管理资源”

  2. 点击创建文件夹

  3. 文件夹名称字段中,输入 test-folder

  4. 组织列表中,选择组织资源的名称。

  5. 位置字段中,点击浏览,然后选择组织资源。

  6. 点击创建

创建项目

在您在上一部分中创建的文件夹中创建项目。

  1. 在 Google Cloud 控制台中,前往管理资源页面。

    转到“管理资源”

  2. 点击 Create project

  3. 项目名称字段中,输入 test-project

  4. 为项目选择结算账号。

  5. 组织列表中,选择组织资源的名称。

  6. 位置字段中,点击浏览,展开组织资源的名称,然后选择 test-folder

  7. 点击创建

创建两个具有 IPv4 子网的自定义 VPC 网络

在上一部分中创建的项目中创建两个自定义模式 VPC 网络:myvpc 具有一个仅 IPv4 的子网,test-vpc 具有两个仅 IPv4 的子网。

  1. 在 Google Cloud 控制台的项目选择器页面上,选择 test-project

    转到“项目选择器”

  2. 在 Google Cloud 控制台中,前往 VPC 网络页面。

    进入 VPC 网络页面

  3. 点击创建 VPC 网络

  4. 对于名称,输入 myvpc

  5. 对于子网创建模式,选择自定义

  6. 新子网部分,为子网指定以下配置参数:

    • 名称:输入 myvpc-subnet-1
    • 区域:选择 us-central1
    • IPv4 范围:输入 10.0.0.0/24
  7. 点击完成,然后点击创建

  8. 如需创建其他 VPC 网络,请点击创建 VPC 网络

  9. 对于名称,输入 test-vpc

  10. 对于子网创建模式,选择自定义

  11. 新子网部分中,为子网指定以下配置参数,然后点击完成

    • 名称:输入 testvpc-subnet-1
    • 区域:选择 us-central1
    • IPv4 范围:输入 10.0.0.0/16
  12. 如需向 test-vpc 网络添加其他子网,请点击添加子网

  13. 新子网部分中,为子网指定以下配置参数,然后点击完成

    • 名称:输入 testvpc-subnet-ext
    • 区域:选择 us-central1
    • IPv4 范围:输入 192.168.1.0/24
  14. 点击创建

创建虚拟机

在上一部分中配置的子网中创建三个虚拟机。

myvpc 网络中创建一个虚拟机

myvpc 网络中创建一个没有外部 IP 地址的虚拟机。

  1. 在 Google Cloud 控制台中,前往创建实例页面。

    转到“创建实例”

  2. 机器配置窗格中,执行以下操作:

    1. 对于名称,输入 myvpc-vm
    2. 对于区域,请选择 us-central1 (Iowa)
  3. 在导航菜单中,点击网络

    1. 网络接口部分中,点击 default 并指定以下配置参数:
      • 网络myvpc
      • 子网myvpc-subnet-1 IPv4 (10.0.0.0/24)
      • 外部 IPv4 地址
    2. 点击完成
  4. 点击创建

test-vpc 网络中创建两个虚拟机

创建两个虚拟机,一个没有外部 IP 地址,另一个有外部 IP 地址。创建具有外部 IP 地址的虚拟机时,请传递启动脚本以在该虚拟机中安装和启动 Apache Web 服务器。

创建没有外部 IP 地址的虚拟机:

  1. 在 Google Cloud 控制台中,前往创建实例页面。

    转到“创建实例”

  2. 机器配置窗格中,执行以下操作:

    1. 对于名称,输入 testvpc-vm
    2. 对于区域,请选择 us-central1 (Iowa)
  3. 在导航菜单中,点击网络

    1. 网络接口部分中,点击 default 并指定以下配置参数:
      • 网络test-vpc
      • 子网testvpc-subnet-1 IPv4 (10.0.0.0/16)
      • 外部 IPv4 地址
    2. 点击完成
  4. 点击创建

创建一个具有临时外部 IP 地址的虚拟机,并传递启动脚本以安装和启动 Apache Web 服务器:

  1. 在 Google Cloud 控制台中,前往创建实例页面。

    转到“创建实例”

  2. 机器配置窗格中,执行以下操作:

    1. 对于名称,输入 testvpc-apache-vm
    2. 对于区域,请选择 us-central1 (Iowa)
  3. 在导航菜单中,点击网络

    1. 网络接口部分中,点击 default 并指定以下配置参数:
      • 网络test-vpc
      • 子网testvpc-subnet-ext IPv4 (192.168.1.0/24)
      • 外部 IPv4 地址临时
    2. 点击完成
  4. 在导航菜单中,点击高级,然后在启动脚本字段中输入以下脚本:

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    # Read VM network configuration:
    md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
    vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
    filter="{print \$NF}"
    vm_network="$(curl $md_vm/network-interfaces/0/network \
    -H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
    vm_zone="$(curl $md_vm/zone \
    -H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
    # Apache configuration:
    echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
    tee /var/www/html/index.html
    systemctl restart apache2
    

    上述脚本会在此虚拟机中部署和启动 Apache Web 服务器。

  5. 点击创建

  6. 请记下从虚拟机实例页面为此虚拟机分配的临时外部 IP 地址。您稍后需要使用此外部 IP 地址。

创建 Cloud Router 路由器和 Cloud NAT 网关

在上一部分的 myvpc 网络中,您创建了没有任何外部 IP 地址的 myvpc-vm 虚拟机。如需使 myvpc-vm 虚拟机能够通过公共互联网访问 testvpc-apache-vm 中运行的 Apache Web 服务器,请在您创建 myvpc-vm 虚拟机所在的子网上创建 Cloud Router 路由器和 Cloud NAT 网关。

  1. 在 Google Cloud 控制台中,前往 Cloud NAT 页面。

    进入 Cloud NAT

  2. 点击开始使用创建 Cloud NAT 网关

    注意:如果这是您创建的第一个 Cloud NAT 网关,请点击开始。如果您已有网关, Google Cloud会显示创建 Cloud NAT 网关按钮。如需创建其他网关,请点击创建 Cloud NAT 网关

  3. 对于网关名称,输入 myvpc-gateway

  4. NAT 类型列表中,选择公共

  5. 选择 Cloud Router 路由器部分中,指定以下配置参数:

    • 网络:选择 myvpc
    • 区域:选择 us-central1(爱荷华)
    • Cloud Router:点击创建新路由器
      1. 对于名称,输入 myvpc-router
      2. 点击创建
  6. 点击创建

创建分层防火墙政策并添加防火墙规则

创建分层防火墙政策,并向其中添加以下防火墙政策规则:

  • test-folder 中的所有虚拟机启用 IAP,以便对虚拟机启用管理员访问权限。
  • 允许流向 test-vpc 网络中所有虚拟机的入站流量。
  • 将来自 myvpc 网络的出站流量委托给层次结构中的下一层规则,即 VPC firewall implied IPv4 rule egress all 规则
  • 拒绝来自 test-folder 中所有其他 VPC 网络的出站流量。

如需创建分层防火墙政策,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往项目选择器页面,然后选择 test-folder

    转到“项目选择器”

  2. 在 Google Cloud 控制台中,前往防火墙政策页面。

    转到“防火墙政策”

  3. 点击创建防火墙政策

  4. 配置政策部分的政策名称字段中,输入 fw-egress-specific-vpc

  5. 对于说明,输入 example-firewall-policy

  6. 点击继续

  7. 添加规则部分中,点击继续。您将在本快速入门的后续部分中添加防火墙规则。

  8. 将政策与资源相关联部分中,点击添加

  9. 展开您的组织,选择 test-folder,然后点击添加

  10. 点击创建

添加防火墙规则以在 test-folder 中的所有虚拟机中启用 IAP

如需使 IAP 能够连接到 test-folder 中的所有虚拟机,您需要分层防火墙政策中具有以下特征的防火墙规则:

  • 适用于 test-folder 中您希望可以使用 IAP TCP 转发访问的所有虚拟机。
  • 允许 IP 地址范围 35.235.240.0/20 的入站流量。 此范围包含 IAP 用于 TCP 转发的所有 IP 地址。
  • 允许与您希望可以使用 IAP TCP 转发访问的所有端口(例如,用于 SSH 的端口 22)的连接。

如需添加防火墙规则,请按照以下步骤操作:

  1. 在 Google Cloud 控制台中,前往防火墙政策页面。

    转到“防火墙政策”

  2. 点击 fw-egress-specific-vpc,然后点击添加规则

  3. 优先级字段中,输入 100

  4. 对于说明,输入 enable-iap

  5. 对于流量方向,选择入站

  6. 对于对匹配项执行的操作,选择允许

  7. 来源部分的 IP 范围中,输入 35.235.240.0/20

  8. 协议和端口部分中,选择指定的协议和端口

  9. 选中 TCP 复选框,在端口字段中,输入 22

  10. 点击创建

添加防火墙规则以允许 test-vpc 网络中的入站流量

添加一条防火墙规则,允许 TCP 端口 80 上的传入 HTTP Web 流量传送到 test-vpc 网络中的所有虚拟机:

  1. 在 Google Cloud 控制台中,前往防火墙政策页面。

    转到“防火墙政策”

  2. 点击 fw-egress-specific-vpc,然后点击添加规则

  3. 优先级字段中,输入 200

  4. 对于说明,输入 allow-ingress-testvpc

  5. 对于流量方向,选择入站

  6. 对于对匹配项执行的操作,选择允许

  7. 目标部分中,点击添加广告资源网

  8. 选择包含 test-vpc 网络的测试项目,然后选择 test-vpc 作为网络。

  9. 来源部分的 IP 范围中,输入 0.0.0.0/0

  10. 协议和端口部分中,选择指定的协议和端口

  11. 选中 TCP 复选框,在端口字段中,输入 80

  12. 点击创建

添加防火墙规则以将来自 myvpc 网络的出站流量委托给层次结构中的下一层规则

添加使用 goto_next 操作的防火墙规则,以将来自 myvpc 网络的出站流量委托给防火墙中的下一层规则,即隐式 IPv4 允许出站流量 VPC 防火墙规则。

  1. 在 Google Cloud 控制台中,前往防火墙政策页面。

    转到“防火墙政策”

  2. 点击 fw-egress-specific-vpc,然后点击添加规则

  3. 优先级字段中,输入 300

  4. 对于说明,输入 delegate-egress-myvpc

  5. 流量方向列表中,选择出站

  6. 对匹配项执行的操作字段中,选择转到下一层

  7. 目标部分中,点击添加广告资源网

  8. 选择包含 myvpc 的测试项目名称,然后选择 myvpc 作为网络。

  9. 目的地部分的 IP 范围字段中,输入运行 Apache Web 服务器的虚拟机的临时外部 IP 地址。您已test-vpc 网络中创建两个虚拟机部分中记下此 IP 地址。

  10. 点击创建

添加防火墙规则以拒绝来自所有其他 VPC 网络的出站流量

最后,添加一条防火墙规则,以拒绝从 test-folder 中的所有其他 VPC 网络传出的流量。

  1. 在 Google Cloud 控制台中,前往防火墙政策页面。

    转到“防火墙政策”

  2. 点击 fw-egress-specific-vpc,然后点击添加规则

  3. 优先级字段中,输入 400

  4. 对于说明,输入 block-egress-all-traffic

  5. 流量方向列表中,选择出站

  6. 对匹配项执行的操作部分,选择拒绝

  7. 目的地部分的 IP 范围中,输入 0.0.0.0/0

  8. 点击创建

测试分层防火墙政策

配置分层防火墙政策后,请按照以下步骤来测试该政策:

  1. 前往 Google Cloud 控制台。

    前往 Google Cloud 控制台

  2. 从页面顶部的项目选择器中,选择您在其中创建 VPC 网络test-project

  3. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到虚拟机实例

  4. myvpc-vm连接列中,点击 SSH

  5. SSH-in-browser 对话框中,点击授权并等待连接建立。

  6. 如需验证是否允许从 myvpctestvpc-apache-vm 发出出站流量,请运行以下命令:

    curl <external_ephemeral_IP_testvpc_apache_vm> -m 2
    

    上述命令会返回您为 Apache 网络服务器的 index.html 页面指定的内容,这意味着允许从 myvpc 进行出站连接。

  7. 如需验证来自组织中的任何其他 VPC 网络的出站流量是否被阻止,请执行以下操作:

    1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

      转到虚拟机实例

    2. testvpc-vm连接列中,点击 SSH

    3. SSH-in-browser 对话框中,点击授权并等待连接建立。

    4. 如需验证从 testvpc-vmtestvpc-apache-vm 的出站流量是否被阻止,请运行以下命令:

      curl <internal_IP_testvpc_apache_vm> -m 2
      

      上述命令会返回 Connection timed out 消息,这是正常的,因为您创建了防火墙规则来拒绝组织中除 myvpc 之外的所有其他 VPC 网络的出站流量。

清理

为避免因本快速入门中使用的资源导致您的 Google Cloud 账号产生费用,请逐个删除资源,然后删除项目和文件夹。

如需删除在本快速入门中创建的资源,请完成以下任务。

删除分层防火墙政策

  1. 前往 Google Cloud 控制台。

    前往 Google Cloud 控制台

  2. 从页面顶部的项目选择器中,选择您在其中为本快速入门创建资源的 test-folder

  3. 在 Google Cloud 控制台中,前往防火墙政策页面。

    转到“防火墙政策”

  4. 与该节点关联或者由该节点继承的防火墙政策部分中,点击 fw-egress-specific-vpc

  5. 点击关联标签页。

  6. 选中 test-folder 对应的复选框,然后点击移除关联

  7. 移除与 test-folder 的关联对话框中,点击删除

  8. 点击删除

  9. 删除 fw-egress-specific-vpc 对话框中,点击删除

删除虚拟机

  1. 前往 Google Cloud 控制台。

    前往 Google Cloud 控制台

  2. 从页面顶部的项目选择器中,选择 test-project

  3. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到虚拟机实例

  4. 选中 myvpc-vmtestvpc-vmtestvpc-apache-vm 对应的复选框。

  5. 点击删除

  6. 删除 3 个实例对话框中,点击删除

删除 Cloud Router 路由器和 Cloud NAT 网关

  1. 在 Google Cloud 控制台中,前往 Cloud Router 页面。

    前往“Cloud Router 路由器”

  2. 选中 myvpc-router 对应的复选框。

  3. 点击删除

  4. 删除 myvpc-router 对话框中,点击删除

删除 Cloud Router 路由器时,关联的 Cloud NAT 网关也会被删除。

删除 VPC 网络及其子网

  1. 在 Google Cloud 控制台中,前往 VPC 网络页面。

    进入 VPC 网络页面

  2. 名称列中,点击 myvpc

  3. 点击删除 VPC 网络

  4. 删除网络对话框中,点击删除

    同样,请删除 test-vpc 网络。

删除 VPC 网络时,其子网也会被删除。

删除项目

  1. 在 Google Cloud 控制台中,前往管理资源页面。

    转到“管理资源”

  2. 如果您打算删除的项目已附加到某个组织,请展开名称列中的组织列表。
  3. 在项目列表中,选择要删除的项目,然后点击删除
  4. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除此文件夹

  1. 在 Google Cloud 控制台中,前往管理资源页面。

    转到“管理资源”

  2. 如果您打算删除的项目已附加到某个组织,请展开名称列中的组织列表。

  3. 在文件夹列表中,选择 test-folder,然后点击删除

  4. 在对话框中输入文件夹 ID,然后点击仍要删除以删除项目。

后续步骤