考虑以下gcloud
命令将 Google Secrets Manager 密钥注入到SERVICE
Google Cloud Run 服务——使用机密Cloud Run 文档页面:
gcloud run services update SERVICE \
--set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"
观察:注意如何设置你的ENV_VAR_NAME
环境变量的值SECRET_NAME:VERSION
秘密;但是问题:您可以从 Google Secrets Manager 机密中解析出 JSON 密钥吗?
例如,考虑mysecret
secret 设置为{"PASSWORD":"mylastname","TOKEN":"t0k3n"}
像下面的 shell 会话所示:
$ gcloud secrets create mysecret --data-file=- <<<'{"PASSWORD":"mylastname","TOKEN":"t0k3n"}'
Created version [1] of the secret [mysecret].
然后你解析出来PASSWORD
秘密钥匙与尊者jqlang/jq像这样的实用程序:
$ gcloud secrets versions access 1 --secret=mysecret \
| jq --raw-output .PASSWORD
mylastname
但我认为明确地注入这一点会很酷PASSWORD
密钥进入我的 Cloud Run 服务,而无需在 gcloud 之外进行任何 JSON 解析——从那时起,我就可以支持一对多 Secrets Manager 密钥与应用程序密钥比率。
我正在想象类似以下的事情:
gcloud run services update SERVICE \
--set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION:SECRET_KEY"
就我之前的例子来说,每个参数都映射到以下内容:
ENV_VAR_NAME
到PASSWORD
。SECRET_NAME
到mysecret
。VERSION
到1
。- ⭐️
SECRET_KEY
到PASSWORD
。笔记:这是我的问题感兴趣的领域。
如果发生一些默认的 JSON 解析那就更好了。
您能从 Google Secrets Manager 机密中解析出 JSON 密钥吗?
这是我迄今为止尝试过的:
- 我读了命令的输出
gcloud run services update --help
——没有看到任何内容。 - 我粗略地看了一下https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access页面——没有看到任何内容。
- 我打碎了优秀的BurntSushi/ripgrep我把这个实用程序放到我的
~/google-cloud-sdk
目录中rg set-secrets ~/google-cloud-sdk
,看看是否能找到任何暗示 JSON 解析功能的彩蛋——但我还是没有找到任何东西。
猜测:看起来你不能用那个 gcloud 选项执行这种 JSON 解析操作--set-secrets
;但我希望我错了。
答案1
我发现之前有一篇帖子也有同样的担忧,但他们在 AWS 上尝试了。黄大伟,他们需要将 secret 设置为 data.SecretString 以将其作为普通字符串。之后,必须将 JSON 字符串转换为 JSON 对象,以便可以通过属性名称访问信息。var
secret = {"username":"***","password":"***","engine":"mysql","host":"***.***.us-east-1.rds.amazonaws.com","port":3306,"dbname":"***","dbInstanceIdentifier":"***"}<br>
;
const secretObj = JSON.parse(secret);
console.log(secretObj.host)