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

时间:2017-04-07 12:48:32

标签: json service-accounts

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

问题

  1. 我在GC平台上的IAM下创建了一个新的服务帐户。
    正确创建服务帐户我可以通过控制台和
  2. 查看
  3. 在服务帐户下,我生成了一个新的JSON密钥 - > key.json

  4. 我使用的控制台中的
  5. gcloud auth activate-service-account --key file = key.json

  6. 代码

     {    
          "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> }   
    

    我收到错误消息错误:(gcloud.auth.activate-service-account)无法激活给定的服务帐户。请确保提供的密钥文件有效。

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

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

1 个答案:

答案 0 :(得分:4)

我没有找到任何关于此的好文档,但您肯定希望第一种类型的文件并通过云控制台创建它应该可行。我相信它被引用为Google凭据文件。下载的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"
}

您发布的second link也会创建一个服务帐户密钥和一个Google凭据文件,但这可能比您想要的更多(Google凭据文件是在privateKeyData字段下编码的。

希望这能解释文件;祝你好运!我唯一的建议就是你拼错了命令? 它应该是:

gcloud auth activate-service-account --key-file=key.json

而你输入了

gcloud auth activate-service-account --key file=key.json

即-key之后的空格。如果你想出来,请告诉我们!