是否可以使用谷歌的工作负载身份联合的OIDC方法来验证我的Python应用程序的谷歌云存储包。
我想这样做:
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = str(os.path.dirname(os.path.dirname(__file__))) + "/keys/credentials.json"
from google.cloud import storage
import google.oauth2.id_token
import google.auth.transport.requests
request = google.auth.transport.requests.Request()
target_audience = "https://pubsub.googleapis.com"
obtained_id_token = google.oauth2.id_token.fetch_id_token(request, target_audience)
storage_client = storage.Client(credentials=obtained_id_token)
这会产生以下错误:
ValueError:此库仅支持来自google auth库python的凭据。看见https://google-auth.readthedocs.io/en/latest/有关此库的身份验证帮助
这并不能解决问题中的工作负载标识联合部分,但可以使问题代码正常工作:
import google.oauth2.id_token
import google.auth.transport.requests
request = google.auth.transport.requests.Request()
target_audience = "https://storage.cloud.google.com/"
# Create ID token credentials.
credentials = google.oauth2.id_token.fetch_id_token_credentials(target_audience, request=request)
# Refresh the credential to obtain an ID token.
credentials.refresh(request)
id_token = credentials.token
id_token_expiry = credentials.expiry
storage_client = storage.Client(credentials=credentials)
bucket = storage_client.get_bucket(settings.GOOGLE_CLOUD_BUCKET_NAME)
仍然需要看看是否有可能在不需要回购中的凭据json文件的情况下进行身份验证。
不能直接回复评论但是
作为参考,这里有一些链接更详细地描述了这一点
>
联合会将您的环境aws|oidc|azure
凭据交换为GCP理解的凭据(不涉及svc帐户密钥),请参阅gcp工作负载标识联合
Google发行的oidc(id_tokens
)通常用于访问您部署在云运行等上的服务
最后,仅供参考,谷歌使用svc帐户jwt(不是oidc或oauth,而是谷歌特有的)对某些服务进行身份验证的方式非常特殊。。。它一点也不常见,但这里描述了它参见jwt访问令牌
看看自动在萨尔的交换通用OIDC凭证为GCP凭证回购。
IIUC将您的联合凭据转换为Google应用程序默认凭据(见下文),您可以在任何Google SDK中使用这些凭据。
根据@john hanley的评论,您错误地使用了auth库。
看看谷歌。验证(在导出GOOGLE_应用程序_凭证=/path/to/your/key.json之后)您可以:
import google.auth
credentials, project_id = google.auth.default()
我试图将一个用编写的函数迁移到 实时解压缩并逐行读取 对每一行执行一些光转换 将未压缩的输出(一次一行或块)写入GCS 输出是>2GB,但略小于3GB,所以它适合。 null AFAIC,我将坚持,因为输出可以放入内存--就目前而言--但是多部分上传是以最少的内存支持任何输出大小的方法。 想法还是替代方案?
我正在谷歌云平台上工作,我必须使用java非Web应用程序访问云功能,就像我正在尝试使用谷歌云存储JSON API存储和检索谷歌云存储中的对象一样。 在访问这些之前,我需要对我的应用程序进行身份验证,所以我找到了授权API来进行授权访问。 null 我浏览了GCP文档,但没有得到区分这些文档的明确信息,我对GCP非常陌生,所以请您分享任何信息或博客链接,以说明如何使用Google Cloud Cl
我试图使用云任务调用云运行服务,如文档中所述。 我有一个运行云运行服务。如果我让服务公开访问,它的行为将与预期的一样。 我已经创建了一个云队列,并使用本地脚本调度云任务。这个用的是我自己的账户。脚本如下所示 null 最后的测试:如果我在创建任务时从任务中删除,我将从Cloud Run得到一个403响应!不是401...如果我从服务帐户中删除“Cloud Run Invoker”角色并在本地使用c
我正在尝试建立一个基于python的基本谷歌应用引擎站点,允许用户将文件上传到谷歌云存储(主要是图像) 我已经阅读了JSON API和GCS客户端库概述(以及blobstore等)的文档,但仍然没有很好地了解哪种方法是最好的以及它们之间的关系。如果有人能概述一下,或者给我指出一些我可以查看的资源,那就太好了 此外,任何相关的示例代码都会非常有用。我已经能够在此处运行上载示例,但不确定它们是否对应用
这是一个很好的OAuth2用例吗?还是OAuth2仅用于授予第三方应用程序对用户数据的访问权限? 如果OAuth2不是可行的方法:如何将用户令牌安全地传递给浏览器,并防止中间人攻击?用户令牌应该在一定时间后过期吗?
我在谷歌云存储桶中有文件。 如何将这些文件设置为Cloudflare CDN的原点? (Cloudflare控制面板似乎只想要根域上的网站...?)