配置分层防火墙政策以允许来自特定 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. 点击创建实例

  3. 对于名称,输入 myvpc-vm

  4. 对于区域,选择 us-central1(爱荷华)

  5. 展开高级选项,然后展开网络

  6. 网络接口部分中,展开现有网络接口并指定以下配置参数:

    • 网络:选择 myvpc
    • 子网:选择 subnet-1 IPv4 (10.0.0.0/24)
    • 外部 IPv4 地址:选择
  7. 点击完成

  8. 点击创建

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

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

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

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

    转到“创建实例”

  2. 点击创建实例

  3. 对于名称,输入 testvpc-vm

  4. 对于区域,请选择 us-central1 (Iowa)

  5. 展开高级选项,然后展开网络

  6. 网络接口部分中,展开现有网络接口并指定以下配置参数:

    • 网络:选择 test-vpc
    • 子网:选择 testvpc-subnet-1 IPv4 (10.0.0.0/16)
    • 外部 IPv4 地址:选择
  7. 点击完成

  8. 点击创建

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

  1. 点击创建实例
  2. 对于名称,输入 testvpc-apache-vm
  3. 对于区域,请选择 us-central1 (Iowa)
  4. 展开高级选项,然后展开网络
  5. 网络接口部分中,展开现有网络接口并指定以下配置参数:
    • 网络:选择 test-vpc
    • 子网:选择 testvpc-subnet-ext IPv4 (192.168.1.0/24)
    • 外部 IPv4 地址:选择临时
  6. 展开管理
  7. 元数据部分的启动脚本字段中输入以下脚本:

      #! /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 服务器。

  8. 点击完成

  9. 点击创建

  10. 记下虚拟机实例页面中分配给此虚拟机的临时外部 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,然后点击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,然后点击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,然后点击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,然后点击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. 如需验证是否允许从 myvpc 流向 testvpc-apache-vm 的出站流量,请运行以下命令:

    curl <external_ephemeral_IP_testvpc_apache_vm> -m 2
    

    上述命令会返回您为 Apache Web 服务器的 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-vmmyvpc-vmmyvpc-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,然后点击仍要删除以删除项目。

后续步骤