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.
的当前版本
- 配置身份验证:
以执行 运行 Docker 命令的用户身份登录 gcloud。
要使用用户凭据配置身份验证,运行 以下命令:
gcloud auth login
- 要使用服务帐户凭据配置身份验证,运行以下命令:
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。
- 使用以下命令配置 Docker:
gcloud auth configure-docker
您的凭据保存在您的用户主目录中。
Linux
: $HOME/.docker/config.json
Windows
: %USERPROFILE%/.docker/config.json
在自定义构建的 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.
的当前版本- 配置身份验证:
以执行 运行 Docker 命令的用户身份登录 gcloud。 要使用用户凭据配置身份验证,运行 以下命令:
gcloud auth login
- 要使用服务帐户凭据配置身份验证,运行以下命令:
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。
- 使用以下命令配置 Docker:
gcloud auth configure-docker
您的凭据保存在您的用户主目录中。
Linux
: $HOME/.docker/config.json
Windows
: %USERPROFILE%/.docker/config.json