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 加密密钥并在运行时解密。这次您的项目文件中仍然有秘密,但已加密。

但是,您需要另一个服务帐户吗?功能上这一项还不够?