使用 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_ACCOUNT
和 PURCHASE_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 进行身份验证