如何从没有外部 IP 的 GCE VM 中读取存储桶?

Posted

技术标签:

【中文标题】如何从没有外部 IP 的 GCE VM 中读取存储桶?【英文标题】:How to read from a Storage bucket from a GCE VM with no External IP? 【发布时间】:2019-07-25 20:27:24 【问题描述】:

我正在尝试使用 gsutil cp 命令从 GCE 虚拟机中读取存储桶中的文件。 GCE VM 使用自定义存储帐户,该帐户具有对存储桶中文件的 IAM 权限和访问策略。我的观察如下:

    当 VM 具有与其关联的临时外部 IP 时,gsutil cp 命令可以正常工作并且文件被成功复制。 但是,如果没有分配外部 IP,gsutil cp 命令将不起作用。

在情况 2 中,gsutil cp 命令产生以下输出:

gsutil cp gs://<mybucket-name>/<myfile> .
INFO 0304 13:02:18.377339 retry_util.py] Retrying request, attempt #1...
INFO 0304 13:03:20.684459 retry_util.py] Retrying request, attempt #2...
INFO 0304 13:04:25.247341 retry_util.py] Retrying request, attempt #3...
INFO 0304 13:05:34.869920 retry_util.py] Retrying request, attempt #4...
INFO 0304 13:06:52.144510 retry_util.py] Retrying request, attempt #5...

任何人都可以建议对此做出什么以及这是否是预期的行为?从没有分配外部 IP 的 GCE 虚拟机中读取存储桶中内容的正确方法是什么?

【问题讨论】:

【参考方案1】:

如果您的虚拟机实例没有外部 IP 地址,因此它可以访问云存储缺少的是为您的虚拟机实例的子网启用 Google 私有访问

如Private Access Options for Services 的文档中所述:

只有内部 IP 地址(没有外部 IP 地址)的虚拟机实例可以使用专用 Google 访问权限。它们可以访问 Google API 和服务的外部 IP 地址。

您逐个子网启用私人 Google 访问;它是 VPC 网络中的子网设置。为专用子网启用 Google Access 并查看要求,请参阅Configuring Private Google Access

您只需:

    转到控制台 -> VPC 网络 选择您的虚拟机实例的子网(例如默认 -> us-central1) 编辑并选择私人 Google 访问 -> 开启。然后保存。

还要确保您的 VM 可以访问 Cloud Storage API。

【讨论】:

那是快速清晰且非常详细的。谢谢@TasosZG。最后,从子网启用私有访问是否有任何成本影响?这个功能在 GCP 中是如何定价的? 我不确定,所以不要认为我的答案是理所当然的,但由于我无法在任何地方找到它的记录,我的猜测是没有更高的成本。还要检查GCP Pricing page。

以上是关于如何从没有外部 IP 的 GCE VM 中读取存储桶?的主要内容,如果未能解决你的问题,请参考以下文章

从没有 UITextField 的外部蓝牙键盘读取

GCE 实例 IP 地址

Google Compute Engine:如何从外部提出请求?

如何在Azure VM上配置IIS站点以接受来自其他外部IP地址的请求?

如何使用 gsutil 从 GCE 上的容器中复制存储桶中的文件

您可以从 Google Compute VM 实例中获取外部 IP 地址吗?