gcloud auth activate-service-account [ERROR] 请确保提供的密钥文件有效

Sza*_*cze 7 json service-accounts

我已经在这个问题上花费了几个小时,但似乎我无法激活服务帐户来在本地开发 App Engine 项目(如果我部署该项目,它可以很好地进行身份验证,因为凭据是作为 env 变量注入的)。

问题

  1. 我在 GC 平台上的 IAM 下创建了一个新的服务帐户。
    服务帐户已正确创建我可以通过控制台和

  2. 在服务帐户下,我生成了一个新的 JSON 密钥 -> key.json

  3. 在控制台中,我使用了 gcloud auth activate-service-account --key file=key.json

代码

 {    
      "type": "service_account",
    <br>      "project_id": "[project id]",
    <br>      "private_key_id": "[private_key_id]",
    <br>      "private_key": "[private_key]",
    <br>      "client_email": "[name]",
    <br>      "client_id": "[clien id]",
    <br>      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    <br>      "token_uri": "https://accounts.google.com/o/oauth2/token",
    <br>      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        <br>  "client_x509_cert_url": 
      "https://www.googleapis.com/robot/v1/metadata/x509/[client_email]"
       <br> }   
Run Code Online (Sandbox Code Playgroud)

我收到错误消息ERROR: (gcloud.auth.activate-service-account) Failed to activate the given service account。请确保提供的密钥文件有效。


在尝试了我所能做的一切之后,我发现在文档中,服务帐户密钥确实具有不同的结构。https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts.keys 但 我不知道为什么下载的密钥结构不好。

有人遇到过这个问题吗?任何解决方案?

hub*_*ish 9

我还没有找到任何关于此的优秀文档,但您肯定需要第一种类型的文件,并通过 Cloud Console 创建它应该可以工作。我相信它被称为 Google Credentials 文件。下载的 JSON 文件应类似于:

{
  "type": "service_account",
  "project_id": "project-id",
  "private_key_id": "some_number",
  "private_key": "-----BEGIN PRIVATE KEY-----\n....
  =\n-----END PRIVATE KEY-----\n",
  "client_email": "<api-name>api@project-id.iam.gserviceaccount.com",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/...<api-name>api%40project-id.iam.gserviceaccount.com"
}
Run Code Online (Sandbox Code Playgroud)

您发布的第二个链接还将创建一个服务帐户密钥和一个 Google Credentials 文件,但它可能比您想要的更多(Google Credentials 文件在privateKeyData字段下编码。

希望能解释这些文件;祝你认证成功!我唯一的建议是,也许你拼错了命令?它应该是:

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

而你已经打字

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

即,在 --key 后面有一个空格。如果您想通了,请告诉我们!