【问题标题】:Access google cloud storage bucket from other project using python使用 python 从其他项目访问谷歌云存储桶
【发布时间】:2016-04-25 10:25:40
【问题描述】:

假设我在项目 X 中有谷歌云存储桶,并且想要从部署在项目 Y 上的代码(Python)上传项目 X 中的桶中的对象。 项目 X 和 Y 都使用相同的凭据(登录 ID)。

是否可以使用 OAuth2.0 或任何其他建议来实现? 我曾尝试使用 Service Account、AppAssertionCredentials 和 OAuth2DecoratorFromClientSecrets,但失败了。

credentials = GoogleCredentials.get_application_default()
service = discovery.build('storage', 'v1', credentials=credentials)
req = service.objects().insert(
            bucket=bucket_name,
            name=fileName,
            media_body=media)   

【问题讨论】:

    标签: python-2.7 google-app-engine google-oauth google-cloud-storage


    【解决方案1】:

    这是一个非常常见的用例。您无需在代码中执行任何特殊操作即可访问其他项目中的存储桶。存储桶名称是全球唯一的,因此您的应用将引用另一个项目中的现有存储桶,就像它引用自己项目中的存储桶一样。

    但是,为了使插入调用成功,您需要使运行该代码的帐户成为您正在写入的存储桶的所有者。

    那是应用引擎代码吗?应用引擎代码作为特定服务帐户运行。您需要向该服务帐户授予权限。前往https://console.developers.google.com/permissions/serviceaccounts?project=_ 查找该服务帐户的名称。可能类似于它可能是 my-project-name@appspot.gserviceaccount.com。

    现在,使用 GCS 用户界面或通过 gsutil,让该帐户完全控制存储桶:

    gsutil acl ch -u my-project-name@appspot.gserviceaccount.com:FC gs://myBucketName
    

    【讨论】:

    • 遗憾的是,大多数现代存储桶不再支持 ACL 权限。在 IAM 范例上设置权限的任何替代方法?
    • 我相信您应该能够为同一个机器人帐户授予 IAM 角色:gsutil iam ch user:my-project-name@appspot.gserviceaccount.com:objectViewer gs://myBucketName
    • 成功了,谢谢!唯一的细节是,当我想授权一个服务帐户时,我必须使用 serviceAccount 更改用户关键字。像这样的东西:$ gsutil iam ch serviceAccount:<serviceAccount>:objectViewer gs://<bucket>
    猜你喜欢
    • 2019-08-24
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2014-09-04
    • 2019-10-12
    • 2018-12-09
    • 2022-07-18
    相关资源
    最近更新 更多