python-2.7 - 使用python从其他项目访问谷歌云存储桶

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

假设我在项目 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)   

最佳答案

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

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

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

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

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

关于python-2.7 - 使用python从其他项目访问谷歌云存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36837909/

相关文章:

c# - 带有 dotnetopenauth 的 Google Hybrid OpenID+OAuth

python - 如何使用函数在 sqlalchemy 查询中验证密码?

python - 使用python中的beautifulsoup从具有更多文本内容的网页中提取数据

python - 在使用 Flask 的 python 中,如何写出一个对象以供下载?

python - 如何遍历数组数组中的键?

javascript - Google-App-Engine channel API : Server doesn't send message to client

perl - 使用 "400 Bad Request"获取 "invalid_grant"和 "Net::Google::Drive::Simple"消息

java - 为什么我在 GAE 中得到这个异常

python - GAE self.request.cookies 返回一个空字典

security - 状态参数在基于 OAuth2 的身份验证中可以防止什么样的 CSRF 攻击?