配置专用 Google 访问权限

启用专用 Google 访问权限之后,那些只具有内部(专用)IP 地址(无外部 IP 地址)的虚拟机实例将可以访问 Google API 和服务的公共 IP 地址。您可以在子网级启用专用 Google 访问权限。启用后,相应子网中仅具有专用 IP 地址的实例可以通过默认路由 (0.0.0.0/0)(下一个跃点指向默认互联网网关),向 Google API 和服务发送流量。

启用专用 Google 访问权限之后,您可通过仅具有内部 IP 地址的虚拟机实例访问特定的 Google Cloud 服务。如需详细了解专用 Google 访问权限和其他专用访问选项,请参阅服务的专用访问选项

要查看可与专用 Google 访问权限搭配使用且符合条件的 API 和服务,请参阅专用 Google 访问权限概览中的支持的服务

规范

权限

拥有网络管理员角色的项目所有者、编辑者和 IAM 成员可以创建或更新子网并分配 IP 地址。

如需详细了解角色,请参阅 IAM 角色文档。

API 和服务的 DNS 解析

为子网启用专用 Google 访问权限后,与 Google API 或服务关联的网域(包括 *.googleapis.comgcr.io)的 DNS 解析不会发生变化。Google API 和服务的 DNS 记录始终指向外部 IP 地址。Google API 和服务使用的外部 IP 地址池可能随时会有变化,但可以通过查询 _spf.google.com 及其引用的 TXT 记录来确定。

例如:

dig -t TXT _spf.google.com

专用 Google 访问权限与适当的路由协同作用,以允许仅具有内部 IP 地址的虚拟机实例访问 Google API 和服务的外部 IP 地址。

日志记录

Stackdriver Logging 会记录子网中具备专用 Google 访问权限的虚拟机实例发出的所有 API 请求。日志条目会使用实例的专用 IP 来标识 API 请求的来源。

您可以将每日使用情况报告和每月汇总报告配置为传送到 Cloud Storage 存储分区。如需了解详情,请参阅查看使用情况报告

要求

专用 Google 访问权限具有以下要求:

  • 专用 Google 访问权限不会自动启用任何 API。您必须通过 Google Cloud Platform Console 中的“API 和服务”页面分别启用您需要使用的 Google API

  • 专用 Google 访问权限需要 VPC 网络。自动模式和自定义模式 VPC 网络均受支持。旧版网络不受支持。

  • 专用 Google 访问权限仅适用于那些只有内部 IP 地址的实例。启用或停用专用 Google 访问权限对具有外部 IP 地址的实例没有影响。

  • 您可以按子网启用专用 Google 访问权限(可以在创建子网时启用,也可以稍后通过修改子网来启用)。为某个子网启用专用 Google 访问权限后,专用 Google 访问权限将应用于该子网中没有外部 IP 地址的新虚拟机实例和现有虚拟机实例。

  • 专用 Google 访问权限需要一条通向 Google API 和服务所用公共 IP 地址的路由。默认路由通常会提供此路径。如需了解详情,请参阅路由部分。

路由

使用默认路由进行路由

在典型的 VPC 网络中,默认路由的主要用途是确保具有外部 IP 地址的实例能够访问互联网。

不过,专用 Google 访问权限会使用默认路由将流量从启用了专用 Google 访问权限的子网中的实例发送到 Google API 和服务的外部 IP 地址。如需了解路由在 GCP 中的工作原理,请参阅路由概览

