Docker 容器内推荐的 GCE 服务帐户身份验证?

Recommended GCE service account authentication inside Docker container?

在自定义构建的 CentOS Docker 容器中部署 Google 服务帐户凭据的最佳方法是什么,以便 运行ning 在 Google 的容器引擎或他们 'container-vm'?这种行为在 google/cloud-sdk 容器上自动发生,它是 运行 的 debian 并且包括我没有使用的东西,例如 app-eng/java/php。理想情况下,我尝试访问项目中的非 public 资源,例如 Google Cloud Storage 存储桶对象,每次启动大量此类容器时都无需登录和授权。

例如,在基础 Centos 容器上 运行在 GCE 上安装了自定义代码和 gcloud/gsutil,当您 运行:

docker run --rm -ti custom-container gsutil ls

系统会提示您 运行 "gsutil config" 以获得授权,这是我所期望的。

然而,将 google/cloud-sdk 容器下拉到同一个 GCE 并执行相同的命令,它似乎巧妙地配置了凭据继承(可能来自主机容器-vm 的凭据?)。当 运行ning 容器在 GCE 上访问私有资源时,这似乎绕过了 运行ning "gsutil config"。

我希望在最小构建的 Centos 容器中复制该行为以进行大规模部署。

更新: 自 2016 年 12 月 15 日起,更新现有 VM 范围的功能现在处于测试阶段;有关详细信息,请参阅


旧答案: 一种方法是使用 appropriate scopes (e.g., Google Cloud Storage read-only or read-write) and then all processes on the VM, including containers, will have access to credentials that they can use via OAuth 2.0; see docs for Google Cloud Storage and Google Compute Engine.

创建 VM

请注意,一旦创建了具有某些范围集的 VM,以后就无法更改它们(既不能添加也不能删除),因此您必须确保在创建 VM 实例时设置正确的范围集.

跟进。

我不再使用 /.config & /.gce 目录和一组非常小的 GCE SDK 组件(没有 JDK/PHP/etc)。 wheezy-cloudtools Dockerfile 被证明是我能找到的最好的例子。

您的答案可能是本文档中的内容:

Container-Registry Advance Authentication

它包含使用

Docker 个容器的身份验证方法
  • 独立凭证助手
  • 访问令牌
  • JSON 密钥文件
  • gcloud 凭证助手(推荐)

对于 gcloud,它指出:

使用 gcloud 工具在 Cloud Shell or any environment where the Cloud SDK 中配置身份验证已安装。 Cloud Shell 包含 Docker.

的当前版本
  1. 配置身份验证:

以执行 运行 Docker 命令的用户身份登录 gcloud。 要使用用户凭据配置身份验证,运行 以下命令:

gcloud auth login
  1. 要使用服务帐户凭据配置身份验证,运行以下命令:
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE

在哪里

  • ACCOUNT 是格式为 [USERNAME]@[PROJECT-ID].iam.gserviceaccount.com 的服务帐户名称。您可以在 Cloud Console 的 Service Accounts 页面或使用命令 gcloud iam service-accounts list
  • KEY-FILE 是服务帐户密钥文件。有关创建密钥的信息,请参阅 Identity and Access Management (IAM) documentation
  1. 使用以下命令配置 Docker:
gcloud auth configure-docker

您的凭据保存在您的用户主目录中。
Linux: $HOME/.docker/config.json
Windows: %USERPROFILE%/.docker/config.json