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

时间:2017-03-25 19:20:35

标签: authentication gcloud google-speech-api

我试图按照本指南https://cloud.google.com/speech/docs/getting-started通过curl将GAE语音调用为文本api。但它似乎不起作用。

我已经设置了一个项目并启用了语音api语音。但是当我尝试激活服务帐户时,它失败了。我运行了诊断程序,尝试了不同的帐户,验证了json文件(有电子邮件),尝试了gcloud beta init: - (

bash-3.2 $ gcloud auth activate-service-account account@project.iam.gserviceaccount.com --key-file = project.json 错误:(gcloud.auth.activate-service-account)无法激活给定的服务帐户。请确保提供的密钥文件有效。

下一步是&#; gcloud auth print-access-token'返回一个令牌。

但是最后一步(curl)会返回 -

{   "错误":{     "代码":403,     "消息":" Google Cloud Speech API尚未在项目google.com:cloudsdktool中使用,之前或已被禁用。访问https://console.developers.google.com/apis/api/speech.googleapis.com/overview?project=google.com:cloudsdktool启用它,然后重试。如果您最近启用了此API,请等待几分钟,以便将操作传播到我们的系统并重试。",     " status":" PERMISSION_DENIED",     "详情":[       {         " @ type":" type.googleapis.com/google.rpc.Help",         "链接":[           {             "说明":" Google开发人员控制API激活",             " url":" https://console.developers.google.com/apis/api/speech.googleapis.com/overview?project=google.com:cloudsdktool"           }         ]       }     ]   } }

问题似乎在于用于验证传入请求的项目(google.com:cloudsdktool而不是我的)。

我是否猜测调用activate-service-account会引起这种情况?

2 个答案:

答案 0 :(得分:4)

您收到google.com:cloudsdktool项目的错误消息,因为您使用curl gcloud auth print-access-token运行的命令使用的是您的用户帐户凭据(由gcloud auth login创建),而不是服务帐户(因为您指出你的步骤失败了。)

command to activate service account是正确的(顺便说一下,您不需要提供帐户,因为将使用该文件中的一个)

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

确保您的project.json文件格式正确,格式正确。您可以在

中创建此json密钥文件
  1. in https://console.cloud.google.com/iam-admin/serviceaccounts/project?project=YOUR_PROJECT_NAME
  2. gcloud iam service-accounts keys create,请参阅reference guide
  3. 该文件看起来像

    {
      "private_key_id": "....",
      "private_key": "-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----\n",
      "client_email": "...",
      "client_id": "...",
      "type": "service_account"
    }
    

    请注意,client_email将用于activate-service-account命令中的ACCOUNT。

答案 1 :(得分:-2)

更改编码和解码.json文件的步骤。此步骤会出现一些错误。

请勿在base64的环境变量中对值进行编码。而是粘贴.json文件的全部内容。

该命令将如下所示:

- echo $ GCLOUD_API_KEYFILE > ./gcloud-api-key.json
- gcloud-auth activate-service-account --key-file gcloud-api-key.json