“不要在源代码中嵌入与身份验证相关的 secret ” - one may hear frequently 。好的,所以我使用 Key Management Service和 Secret Manager 。
但是,如何正确访问 Compute Engine 的虚拟机和本地开发环境中存储的 secret ?
我可以想到:
使用 default Service Account credentials 访问 secret ,但是我如何访问本地开发环境和本地 Docker 容器内部(即计算引擎外部)中的 secret ?
使用 custom Service Account 访问 secret ,但随后我需要将其 JSON key 存储在某处并从我的代码中访问它。为此我有两个选择:
2.1。将其与源代码一起存储,因此我将其放在开发计算机和 Docker 容器中。但这与开场白“不要在源代码中嵌入 secret ......”背道而驰。坏主意。
2.2。将其存储在我的开发机器上的某个位置。但是我的 Docker 容器如何访问它呢?我可以提供 key 作为 Docker secret ,但这不会又是“嵌入源代码中”吗?在虚拟机上启动容器后,我需要从某个地方提供该 secret ,但再次回到 secret 如何到达虚拟机的问题。
我知道Application Default Credentials (ADC) 可以尝试使用选项 2,然后回退到选项 1 - 然而,如何解决选项 2 的冲突?服务帐户凭据应该驻留在哪里才能在我的本地开发和本地容器中访问 - 而不是嵌入在源代码中?
最佳答案
我找到了一种方法来完成这项工作,(某种程度):
在本地开发环境中,依赖
GOOGLE_APPLICATION_CREDENTIALS
指向从 GCP 手动下载的服务帐户凭据。在本地 Docker 容器上,提供相同的文件作为 secret 。如果未设置
GOOGLE_APPLICATION_CREDENTIALS
,我的应用就会在/run/secrets/
中搜索它。在 Compute Engine 虚拟机上,从 Google 存储桶下载该文件(之前已上传)。 Given that the default Service Account is used如果没有指定其他凭据,我可以
gutils cp
该文件来自存储桶。然后将该下载的文件作为 secret 提供给容器。
不过,我仍然不确定从不嵌入源代码的角度来看是否有好处。从存储桶上传和下载凭证的所有操作也感觉非常手动。非常欢迎任何有关如何改进此身份验证的提示。
关于google-cloud-platform - GCP 通过 Compute Engine 的服务帐号访问和存储密码/凭据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61544349/