但我不确定应用程序何时会在云中运行
安全地访问“key.json”文件?
查看我在下面写的详细信息。选择环境后,您可能根本不需要使用服务帐户 JSON 文件,因为元数据服务器可用于为您的代码提供凭据。这是最好的情况和安全的。在我的 personal website 上,我写了许多文章来展示如何创建、管理和存储 Google 凭据和机密。
还有一种方法可以使用访问令牌来验证存储对象
在 python 中?
所有访问都通过 OAuth 访问令牌。以下链接显示了使用元数据服务器的详细信息,我将在下面详细介绍。
Authenticating applications directly with access tokens
需要考虑三项:
- 我的代码没有在 Google Cloud 中运行
- 我的代码在 Google Cloud 中运行在“计算”类型的服务上,可以访问元数据服务器
- 我的代码在 Google Cloud 中运行,但无法访问元数据服务器。
1) 我的代码没有在 Google Cloud 中运行
这意味着您的代码正在您的桌面上运行,甚至在 AWS 等其他云中运行。您有责任提供授权方法。主要有两种方法: 1)Service Account JSON 密钥文件; 2) Google OAuth 用户授权。
服务帐号 JSON 密钥文件
这就是您现在使用的key.json。凭据存储在文件中,用于生成 OAuth 访问令牌。您必须保护该文件,因为它包含您的 Google Cloud 机密。您可以直接在代码中指定key.json,也可以通过环境变量GOOGLE_APPLICATION_CREDENTIALS指定@
Google OAuth 用户授权
此方法要求用户登录 Google 帐户,请求 Cloud Storage 的 OAuth 范围。最终结果是授权访问云存储的 OAuth 访问令牌(就像服务帐户一样)。
Getting Started with Authentication
2) 我的代码在 Google Cloud 中运行在“计算”类型的服务上,可以访问元数据服务器
注意“元数据”服务器这个词。对于 Google Cloud 计算服务,Google 提供了一个元数据服务器,该服务器为在该计算服务(Compute Engine、Cloud Functions、Cloud Run 等)上运行的应用程序提供凭据。如果您将 Google SDK 客户端库用于您的代码,这些库将自动为您选择凭据。元数据服务器可以被禁用(通过删除角色/范围来拒绝访问),因此您需要评估您正在运行的内容。
Storing and retrieving instance metadata
3) 我的代码在 Google Cloud 中运行,但无法访问元数据服务器。
这与 #1 的情况类似。但是,现在您只能使用服务帐户,除非这是一种可以向用户提供 Google 帐户授权服务的网络服务器类型的服务。