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

Posted

技术标签:

【中文标题】gcloud auth activate-service-account [错误] 请确保提供的密钥文件有效【英文标题】:gcloud auth activate-service-account [ERROR] Please ensure provided key file is valid 【发布时间】:2017-09-02 20:49:40 【问题描述】:

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

问题

    我在 GC 平台的 IAM 下创建了一个新的服务帐户。 服务帐号已正确创建,我可以通过控制台看到它

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

    在我使用的控制台中 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>    

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


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

有人遇到过这个问题吗?有什么解决办法吗?

【问题讨论】:

我还找到了另一个文档cloud.google.com/iam/docs/… 我遇到的一个问题与机器上的日期/时间设置有关。使用 NTP 解决了这个问题。 我尝试使用 NTP 设置本地时间,但不幸的是它不起作用。然而,几天后,当我再次奇迹般地尝试它时,它自己修复了......仍然不知道它修复了什么。然而,NTP 绝对是领先一步,因为我观察到时区之前没有正确设置...... 【参考方案1】:

我还没有找到任何很好的文档,但是您肯定想要第一种类型的文件并通过 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"

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

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

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

你已经输入了

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

ie,在 --key 之后有一个空格。如果你想通了,请告诉我们!

【讨论】:

在奇迹般地休息了一个周末后,一切都开始按照文档所述正常工作。从那以后,我使用了许多其他服务帐户,没有任何问题。我仍然不知道问题出在哪里,但我将此答案标记为正确,因为此处给出的建议是正确的,并且确实这个错字可能是一个问题。谁知道我累了,我忘了破折号:)

以上是关于gcloud auth activate-service-account [错误] 请确保提供的密钥文件有效的主要内容,如果未能解决你的问题,请参考以下文章

在 python 脚本中运行 gcloud auth 和 gsutil 命令

尝试运行 bigquery 时 gcloud auth 登录问题 403 访问被拒绝

gcloud auth configure-docker 失败(config.json 无法读取为 JSON)

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

来自JSON的gcloud auth activate-service-account用于设置当前项目

模仿 AWS CLI / gcloud 命令行参数