private_key 用作环境变量时的正确格式是什么?
What's the correct format of private_key when using it as an environment variable?
我正在尝试将 private_key
用于某些 GCP 服务 nodejs 客户端库,例如@google-cloud/pubsub
、@google-cloud/trace-agent
我从服务帐户凭据 json 文件中得到 private_key
,如下所示:
我正在尝试将其用作云功能的环境变量。
.env.yaml
:
并像这样使用它:
// ...
credentials: {
private_key: envs.private_key,
client_email: envs.client_email
},
projectId: envs.X_GOOGLE_GCLOUD_PROJECT
但是出现错误:
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
我检查了 stackdriver 日志,这是我得到的 private_key
环境变量:
我的猜测是 private_key
的格式不正确。可能是换行符\n
引起的。那么,像这样使用 private_key
时正确的格式是什么?
GCLOUD_KEY='{"private_key_id":"XXX", "private_key":"YYY",
"client_email":"ZZZ@ZZZ.COM", "client_id":"ABC123",
"type":"service_account"}'
在 .env.yaml 文件中设置密钥不是一个好主意。事实上,您将能够将它提交给 git,也许在 public 存储库中,并且您将以纯文本形式将其设置为函数的环境变量。
如果你把文件放在一个bucket里,在运行时加载它会更好。顺便说一句,你不会在项目文件中保密。
另一种解决方案是使用 kms 加密密钥并在运行时解密。这次您的项目文件中仍然有秘密,但已加密。
但是,您需要另一个服务帐户吗?功能上这一项还不够?
我正在尝试将 private_key
用于某些 GCP 服务 nodejs 客户端库,例如@google-cloud/pubsub
、@google-cloud/trace-agent
我从服务帐户凭据 json 文件中得到 private_key
,如下所示:
我正在尝试将其用作云功能的环境变量。
.env.yaml
:
并像这样使用它:
// ...
credentials: {
private_key: envs.private_key,
client_email: envs.client_email
},
projectId: envs.X_GOOGLE_GCLOUD_PROJECT
但是出现错误:
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
我检查了 stackdriver 日志,这是我得到的 private_key
环境变量:
我的猜测是 private_key
的格式不正确。可能是换行符\n
引起的。那么,像这样使用 private_key
时正确的格式是什么?
GCLOUD_KEY='{"private_key_id":"XXX", "private_key":"YYY",
"client_email":"ZZZ@ZZZ.COM", "client_id":"ABC123",
"type":"service_account"}'
在 .env.yaml 文件中设置密钥不是一个好主意。事实上,您将能够将它提交给 git,也许在 public 存储库中,并且您将以纯文本形式将其设置为函数的环境变量。
如果你把文件放在一个bucket里,在运行时加载它会更好。顺便说一句,你不会在项目文件中保密。
另一种解决方案是使用 kms 加密密钥并在运行时解密。这次您的项目文件中仍然有秘密,但已加密。
但是,您需要另一个服务帐户吗?功能上这一项还不够?