IAM服务帐户密钥与Google凭据文件

hub*_*ish 4 google-api google-cloud-platform google-iam

我正在编写代码以生成和下载Google Cloud服务帐户的私钥。

使用IAM API,我能够创建一个服务帐户,并且生成密钥的调用似乎正在工作。我会按照IAM API创建密钥页面所述获得服务帐户密钥,例如

{ 
  "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE",
  "privateKeyData": "random-key-stringkajdkjakjfke", ...
}
Run Code Online (Sandbox Code Playgroud)

我下载了此文件作为JSON响应,并尝试对其进行身份验证:

gcloud auth activate-service-account --key-file=service-account-key-file.json
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到一条错误消息 The .json key file is not in a valid format.

当我浏览Google Cloud Console流程(IAM和管理->服务帐户-> ...->创建密钥->创建)时,我得到了一个下载的JSON文件,看起来像

{
  "type": "service_account",
  "private_key": "----BEGIN-PRIVATE-KEY-----",
  "auth_uri": "https://gaiastaging.corp.google.com/o/oauth2/auth",
}
Run Code Online (Sandbox Code Playgroud)

该文件看起来与IAM API的响应完全不同。解释我的错误!不幸的是,这种格式似乎没有在任何地方描述。在某些文档中已简要提及。它是Google凭据文件吗?

我想获取IAM响应文件/ JSON,并将其转换为第二个凭证文件。我尝试编写一些代码来转换它,但是有些字段"auth_provider_x509_cert_url"我不理解。

也许转换文件也是错误的方法?更普遍:

如何生成文件,然后使用它对gcloud进行身份验证?

我应该如何描述/区分以上两个文件?为什么每种类型的文件都有用?

hub*_*ish 5

关于这两个文件:

Google凭据文件和服务帐户凭据文件是同一件事-它们都是我从Google Cloud Console页面下载的第二类文件。它们上没有很棒的官方文档页面,但是引用很多。可能还有应用程序默认凭据。

IAM create调用的JSON响应-这只是对API调用的响应。除了与您的应用程序代码一起解析外,它没有用。

生成Google凭据文件:

在对IAM创建的JSON响应中,有一个field 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>
Run Code Online (Sandbox Code Playgroud)

或者,如果您只是想快速确认它包含所有信息,请复制将base64 privateKeyData字段粘贴到文件中,google-credentials并使用以下命令对其进行解码(在Linux上):

base64 -d google-credentials
Run Code Online (Sandbox Code Playgroud)

然后我就可以跑步

gcloud auth activate-service-account --key-file=google-credentials.json
Run Code Online (Sandbox Code Playgroud)

并得到

Activated service account credentials for: [service-account-id@project-id.iam.gserviceaccount.com]
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,很高兴知道这一点,而且不在任何地方。 (2认同)