使用 Google Cloud Run 时如何访问已装载的机密?

Posted

技术标签:

【中文标题】使用 Google Cloud Run 时如何访问已装载的机密?【英文标题】:How do I access mounted secrets when using Google Cloud Run? 【发布时间】:2021-10-02 13:59:47 【问题描述】:

我有两个问题:

    为什么我不能在同一个目录中挂载两个云机密?

    我尝试在目录中挂载两个秘密,FIREBASE_AUTH_SERVICE_ACCOUNTPURCHASE_VALIDATION_SERVICE_ACCOUNT

    flask_app/src/services/firebase/service_accounts/

    但是,在尝试执行此操作时出现此错误: spec.template.spec.containers[0].volume_mounts[1].mount_path, Duplicate volume mount paths are forbidden这是为什么呢?

    如何使用 python 访问挂载的秘密?

    我真的不知道该怎么做,因为我找不到任何关于如何实际访问机密本身的文档。这是我唯一的found。我使用 python 只是为了上下文。秘密是否会被挂载为 .txt 文件,该挂载路径是存储它的文件夹还是还指定文件名?

【问题讨论】:

请分享您正在运行的代码或命令 【参考方案1】:

使用 Cloud Run 和 Secret manager,您可以通过 2 种方式加载密钥:

在环境变量中加载秘密,使用--set-secrets=ENV_VAR_NAME=secretName:version 在文件中加载秘密,使用--set-secrets=/path/to/file=secretName:version

因此,您可以在阅读时阅读秘密

一个环境变量(类似于os.getenv()) 一个文件(类似于fs.open('/path/to/file','w')

所以,您关于目录的第一个问题并不清楚。如果你在同一目录下的 2 个文件中挂载 2 个秘密,没问题!

如果它不能解决您的问题,请澄清。

【讨论】:

谢谢!因此,在部署新修订版时提到我的第二个问题,我指定了一个“挂载路径”,即flask_app/src/services/firebase/service_accounts/,但是我不能添加两个具有相同挂载路径的秘密,因为这会引发该错误。 我测试了 2 个秘密,在 2 个不同的文件中,在同一个目录中,它运行良好。您需要定义一个绝对文件名,每个密码以/ 开头。如果仍然无法正常工作,请添加有关如何部署的更多详细信息。 感谢您花时间这样做。我正在使用 GUI 进行部署。这是我传入的信息:i.imgur.com/anFXHa8.png,两个秘密的挂载目录相同,但是文件的路径不同,所以我不明白为什么会出现此错误:i.imgur.com/GUOfpwY.png 在路径末尾添加文件名。否则,如果两者具有相同的绝对路径名,您将如何在代码中读取此秘密。 不幸的是,我有一个类似的场景:如果我使用一个秘密,它就可以工作。一旦我添加了第二个秘密,它就不再起作用了。无效示例:--update-secrets=/run/secrets/app1-credentials=serviceaccount-app1:latest,/run/secrets/app2-credentials=serviceaccount-app2:latest

以上是关于使用 Google Cloud Run 时如何访问已装载的机密?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Java脚本安全地调用Google Cloud Run服务?

Stackdriver Trace 与 Google Cloud Run

Google Cloud FUSE 与 Cloud Run [Errno 5] 输入/输出错误:'/database' 但已授予存储对象管理员访问权限

Google Cloud Tasks 无法向 Cloud Run 进行身份验证

如何获取或生成Google Cloud Run服务的部署URL

如何使用 Google Cloud PubSub 和 Run 处理资源密集型长时间运行的任务?