0

我试图了解 gcloud 如何管理需要服务帐户才能访问它们的 API,例如使用您的用户(不是 svcacc)凭据访问语音 API 将导致“403 您的应用程序已使用来自 Google Cloud 的最终用户凭据进行身份验证Speech.googleapis.com 不支持的 SDK 或 Google Cloud Shell”。

然而,当我运行gcloud ml speech recognize gs://cloud-samples-tests/speech/brooklyn.flac --language-code=en-US它时,它工作得很好——尽管我没有按照快速入门 [1] 中的描述设置任何专用的 svcacc 密钥,甚至为了确保安全,甚至禁用了项目中的所有服务帐户。

再说一次,

  • gcloud ml speech recognize gs://cloud-samples-tests/speech/brooklyn.flac --language-code=en-US- 作品
  • curl -s -H "Content-Type: application/json" -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) https://speech.googleapis.com/v1/speech:recognize -d @sync-request.json根据 [2] 失败,上面出现 403 错误

问题:gcloud 如何在我不提供专用服务帐户的情况下工作?

[1] https://cloud.google.com/speech-to-text/docs/quickstart-gcloud

4

1 回答 1

1

Google 凭据由两种类型的帐户提供:服务帐户和常规(人类?)帐户(例如@gmail.com, @your.email)。为这些帐户颁发的令牌类型不同,但它们都对服务进行身份验证。

当您使用时,gcloud您通常会使用您之前通过身份验证的人工帐户,gcloud auth login并且可能会显示为gcloud auth list

在这种情况下,您还使用了这些gcloud人工凭据,curl因为您使用gcloud auth print-access-token. 您的两个示例使用相同的(可能是人类)帐户有效地进行了身份验证。

当您想让一项服务向另一项服务进行身份验证时,建议您使用服务帐户。在此过程中没有人支持 OAuth 的三足认证,因此服务帐户使用两足认证(请参阅链接)。

通常,对于 Cloud Platform 服务,凭证还必须具有 IAM 角色来描述授权其使用的权限,但某些 Cloud Platform 服务 (IIRC ML) 尚未(尚未)实现 IAM,因此仅使用 OAuth 范围实现授权,您可以使用vanilla服务未分配特定 IAM 绑定的账户。

注意也可以gcloud使用服务帐户进行身份验证,gcloud auth activate-service-account但 IIRC 不鼓励这种方法。

于 2020-05-27T15:44:54.327 回答