在 GCP 中使用私有实例和 Cloud NAT 时基于 Google API 密钥 IP 的限制

在 GCP 中使用私有实例和 Cloud NAT 时基于 Google API 密钥 IP 的限制

我正在 GCP 中使用私有 VM 实例以及 Cloud NAT 来允许此实例访问互联网。最近,我一直在尝试使用 API 密钥通过此实例访问 Google Places API 服务。在这种情况下,建议的方法是按 IP 地址限制此 API 密钥的使用。不幸的是,当我尝试执行此操作时,我收到一条REQUEST_DENIED错误消息,指出“此 IP、站点或移动应用程序无权使用此 API 密钥。从 IP 地址 {IPv6 地址已移除} 收到请求,引用者为空”——尽管 GCP 不支持 VPC 中的 IPv6 地址。

我怀疑,由于启用 Cloud NAT 会自动激活 Private Google Access,因此在请求到达 API 之前实际上会发生一些内部 GCP 私有 IPv4 到 IPv6 NAT - 但显然我无法证实这一点。

我的问题是,是否有人知道如何在此环境(私有 VM 实例 + Cloud NAT/私有 Google Access)中启用基于 IP 的 Google Places API 密钥限制?

谢谢!

答案1

  • 在建立与 Google API 服务的私人连接时,必须遵循某些程序,包括创建到 restricted.googleapis.com 的路由。相关其他详细信息可从文档

  • 您的观察是正确的,通过启用 NAT 会导致激活 P​​GA,即使它没有被手动激活,并且 Andromeda(为 GCP 提供 n/w 虚拟化)会封装 IPv4 和 IPv6。

  • 正如所提到的文档当私有虚拟机将数据包发送到目标地址(199.36.153.8/30 或 199.36.153.4/30)时,Andromeda 封装会将 IPv4 数据包包装在 Andromeda NAT64 IPv6 数据包中。这是内部可路由的。位 0 到 31 是虚拟机的 IPv4 内部地址;位 32 到 63 表示 VPC 网络的唯一 32 位标识符(称为 VNID);位 64 到 127 是所有客户的通用 64 位(8 字节)。因此,每个 GCP 虚拟机都有一个全局唯一的 IPv6 地址,可在 Google 的网络内路由。

  • 请尝试按照 API 和服务 -> 凭证中的以下设置进行操作。

    1. 选择键。
    2. 在 API 限制下,选择 API 类型。
    3. 将应用程序限制设置为无。
    4. 节省

相关内容