docker - 使用 API 和服务帐户 JSON 文件从 Google Container Registry 读取

标签 docker google-cloud-platform google-container-registry

我们已经开始迁移到 Google Container Registry,之前使用的是我们自己的内部 Docker Registry 来托管我们的镜像。作为其中的一部分,我正在创建一个应用程序,它可以查询注册表中的可用标签并返回结果列表。对于公共(public)注册表,这是微不足道的。我只是向 API 发送一个 HTTP 请求,这里用 curl 演示:

curl https://example.docker.registry/v2/myapp/tags/list

只要我先进行身份验证,这也可以在 GCR 的命令行中使用:
curl -u "oauth2accesstoken:`gcloud auth print-access-token`" https://eu.gcr.io/v2/myproject/myapp/tags/list

我想以编程方式完全做到这一点,并且我遵循了许多关于创建 GCP 服务帐户 key 的 Google 页面之一,例如:https://cloud.google.com/iam/docs/creating-managing-service-account-keys

我现在有一个服务帐户,我已经授予了必要的权限,并且我有一个用于该服务帐户的 JSON key 文件。但是我可以在网上找到的所有说明都告诉我如何将它与 gcloud 一起使用。或 docker安装。即使是使用客户端库的步骤在文档和解释上也很薄弱,以至于我无法取得进展。

我的应用程序不需要额外工具的复杂性,我只想以与公共(public)注册表相同的方式发送 HTTP 请求。我希望 JSON 访问 key 文件包含我需要的所有部分,即使首先与 Google 进行了仪式交换。我找不到任何关于如何使用这些内容的信息。这在任何地方都有记录吗?

最佳答案

My application doesn't need the complexity of extra tools, I just want to send a HTTP request in the same way I do with the public registry. I expect that the JSON access key file contains all the pieces I need, even if there is a ritual exchange with Google first. I can't find any info on how to use the contents though. Is this documented anywhere?



从服务帐户 JSON 文件到 OAuth 访问 token 的步骤并没有真正被 Google 在任何地方记录。问题是 OAuth 非常广泛,并且有许多功能和实现细节。我们通过研究库中的源代码来学习如何做到这一点。

我写了一篇文章,详细介绍了这一点,并包含了工作 Python 代码。本文包含一个进行 REST API 调用的示例。我网站上的其他文章还包括使用 OAuth 访问 token 进行 REST API 调用的示例。

Google Cloud – Creating OAuth Access Tokens for REST API Calls

乍一看,这个过程似乎很复杂,但一旦你掌握了一切,就很容易理解。

我的文章介绍了如何执行以下步骤以从 JSON 到 OAuth token 再到 REST API。
  • 如何从 Json 文件加载服务帐户凭据。
  • 如何提取用于签署请求的私钥。
  • 如何为 Google Oauth 2.0 创建 JWT(Json Web token )。
  • 如何设置 Google 范围(权限)。
  • 如何签署 JWT 以创建 Signed-JWT (JWS)。
  • 如何将 Signed-JWT 交换为 Google OAuth 2.0 访问 token 。
  • 如何设置过期时间。此程序默认为 3600 秒(1 小时)。
  • 如何调用 Google API 并设置授权 header 。
  • 关于docker - 使用 API 和服务帐户 JSON 文件从 Google Container Registry 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56128207/

    相关文章:

    reactjs - "Create React App"与 Docker

    docker - 在CLI中使用多个Docker Compose配置文件时,是否需要在所有命令运行中进行指定?

    google-cloud-platform - Dialogflow 列表第一次在 Google 助理上不起作用

    node.js - 如何使用 NodeJS 在 firebase 模拟器中模拟身份验证 Multi-Tenancy ?

    docker - 如何从 Google 容器注册表中了解我的容器镜像使用了多少空间

    docker - Gsutil 在 Google Compute Engine 上的 Dockerfile 中不起作用

    docker - 使用 VSCode 在远程 SSH 主机中打开容器

    java - docker-compose:容器之间没有连接

    google-cloud-platform - 区域 europe-west1 去了哪里?

    kubernetes 拉取私有(private)镜像失败 [Google Cloud Container Registry, Digital Ocean]