如何通过Google Service验证Docker容器

时间:2019-07-03 18:21:02

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

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

enter image description here

enter image description here

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

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

是否可以使用Google Service凭据授权Docker容器而不将service_key.json文件复制到本地磁盘?

2 个答案:

答案 0 :(得分:3)

您正在做这样的事情吗?

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,运行)上运行,则应用程序默认凭据可以使用资源的服务帐户(无密钥)。

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

答案 1 :(得分:0)

根据那里的文档

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

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

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

另外POST可能会帮助您尝试通过docker run设置多行问题(本文引用了“ docker build”,但思路相同)