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

时间:2017-05-31 17:28:09

标签: google-api google-cloud-platform google-iam

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

使用IAM API,我能够create a service account,而我对generate a key的调用似乎正常。我按照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&管理员 - >服务帐户 - > ... - >创建密钥 - >创建)时,我会看到一个类似

{
  "type": "service_account",
  "private_key": "----BEGIN-PRIVATE-KEY-----",
  "auth_uri": "https://gaiastaging.corp.google.com/o/oauth2/auth",
}

此文件与IAM API的响应完全不同。解释我的错误!不幸的是,这种格式似乎没有在任何地方描述。在一些docs中简要提到了它。它是Google凭据文件吗?

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

也许转换文件也是错误的做法?更一般地说:

如何生成文件然后用它来验证gcloud?

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

1 个答案:

答案 0 :(得分:4)

关于这两个文件:

Google凭据文件和服务帐户凭据文件是相同的 - 它们是我从Google云端控制台页面下载的第二种文件类型。没有很好的官方文档页面,但他们引用了很多。可能还有Application Default Credentials。

来自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中并使用以下代码对其进行解码(

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]