【问题标题】:How to authenticate Docker container with Google Service如何使用 Google 服务对 Docker 容器进行身份验证
【发布时间】:2019-07-03 18:21:02
【问题描述】:

Docker 容器运行 Python 服务器并将消息发布到 Google Pubsub 消息服务。

为了让这个容器能够使用Google Pubsub 服务,我设置了GOOGLE_APPLICATION_CREDENTIALS 环境变量,将其指向service_key.json 文件,该文件是我在创建Service Account Key 后通过打开Google Cloud Console 下载的,然后导航到:

API's & Services > Credentials > Create Credentials > Service Account Key

service_key.json 文件需要复制到容器的本地磁盘,否则将无法读取。

虽然这种方法有效并且 Docker 容器现在被授权使用带有 service_key.json 文件凭据的 Google Pubsub 服务,但我认为这不是一个非常安全的解决方案,因为 service_key.json 文件现在与容器一起托管在云上本身。

有没有办法使用 Google 服务凭据授权 Docker 容器,而无需将 service_key.json 文件复制到其本地磁盘?

【问题讨论】:

  • 你在哪里部署这个 Docker 容器?

标签: python docker google-cloud-platform google-cloud-pubsub


【解决方案1】:

你在做这样的事情吗?

docker run ...
--volume=${LOCAL_PATH}/secrets/service_key.json:/secrets/key.json \
--env=GOOGLE_APPLICATION_CREDENTIALS=/service/key.json \
mycontainerimage

NB 重新映射 service_key.json --> key.json 以明确意图

这并没有解决在运行容器的主机上挂载密钥的需要,但它确实解决了将密钥放入容器的需要。

只要您可以保护主机 (!),密钥就会相当安全。您应该包括一个经常轮换密钥的过程。这需要在(重新)分发密钥方面做更多工作,但它会降低丢失密钥的风险。

使用密钥,您总是必须保护密钥,同时将其暴露在可能不安全的位置。

如果您的容器在 Google Cloud Platform 计算服务(App Engine、Compute、Kubernetes、Run)上运行,应用程序默认凭据可以使用资源的服务帐户(无密钥)。

对于其他类型的凭据(据我所知不是 Google 服务帐户),您还可以考虑使用密钥管理服务,包括 Cloud KMS、HashiCorp Vault。

【讨论】:

    【解决方案2】:

    根据那里的文档

    https://googleapis.dev/ruby/google-cloud-pubsub/latest/file.AUTHENTICATION.html

    将json文件的内容设置为这个变量

    PUBSUB_CREDENTIALS - JSON 文件或 JSON 内容的路径

    另一个POST 可以帮助您在使用 docker run 设置它时解决多行问题(这篇文章引用“docker build”,但想法相同)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多