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 Service凭据授权Docker容器而不将service_key.json
文件复制到本地磁盘?
答案 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”,但思路相同)