我正在尝试从在 COS 上运行的容器内部使用 google.auth.default()
创建凭据。我已经在创建它时分配了服务帐户和范围。
当我对云存储运行一个简单的测试时,它就像一个魅力。
from google.cloud import storage
storage_client = storage.Client()
print(storage_client._credentials.valid)
print(storage_client._credentials.service_account_email)
给我 True
,以及我分配给 Compute Engine 实例的服务帐户。
但是当我跑步时
import google.auth
credentials, project = google.auth.default()
print(credentials.valid)
print(credentials.service_account_email)
我得到 False
和 default
我尚未设置 GOOGLE_APPLICATION_CREDENTIALS
环境变量,并且容器上未安装 gcloud。
据我所知,Compute Engine 会将元数据向下传递到容器,以便它可以使用它们访问 Google API(就像 Google 存储的情况一样)。
我需要访问一些托管在云运行中并需要身份验证的 gRPC api。我可以使用服务帐户从我的本地开发环境访问它们,但我不认为将服务帐户文件显式传递给容器是要走的路。我正在尝试使用示例 here,但我无法创建凭据。
是否有另一种方法可以从元数据创建凭据?或者我在创建/运行容器时遗漏了什么?