使用curl下载谷歌存储桶对象的基于长期密钥/令牌的方法?

0 authentication curl google-cloud-storage google-cloud-platform

好的,我的开发人员和编码人员。上周我一直在尝试使用 Google (GCP) 云存储对象来解决这个问题。这是我的目标。

  1. 该解决方案需要轻量级,因为它将用于在 docker 图像中下载图像,因此需要 curl。
  2. GCP 存储桶和对象需要安全且不公开。
  3. 我需要一个“长期”存在的票证/密钥/client_ID。

我已经尝试了 Google 文档中提到的 OAuth2.0 设置,但每次我想设置 OAuth2.0 密钥时,我都没有选择“离线”访问。最重要的是,它需要您输入将访问身份验证请求的源 URL。

此外,谷歌云存储不支持 key= 像他们的其他一些服务一样。所以这里我有一个用于我的项目的 API KEY 以及一个用于我的服务用户的 OAuth JSON 文件,但它们没有用。

我可以得到一个 curl 命令来处理临时 OAuth 不记名密钥,但我需要一个长期的解决方案。

RUN curl -X GET \
    -H "Authorization: Bearer ya29.GlsoB-ck37IIrXkvYVZLIr3u_oGB8e60UyUgiP74l4UZ4UkT2aki2TI1ZtROKs6GKB6ZMeYSZWRTjoHQSMA1R0Q9wW9ZSP003MsAnFSVx5FkRd9-XhCu4MIWYTHX" \
    -o "/home/shmac/test.tar.gz" \
    "https://www.googleapis.com/storage/v1/b/mybucket/o/my.tar.gz?alt=media"
Run Code Online (Sandbox Code Playgroud)

允许我从任何位置下载 GCP 存储桶对象的长期密钥/ID/秘密。

Joh*_*ley 5

该解决方案需要是轻量级的,因为它将用于在 docker 镜像中下载镜像,因此需要 curl。

这是一个模糊的要求。什么是轻量级?没有外部库,所有用汇编语言编写的东西都必须适合 1 KB 等。

GCP 存储桶和对象需要安全且不公开。

这个正常要求。除了一些例外(网站的静态文件存储等),您希望您的存储桶是私有的。

我需要一个“长期”存在的票证/密钥/client_ID。

我的建议是停止思考“长期关键”。安全的趋势是实施短期密钥。在 Google Cloud Storage 中,7 天被认为是长期的。3600 秒(一小时)是 Google Cloud 中几乎所有地方的标准。

对于 Google Cloud Storage,您有多种选择。您没有指定环境,因此我将包括用户凭据、服务帐户和基于预签名 url 的访问。

用户凭证

您可以使用用户凭据(例如 username@gmail.com)进行身份验证并保存刷新令牌。然后当需要访问令牌时,您可以从刷新令牌生成一个。在我关于学习 Go 语言的网站文章中,我在第 8 天编写了一个程序,该程序实现了 Google OAuth,保存了必要的凭据并根据需要创建了访问令牌和 ID 令牌,而无需进一步“登录”。源代码中的注释应该可以帮助您了解这是如何完成的。https://www.jhanley.com/google-cloud-and-go-my-journey-to-learn-a-new-language-in-30-days/#day_08

如果您需要使用用户凭据,则可以选择此选项。这种技术更复杂,需要保护机密文件,但会为您提供可刷新的长期令牌。

服务帐户凭据

服务帐户 JSON 密钥文件是服务到服务身份验证和授权的标准方法。使用这些密钥,生成有效期为一小时的访问令牌。当它们到期时,会创建新的。最大时间为 3600 秒。

如果您使用受您控制的程序以编程方式访问 Cloud Storage(服务帐户 JSON 文件必须受到保护),则可以选择此选项。

预签名 URL

这是提供对私有 Google Cloud Storage 对象的访问的标准方法。此方法需要 URL 并生成具有到期时间的签名,以便可以在定义的时间段内访问对象。您的要求之一(这是不切实际的)是您不想使用源 URL。最长的时间是 7 天。

如果您需要向第三方提供访问您的云存储对象的权限,则可以选择此选项。

基于 IAM 的访问

此方法不使用访问令牌,而是使用身份令牌。权限分配给 Cloud Storage 存储分区和对象,而不是分配给 IAM 成员账户。这种方法需要对身份在 Google Cloud Storage 中的工作方式有深入的了解,并且是 Google 安全的未来方向 - 这意味着许多服务的访问将在服务/对象的基础上进行控制,而不是通过授予对整个服务的广泛访问权限的角色一个专案。我在我关于基于身份的访问控制的文章中谈到了这一点

概括

您尚未明确定义将访问 Cloud Storage 的内容、机密的存储方式、机密是否需要防止用户访问(公共 URL 访问)等。选择取决于多种因素。

如果您阅读了我网站上的最新文章,我将讨论一些有关基于身份的访问控制的高级技术。这些功能开始出现在许多 Google 服务的 Beta 级别命令中。这包括 Cloud Scheduler、Cloud Pub/Sub、Cloud Functions、Cloud Run、Cloud KMS 等等。Cloud Storage 支持完全不需要权限的基于身份的访问 - 身份用于控制访问。