谷歌云服务帐户密钥控制台 vs api

Posted

技术标签:

【中文标题】谷歌云服务帐户密钥控制台 vs api【英文标题】:Google cloud service account keys console vs api 【发布时间】:2022-01-14 06:31:38 【问题描述】:

当我通过控制台 https://cloud.google.com/iam/docs/creating-managing-service-account-keys#iam-service-account-keys-create-console 创建服务帐户密钥时,它会生成一个看起来像这样的密钥


  "type": "service_account",
  "project_id": "...",
  "private_key_id": "...",
  "private_key": "-----BEGIN PRIVATE KEY-----abc1234\n-----END PRIVATE KEY-----\n",
  "client_email": "...",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "..."

但是通过 api https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts.keys/create 使用 node.js 库并使用一组 oauth2 凭据,它会生成一个看起来像这样的密钥


  "name": "...",
  "keyType": "USER_MANAGED",
  "keyOrigin": "GOOGLE_PROVIDED",
  "keyAlgorithm": "KEY_ALG_RSA_2048",
  "privateKeyData": "...",
  "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE",
  "validAfterTime": "2021-12-09T10:32:14Z",
  "validBeforeTime": "9999-12-31T23:59:59Z"

第一个适用于GOOGLE_APPLICATION_CREDENTIALS,但后者不适用。

【问题讨论】:

如果有人知道这两种不同的密钥文件类型的名称可能有助于我搜索 【参考方案1】:

是的,这很正常。您提供 API 调用的答案。在该 API 调用中,JSON 密钥文件(如果在属性 privateKeyData 中提供)。 Base64 解码内容,瞧!

【讨论】:

【参考方案2】:

privateKeyData 字段实际上包含整个 Google 凭据文件。它只是编码为 base64 字符串。仅在 keys.create 响应中提供。确保确保私钥数据安全,因为它允许声明服务帐户身份。当 base64 解码后,私钥数据可用于通过 Google API 客户端库和gcloud auth activate-service-account 进行身份验证。

有关通过 API 获取服务帐户密钥的更多信息,请参阅 Resource:ServiceAccountKey 和 stackpost。

【讨论】:

【参考方案3】:

响应包含您的服务帐户的密钥。返回的密钥格式如下,其中 ENCODED_PRIVATE_KEY 是公钥/私钥对的私有部分,采用 base64 编码。

所以你只需要将 privateKeyData 从 base64 解码为 asci 就可以了。

见https://cloud.google.com/iam/docs/creating-managing-service-account-keys#iam-service-account-keys-create-rest

【讨论】:

以上是关于谷歌云服务帐户密钥控制台 vs api的主要内容,如果未能解决你的问题,请参考以下文章

在 android 中获取意外的响应代码 403,同时在谷歌云控制台中将 API 密钥限制为 Android 应用程序

谷歌云项目:使用自定义界面创建

身份验证不适用于使用 NodeJS 进行的谷歌云 API 身份验证

谷歌云抛出错误:无法在 Nodejs 中加载默认凭据

谷歌云控制台语言界面

谷歌云 API 没有返回任何响应