谷歌云服务帐户密钥控制台 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 应用程序