如何使用 IAM 将文件从 google 云实例上传到云存储?
How to upload file from google cloud instance to cloud storage with IAM?
我希望文件自动从云虚拟机上传到云存储。有什么方法可以在不将 google 访问密钥 ID 放入实例的情况下执行此操作?
有一种巧妙的方法可以在 GCE 中处理身份验证。 GCE 实例可以有一个关联的服务帐户,代表该 GCE 实例上的程序 运行。该服务帐户可以像任何其他帐户一样被授予写入您的 GCS 存储桶的权限。
在已部署的 GCE 实例上可以轻松获得用作此服务帐户的凭据。最简单的方法是使用支持应用程序默认凭据的 Google 工具或库。如果您的授权代码完全是自定义的,您可以直接从 URL “http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token” 检索该服务帐户的访问令牌(如果这样做,您还必须包括 header "Metadata-Flavor: Google").
GCS command-line 实用程序 gsutil 在 GCE 实例上 pre-installed,它可以使用应用程序默认凭据。如果您从脚本或 shell 调用它,它会将文件上传到云存储,无需进一步配置。
要使服务帐户与 GCS 一起使用,有一个重要技巧。 GCE 要求您指定服务帐户的范围,默认情况下 GCS 不包含在这些范围内,这意味着服务帐户最初不会与 GCS 一起使用。您需要将 GCS 添加到允许的范围并重新启动实例。
为 GCE 实例配置服务帐户的文档在这里:https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances
有关如何使用应用程序默认凭据的文档位于此处:https://developers.google.com/identity/protocols/application-default-credentials
我希望文件自动从云虚拟机上传到云存储。有什么方法可以在不将 google 访问密钥 ID 放入实例的情况下执行此操作?
有一种巧妙的方法可以在 GCE 中处理身份验证。 GCE 实例可以有一个关联的服务帐户,代表该 GCE 实例上的程序 运行。该服务帐户可以像任何其他帐户一样被授予写入您的 GCS 存储桶的权限。
在已部署的 GCE 实例上可以轻松获得用作此服务帐户的凭据。最简单的方法是使用支持应用程序默认凭据的 Google 工具或库。如果您的授权代码完全是自定义的,您可以直接从 URL “http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token” 检索该服务帐户的访问令牌(如果这样做,您还必须包括 header "Metadata-Flavor: Google").
GCS command-line 实用程序 gsutil 在 GCE 实例上 pre-installed,它可以使用应用程序默认凭据。如果您从脚本或 shell 调用它,它会将文件上传到云存储,无需进一步配置。
要使服务帐户与 GCS 一起使用,有一个重要技巧。 GCE 要求您指定服务帐户的范围,默认情况下 GCS 不包含在这些范围内,这意味着服务帐户最初不会与 GCS 一起使用。您需要将 GCS 添加到允许的范围并重新启动实例。
为 GCE 实例配置服务帐户的文档在这里:https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances
有关如何使用应用程序默认凭据的文档位于此处:https://developers.google.com/identity/protocols/application-default-credentials