Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 使用OAuth2令牌交互使用GCP服务而不是服务帐户(密钥)_Google Cloud Platform - Fatal编程技术网

Google cloud platform 使用OAuth2令牌交互使用GCP服务而不是服务帐户(密钥)

Google cloud platform 使用OAuth2令牌交互使用GCP服务而不是服务帐户(密钥),google-cloud-platform,Google Cloud Platform,为了限制要管理和处理其密钥的服务帐户的数量,我正在探索从开发者笔记本电脑或台式机访问GCP资源的其他方法,以便我可以运行访问GCP服务的特别脚本或交互式程序(例如Jupyter notebook) 在通过web浏览器进行身份验证后,使用gcloud auth application default login生成一个刷新令牌,可用于获取和续订可用于与GCP服务交互的访问令牌 我遵循的工作流程如下: 运行gcloud auth应用程序默认登录名。这会在我的磁盘上生成一个JSON文件 包含刷新令牌

为了限制要管理和处理其密钥的服务帐户的数量,我正在探索从开发者笔记本电脑或台式机访问GCP资源的其他方法,以便我可以运行访问GCP服务的特别脚本或交互式程序(例如Jupyter notebook)

在通过web浏览器进行身份验证后,使用
gcloud auth application default login
生成一个刷新令牌,可用于获取和续订可用于与GCP服务交互的访问令牌

我遵循的工作流程如下:

  • 运行
    gcloud auth应用程序默认登录名
    。这会在我的磁盘上生成一个JSON文件 包含刷新令牌
  • 将JSON文件位置导出为
    GOOGLE\u应用程序\u凭据
    env变量
    GOOGLE\u APPLICATION\u CREDENTIALS=/Users/my.username/.config/gcloud/APPLICATION\u default\u CREDENTIALS.json
  • 使用该文件通过Google auth库进行身份验证,并与不同的GCP服务交互
  • 这很方便,因为它减少了在团队成员周围分发、保护和(如果需要)共享服务帐户密钥文件的需要。但是,我注意到提供的刷新令牌没有过期,仍然有效

    除非我在这里遗漏了什么,否则这会使
    application\u default\u credentials.json
    文件与服务帐户密钥一样敏感。IMO说,如果它丢失或受损,它可以用来获取访问令牌,而无需重新验证,这是相当不安全的

    我们知道GCP安全最佳实践建议对服务到服务的工作负载使用服务帐户(及其密钥)。我所描述的这个场景是针对来自 开发者或工程师的笔记本电脑。我们认为,强制用户每隔几个小时通过web进行交互身份验证以获取新令牌,比使用存储在硬盘中的长期服务帐户密钥更安全、更方便

    我已经通读了[1],但找不到确切的答案

    • 有人知道这些刷新令牌是否过期吗
    • 有没有一种方法可以控制和限制它们的寿命(理想情况下是几小时或几分钟)
    • 对于这种情况,什么是最佳/常见做法?是否为每个用户使用单个服务帐户(和密钥)

    [1] 注意:用户凭据也有刷新令牌

    有人知道这些刷新令牌是否过期吗

    Google OAuth刷新令牌不会过期。它们可以被撤销

    有没有办法控制和限制他们的寿命(理想情况下是 小时还是分钟

    您可以定期撤销刷新令牌,这将使访问和客户端ID令牌无效。这意味着您正在处理刷新令牌,这增加了另一个要管理的安全问题

    此场景的最佳/常见做法是什么?使用单个 每个用户的服务帐户(和密钥)

    如果您使用用户凭据(登录Google的方法),您将收到SDK警告,如果您进行了大量API调用,您将被阻止。Google不希望您使用用户凭据代替服务帐户凭据。用户凭证的验证过程需要在谷歌的后端系统上付出更多的努力。假定用户凭据是在不安全的环境(web浏览器)中创建的,而服务帐户凭据则假定是在安全的环境中创建的


    最佳实践是向单个应用程序颁发服务帐户JSON密钥文件,该应用程序仅具有运行该应用程序所需的权限。例如,如果您创建的工具只需要读取云存储对象,请创建仅具有读取权限的服务帐户。应定期轮换服务帐户密钥,下载新密钥并删除旧密钥。每个应用程序都应该有自己的服务帐户JSON密钥文件。我写了一篇关于如何在云存储上安全地存储JSON密钥文件的文章。这有助于旋转关键点,因为应用程序只需在需要时下载最新的关键点。(). 我的文章讨论了谷歌云的运行,但同样的原则也适用。

    最佳实践是向单个应用程序发布服务帐户JSON密钥文件,该应用程序仅具有运行该应用程序所需的权限。
    我100%同意这一点,但我的问题更多的是关于用户(人类)的交互,比如,通过脚本或类似工具使用GCS或BigQuery。如果必须创建一个单独的服务帐户(+密钥),并且每个帐户在IAM中都具有相同的权限,这将是非常不切实际的。您在博客文章中描述的解决方案(顺便说一句,写得不错)依赖于访问和使用共享服务帐户密钥。您可以使用用户帐户凭据。但是,请阅读我的警告:如果您在应该使用服务帐户的地方使用用户帐户凭据,则会受到API限制。云SDK将显示一条警告消息,这可能会让您的用户感到困惑。如果您阅读了另一篇文章,我将展示如何使用用户凭据生成访问令牌和标识令牌。