IAM 服务帐户密钥与 Google 凭证文件
IAM Service Account Key vs Google Credentials File
我正在编写代码来为 Google 云服务帐户生成和下载私钥。
使用 IAM API,我能够 create a service account, and my call to generate a key seems to be working. I get back a Service Account Key as described on the IAM API create key page,喜欢
{
"privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE",
"privateKeyData": "random-key-stringkajdkjakjfke", ...
}
我下载了此文件作为 JSON 响应并尝试使用它进行身份验证:
gcloud auth activate-service-account --key-file=service-account-key-file.json
不幸的是,我收到一条错误消息
The .json key file is not in a valid format.
当我通过 Google 云控制台流程(IAM 和管理 -> 服务帐户 -> ... -> 创建密钥 -> 创建)时,我得到了一个下载的 JSON 文件看起来像
{
"type": "service_account",
"private_key": "----BEGIN-PRIVATE-KEY-----",
"auth_uri": "https://gaiastaging.corp.google.com/o/oauth2/auth",
}
此文件看起来与来自 IAM API 的响应完全不同。解释我的错误!不幸的是,似乎没有任何地方描述这种格式。它在一些 docs 中被简要提及。它是 Google 凭据文件吗?
我想获取 IAM 响应 file/JSON 并将其转换为第二个凭证文件。我试过写一些代码来转换它,但是有些字段我不明白,比如 "auth_provider_x509_cert_url"
。
也许转换文件也是错误的做法?更一般地说:
我如何生成一个文件,然后使用它通过 gcloud 进行身份验证?
我应该如何 describe/distinguish 处理上述两个文件?为什么每种类型的文件都有用?
关于两个文件:
Google 凭据文件和服务帐户凭据文件是同一件事 - 它们都是我从 Google 云控制台页面下载的第二种文件。它们没有很好的官方文档页面,但它们被引用了很多。可能还有应用程序默认凭据。
来自 IAM 创建调用的 JSON 响应 - 这只是对 API 调用的响应。除了使用您的应用程序代码对其进行解析外,它没有用处。
要生成 Google 凭据文件:
在对 IAM 创建的 JSON 响应中,有一个字段 privateKeyData
。该字段实际上 包含整个 Google 凭据文件 。它只是编码为 base64 字符串。我刚刚从 HTML 下载文件为
<a href="data:attachment/json;base64;charset=utf-8,THAT-LONG-privateKeyData-base64-string-here" download="service-account-key.json">
Download key
</a>
或者如果您只是想快速确认它包含所有信息,请将 base64 privateKeyData
字段复制粘贴到文件 google-credentials
中并解码(在 Linux 上) :
base64 -d google-credentials
然后我能够运行
gcloud auth activate-service-account --key-file=google-credentials.json
得到了
Activated service account credentials for: [service-account-id@project-id.iam.gserviceaccount.com]
我正在编写代码来为 Google 云服务帐户生成和下载私钥。
使用 IAM API,我能够 create a service account, and my call to generate a key seems to be working. I get back a Service Account Key as described on the IAM API create key page,喜欢
{
"privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE",
"privateKeyData": "random-key-stringkajdkjakjfke", ...
}
我下载了此文件作为 JSON 响应并尝试使用它进行身份验证:
gcloud auth activate-service-account --key-file=service-account-key-file.json
不幸的是,我收到一条错误消息
The .json key file is not in a valid format.
当我通过 Google 云控制台流程(IAM 和管理 -> 服务帐户 -> ... -> 创建密钥 -> 创建)时,我得到了一个下载的 JSON 文件看起来像
{
"type": "service_account",
"private_key": "----BEGIN-PRIVATE-KEY-----",
"auth_uri": "https://gaiastaging.corp.google.com/o/oauth2/auth",
}
此文件看起来与来自 IAM API 的响应完全不同。解释我的错误!不幸的是,似乎没有任何地方描述这种格式。它在一些 docs 中被简要提及。它是 Google 凭据文件吗?
我想获取 IAM 响应 file/JSON 并将其转换为第二个凭证文件。我试过写一些代码来转换它,但是有些字段我不明白,比如 "auth_provider_x509_cert_url"
。
也许转换文件也是错误的做法?更一般地说:
我如何生成一个文件,然后使用它通过 gcloud 进行身份验证?
我应该如何 describe/distinguish 处理上述两个文件?为什么每种类型的文件都有用?
关于两个文件:
Google 凭据文件和服务帐户凭据文件是同一件事 - 它们都是我从 Google 云控制台页面下载的第二种文件。它们没有很好的官方文档页面,但它们被引用了很多。可能还有应用程序默认凭据。
来自 IAM 创建调用的 JSON 响应 - 这只是对 API 调用的响应。除了使用您的应用程序代码对其进行解析外,它没有用处。
要生成 Google 凭据文件:
在对 IAM 创建的 JSON 响应中,有一个字段 privateKeyData
。该字段实际上 包含整个 Google 凭据文件 。它只是编码为 base64 字符串。我刚刚从 HTML 下载文件为
<a href="data:attachment/json;base64;charset=utf-8,THAT-LONG-privateKeyData-base64-string-here" download="service-account-key.json">
Download key
</a>
或者如果您只是想快速确认它包含所有信息,请将 base64 privateKeyData
字段复制粘贴到文件 google-credentials
中并解码(在 Linux 上) :
base64 -d google-credentials
然后我能够运行
gcloud auth activate-service-account --key-file=google-credentials.json
得到了
Activated service account credentials for: [service-account-id@project-id.iam.gserviceaccount.com]