如何从没有外部 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 中读取存储桶?的主要内容,如果未能解决你的问题,请参考以下文章
Google Compute Engine:如何从外部提出请求?
如何在Azure VM上配置IIS站点以接受来自其他外部IP地址的请求?