如何使用 Google 服务验证 Docker 容器

How to authenticate Docker container with Google Service

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

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

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

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

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

有没有办法在不将 service_key.json 文件复制到其本地磁盘的情况下使用 Google 服务凭据授权 Docker 容器?

你在做这样的事吗?

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 云平台计算服务(App Engine、Compute、Kubernetes,运行)上,应用程序默认凭据可以使用资源的服务帐户(没有钥匙)。

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

基于那里的文档

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

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

PUBSUB_CREDENTIALS - Path to JSON file, or JSON contents

其他 POST 可能会帮助您解决 multi-line 问题,当您尝试使用 docker 运行 进行设置时(此 post 引用“docker构建”,但同样的想法)