如果您指定了目标为 0.0.0.0/0 且下一个跃点不是 default Internet gateway 的自定义路由,则专用 Google 访问权限将无法使用默认路由。这种情况下,您必须创建一组自定义路由,以满足专用 Google 访问权限的路由要求。例如,对于以下情况,您必须创建自定义路由:

  • 您有一个自定义静态路由,用于将目标为 0.0.0.0/0 的流量定向到 Cloud VPN 隧道或另一个实例(例如 NAT 实例
  • 您使用 Cloud Router 接受目标为 0.0.0.0/0 的某个自定义动态路由

高级路由

您可以创建一组自定义静态路由,以将流量发送到 Google API 和服务的外部 IP 地址。在这组路由中,每个路由的下一个跃点均必须是 default Internet gateway,但每个路由的目标应为 Google API 和服务所使用的 IP 范围集中的唯一 IP 地址范围。要确定这些 IP 范围,请参阅 API 和服务的 DNS 解析

检查默认路由

要确定某个网络是否存在默认路由,请使用 GCP Console 或 gcloud 命令行工具:

Console

  1. 转到 Google Cloud Platform Console 中的“路由”页面。
    转到“路由”页面
  2. 过滤路由列表,以便仅显示您需要检查的网络所对应的路由。
  3. 查找目标为 0.0.0.0/0 且下一个跃点为默认互联网网关的路由。

gcloud

使用以下 gcloud 命令,将 [NETWORK-NAME] 替换为要检查的网络的名称:

gcloud compute routes list --filter="default-internet-gateway [NETWORK-NAME]"

创建所需的路由

如果您可将默认路由用于专用 Google 访问权限且需要重新创建该路由,请使用以下目标和下一个跃点创建替换性的自定义静态路由

  • 目标:0.0.0.0/0
  • 下一个跃点:默认互联网网关

如果您无法使用默认路由,则可以创建多个自定义静态路由,以满足专用 Google 访问权限的路由要求,其中每个路由都具有以下目标和下一个跃点:

  • 目标:Google API 和服务所用的 IP 地址范围之一。
  • 下一个跃点:默认互联网网关

防火墙规则

除满足路由要求外,您网络中的防火墙规则还必须允许从虚拟机访问 Google API 和 GCP 服务。

对于使用专用 Google 访问权限的实例,您必须允许从实例到 Google API 和服务的出站流量。如果您设置了拒绝出站流量的防火墙规则,则可以选择性地将该规则应用于不需要专用 Google 访问权限的其他实例,或者您可以创建优先级更高的规则来覆盖该规则,以允许流量发送到 Google API 和服务。如果您选择创建优先级更高的防火墙规则以允许专用 Google 访问权限流量,请考虑以下选项:

  • 创建允许出站流量发送到 0.0.0.0/0 地址范围的防火墙规则,这表示出站流量可以到达任何目标。通过在防火墙规则上设置目标标记,仅将该规则应用于需要专用 Google 访问权限的实例。在实例上使用源标记或服务帐号。由于创建的规则仅适用于没有外部 IP 地址的特定对象,因此可以对宽泛的目标范围起到弥补作用。没有外部 IP 地址的实例无法在 VPC 网络外部发送数据包。如需了解详情,请参阅互联网访问要求
  • 如果您通过创建多个防火墙规则来允许专用 Google 访问权限出站流量发送到特定目标,则必须定期查看和更新这些规则,以确保其中包含 Google API 和服务使用的所有可能的 IP 地址范围。要确定这些 IP 范围,请参阅 API 和服务的 DNS 解析部分。

配置步骤

默认情况下,专用 Google 访问权限未启用。您可以在创建子网时启用此功能,也可以通过修改子网来启用或停用此功能。

启用专用 Google 访问权限

请按照以下步骤启用专用 Google 访问权限:

Console

  1. 转到 Google Cloud Platform Console 中的 VPC 网络页面。
    转到“VPC 网络”页面
  2. 点击包含相应子网(您需要为该子网启用专用 Google 访问权限)的网络的名称。
  3. 对于现有子网:
    1. 点击该子网的名称。系统会显示子网详情页面。
    2. 点击修改
    3. 专用 Google 访问权限部分,选择开启
    4. 点击保存
  4. 对于新子网:
    1. 点击添加子网
    2. 指定新子网的名称区域
    3. 指定子网的 IP 地址范围。此范围不能与当前 VPC 网络或者通过 VPC 网络对等互连或 VPN 连接的任何网络中的任何子网重叠。
    4. 如果您要为该子网创建次要范围,请点击创建次要 IP 范围
    5. 专用 Google 访问权限部分,选择开启
    6. 点击添加

gcloud

对于现有子网:

  1. 确定该子网的名称和区域。要列出某个特定网络的子网,请使用以下命令,并将 [NETWORK-NAME] 替换为该网络的名称:

    gcloud compute networks subnets list --filter=[NETWORK-NAME]
    
  2. 运行以下命令以启用专用 Google 访问权限,并将 [SUBNET-NAME][REGION] 分别替换为该子网的名称和区域:

    gcloud compute networks subnets update [SUBNET-NAME] \
    --region [REGION] \
    --enable-private-ip-google-access
    
  3. 运行以下命令,以验证是否已启用专用 Google 访问权限:

    gcloud compute networks subnets describe [SUBNET-NAME] \
    --region [REGION] \
    --format="get(privateIpGoogleAccess)"
    

创建新子网时,请添加 --enable-private-ip-google-access 参数。以下示例会创建一个新子网:

gcloud compute networks subnets create [SUBNET-NAME] \
--region [REGION] \
--network [NETWORK] \
--range [IP-RANGE] \
--enable-private-ip-google-access

其中:

  • [SUBNET-NAME] 是该子网的名称。
  • [NETWORK] 是包含该子网的 VPC 网络的名称。
  • [IP-RANGE] 是该子网的主要 IP 地址范围。
  • [REGION] 是该子网的区域。

停用专用 Google 访问权限

请按照以下步骤为现有子网停用专用 Google 访问权限:

Console

  1. 转到 Google Cloud Platform Console 中的 VPC 网络页面。
    转到“VPC 网络”页面
  2. 点击包含相应子网(您需要为该子网停用专用 Google 访问权限)的网络的名称。
  3. 点击现有子网的名称。系统会显示子网详情页面。
  4. 点击修改
  5. 专用 Google 访问权限部分,选择关闭
  6. 点击保存

gcloud

  1. 确定该子网的名称和区域。要列出某个特定网络的子网,请使用以下命令,并将 [NETWORK-NAME] 替换为该网络的名称:

    gcloud compute networks subnets list --filter=[NETWORK-NAME]
    
  2. 运行以下命令以停用专用 Google 访问权限,并将 [SUBNET-NAME][REGION] 分别替换为该子网的名称和区域:

    gcloud compute networks subnets update [SUBNET-NAME] \
    --region [REGION] \
    --no-enable-private-ip-google-access
    
  3. 运行以下命令,以验证是否已启用专用 Google 访问权限:

    gcloud compute networks subnets describe [SUBNET-NAME] \
    --region [REGION] \
    --format="get(privateIpGoogleAccess)"
    

从实例中移除外部 IP 地址

由于专用 Google 访问权限仅与没有外部 IP 地址的实例相关,因此,在为子网启用专用 Google 访问权限后,您可能需要修改正在运行的实例。要从实例中移除外部 IP 地址,请参阅 Compute Engine 文档中的取消分配静态外部 IP 地址

如需详细了解实例 IP 地址,请参阅 Compute Engine 文档中的 IP 地址

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页