首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCP客户端工具的最佳策略

GCP客户端工具的最佳策略
EN

Stack Overflow用户
提问于 2019-10-13 19:10:59
回答 2查看 307关注 0票数 3

我想在python中构建一个客户端gcp工具。

我希望避免通过glcoud调用subprocess工具,所以我选择了sdk 客户库调用。

根据docs以及非常全面的文章,对于auth有两种选择:

( a)使用应用程序默认凭据(即gcloud在外壳下使用的凭据)

( b)使用服务帐户并将应用程序指向相应的.json文件。

我已尝试过(a)项,并收到以下警告:

UserWarning:您的应用程序已经使用Google的最终用户凭据进行了身份验证。我们建议大多数服务器应用程序使用服务帐户。如果应用程序继续使用Cloud的最终用户凭据,则可能会收到“超出配额”或"API未启用“错误。有关服务帐户的详细信息,请参阅https://cloud.google.com/docs/authentication/。 warnings.warn(_CLOUD_SDK_CREDENTIALS_WARNING)

如果我使用应用程序默认的creds,这将使它很容易,因为每个最终用户将该应用程序分发给,将这个.json文件作为他/她的第四个进程的真相来源。然而,应用程序可能会遇到上述quota exceeded错误。

在另一种情况下,(特定于服务帐户的凭据),我假设我必须向每个开发人员提供指示,以发出一个json文件,该文件对应于与他/她的权限完全相同的服务帐户。那么更新过程呢?当用户每次被分配/撤销某些权限时会发生什么情况?这个json是如何保持同步的?

任何有关这方面的建议都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2019-10-13 21:00:17

有几种类型的应用程序默认凭据(ADC):用户帐户和服务帐户以及这些帐户的变体。问题中的警告消息意味着您使用用户帐户凭据(gcloud auth login)设置了SDK。我建议切换到服务帐户凭据。

此命令将使用服务帐户设置CLI。您将需要项目ID和服务帐户JSON文件。

代码语言:javascript
复制
gcloud auth activate-service-account test@PROJECT_ID.iam.gserviceaccount.com --key-file=service_account.json

我写了一篇关于如何设置CLI的详细文章:

使用服务帐户凭据设置Gcloud

为什么谷歌会给你一个警告:

  • 授权用户凭证需要在Google的后端服务上付出更多的努力。
  • 用户帐户凭据需要人工交互来创建。
  • 刷新令牌通常由客户端或后端上的软件存储。这会造成一个安全漏洞。
  • 软件应该使用有限权限(作用域)的机器对机器身份验证。对于正在进行的API调用,通常会向用户颁发过多的权限。这又是一个安全问题。
  • Google已经决定不允许用户凭据拥有访问许多Google平台服务所需的范围。在创建OAuth客户端时,这一点非常明显,并且收到了有关验证的警告。有很大的风险,谷歌将停止允许云服务的用户凭证。最好是使用服务帐户的支持和官方方法,而不要在将来面对这个问题。

但是,鉴于上述细节,您的用例正在为用户提供凭据。这不是个好主意。我将继续使用用户凭据与您的网站前端交谈。您的web前端使用用户从未看到并提供最终服务(API)访问的服务帐户。

更新

我刚刚注意到您的评论,您正在开发自己的CLI。如果没有更多关于这个CLI将访问哪些项目/服务的详细信息,您可能会考虑使用与您的服务对话的用户凭据,这将向用户发出访问令牌。此令牌仅有效一个小时。您可以在代码中支持刷新此令牌。这使您能够使用用户身份验证,控制服务帐户的使用,并仍然保持良好的安全性。请注意,我正试图引导您避免直接将服务帐户文件分发给用户。如果这些用户是您自己的员工,这就不是什么问题了。对那些不在你控制之下的人来说,要仔细考虑。

结束更新

我会尽力提供你的问题的细节和建议。在为你决定最佳策略时,一定要考虑我先前的评论。

在另一种情况下,(特定于服务帐户的凭据),我假设我必须向每个开发人员提供指示,以发出一个json文件,该文件对应于与他/她的权限完全相同的服务帐户。

如果要编写使用服务帐户凭据的应用程序,我将创建一个加载/安装凭据的方法。只需提供一个文件并告诉他们在程序中执行这个步骤。然而,你有一个问题。向所有用户分发相同的服务帐户并不是一个好主意。你如何处理撤销等?服务帐户的设计并不能唯一地分配给每个项目几十个或数百个用户。

那么更新过程呢?

服务帐户凭据JSON密钥文件不会过期。从服务帐户创建的令牌确实过期,但这是由Google客户端库管理的,或者是在您自己的代码中自动刷新它们。

当用户每次被分配/撤销某些权限时会发生什么情况?这个JSON是如何保持同步的?

服务帐户文件不包含权限。这些存储在中。一旦修改了分配给服务帐户的角色,就会在几分钟内透明地在全局应用它们。

票数 4
EN

Stack Overflow用户

发布于 2019-10-13 19:22:54

如果只希望交互地使用该工具(例如,替换gcloud),则可能会很好地使用默认凭据,因为它的使用率将很低。

也就是说,为服务帐户创建一个键在控制台或gcloud中都是一种相当大的差异操作,API使其成为相当容易使用密钥 --您基本上设置了一个GOOGLE_APPLICATION_CREDENTIALS环境变量。在此页可以看到更多信息。使用服务帐户还允许您准确地分配所需的角色,而不是使用用户帐户可能具有的广泛权限进行操作,这减少了代码做不应该做的事情时出错的可能性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58366923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档