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

时间:2015-02-12 07:30:11

标签: docker google-cloud-storage google-compute-engine kubernetes google-kubernetes-engine

在自定义构建的CentOS Docker容器中部署Google服务帐户凭据以在Google的Container Engine或其“container-vm”上运行的最佳方法是什么?此行为自动发生在google/cloud-sdk容器上,该容器运行debian并包含我不使用的内容,例如app-eng / java / php。理想情况下,我尝试访问项目中的非公共资源,例如Google Cloud Storage存储桶对象,而无需每次启动大量这些容器时都进行登录和授权。

例如,在运行在GCE上的基本Centos容器上安装了自定义代码并安装了gcloud / gsutil:

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

系统会提示您运行“gsutil config”以获得授权,我希望如此。

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

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

3 个答案:

答案 0 :(得分:4)

更新:截至2016年12月15日,更新现有VM范围的功能现已处于测试阶段;有关详细信息,请参阅this SO answer


旧回答:一种方法是使用appropriate scopes(例如,Google云端存储只读或读写)创建VM,然后创建VM上的所有进程,包括容器,可以访问他们可以通过OAuth 2.0使用的凭据;请参阅Google Cloud StorageGoogle Compute Engine的文档。

请注意,一旦使用一组范围创建VM,以后就无法更改它们(既不添加也不删除),因此您必须确保在创建VM实例时设置正确的范围集。 / p>

答案 1 :(得分:2)

跟进。

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

答案 2 :(得分:0)

您的答案可能包含在本文档中:

Container-Registry Advance Authentication

它包含使用 Docker 容器的身份验证方法

  • 独立凭证助手
  • 访问令牌
  • JSON 密钥文件
  • gcloud 凭据助手(推荐)

对于 gcloud,它指出:

使用 gcloud 工具在 Cloud Shell 或安装了 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 的服务帐户名称。您可以在 Service Accounts 页面的 Cloud Console 或使用命令 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