由于用户凭据没有配额项目而发出警告

Loi*_*icM 11 google-cloud-platform google-iam

我目前正在管理一个GCP项目,并授予一位同事访问权限,以便Viewer他可以使用其中的资源(主要是从存储中下载文件)。

我遇到了一个问题,这里也有解释

基本上,运行后gcloud auth application-default login,他们可以访问资源,但会收到警告

WARNING:                                                                                                                                                                                                                          
Cannot add the project "lixodata" to ADC as the quota project because the account in ADC does not have the "serviceusage.services.use" permission on this project. You might receive a "quota_exceeded" or "API not enabled" error
. Run $ gcloud auth application-default set-quota-project to add a quota project.
Run Code Online (Sandbox Code Playgroud)

对于他们运行的每个需要与 GCP 交互的脚本都会重复此警告,这往往会使他的终端变得有点混乱。

链接的问题解释了如何使警告消失,但需要授予用户权限serviceusage.services.use,该权限不与默认Viewer角色捆绑。

阅读文档并没有真正让我明白一些事情:为什么我要使用与我所连接的计费项目不同的计费项目?

我的问题是两部分:

  • 授予我的同事有什么用途/风险是什么serviceusage.services.use?为什么它默认不与Viewer角色链接?
  • 是否有任何替代解决方案来禁用此警告(并且仅此警告)?

Daz*_*kin 17

TL;DR因为以其他方式gcloud auth application-default颁发的凭据会消耗 Google 拥有的项目中的配额,该项目可能(未)启用该服务。


对于需要“身份”身份验证和授权的 Google API,使用 OAuth。

在 Google 的实现中,Google 服务(特定 API)必须在使用前启用,并且 API 在 Google Projects 中启用(并聚合)。

有两种重要的“身份”类型:(人类)用户(例如 gmail.com)和软件(有时称为机器人)用户。无协助(!)软件用户由服务帐户识别。

gcloud是软件,但它主要代表(人类)用户运行。因为gcloud通常需要能够识别其人类用户(例如您的 gmail.com 帐户),所以它以委托方式运行。gcloud确实有自己的身份,但它(大部分)作为人类用户运行。

注意您也可以将 gcloud 与服务帐户结合使用。

重要的是,gcloud是所谓的已安装应用程序。当用户发出gcloud命令时,向 Google 拥有|运行的 Google 项目 (!)gcloud提供用户 (!) 身份及其自身身份(称为 OAuth 客户端 ID)。

注意这解释了为什么您可以创建项目并使用 启用服务gcloud,因为另一个项目(启用了正确的服务)正在代表您影响这些 API 调用。

当您针对 Google 服务开发应用程序时,您必须决定代码如何向 Google 进行身份验证。如果它代表用户,那么您还需要创建一个客户端 ID 并通过它路由用户的请求。如果它作为独立解决方案运行(无需用户干预),那么它将作为服务帐户运行。

Google 的 SDK 包含一项称为应用程序默认凭据 (ADC) 的优雅功能。ADC 自动发现服务帐户凭据 (!)、减少(从而简化)代码、提供可移植性保持安全性。

如果您可以使用 ADC,那么您就应该使用。

这创造了(!)一个挑战。对于编写非用户代码的开发人员来说,他们如何在不创建服务帐户(并下载密钥)的情况下测试软件?解决方案是(!)gcloud auth application-default

当您使用 时gcloud auth application-default,用户(例如 gmail.com)凭据用于创建行为类似于 ADC 的凭据。开发人员可以测试他们的代码,而无需创建服务帐户和密钥。

然而(!)Google 被动地(!)不鼓励使用gcloud auth application-default.

部分原因是:

  1. 支持使用所发出的请求的 Google 项目gcloud auth application-default是 Google 拥有的项目,而不是您的项目;“计费”的是 Google,而不是您。
  2. 生成的凭证具有经过身份验证的用户凭证所拥有的所有权力,而不是(希望)服务帐户的更具体(通常由 IAM 控制)权限
  3. Google 拥有的项目可能未启用您要使用的服务。
  4. 该过程是不透明的,独立代码可能会神奇地使用 ADC 对 Google Cloud 进行身份验证gcloud auth application-defaut,这可能会令人惊讶(也不应该如此)。

由于上述原因,您不应使用凭据。gcloud auth application-default

如果您使用gcloud auth application-default凭据,您应该考虑原因并选择更好的替代方案:

  • 直接使用用户凭据
  • 或者使用服务帐户

如果不在Google Cloud之外,最好通过工作负载身份联合使用服务帐号

  • 您建议开发者与 Google Cloud 资源交互的正确方法是什么?`gcloud auth application-default` 但设置了显式配额项目? (3认同)
  • @DazWilkin 你能澄清一下为什么你认为 ADC 不受欢迎或者链接到描述这一点的文档吗?Google 的文档明确表示您应该尽可能使用 ADC,请参阅:https://cloud.google.com/docs/authentication#adc (3认同)

归档时间:

查看次数:

18105 次

最近记录:

2 年,5 月 前