假设我在项目X中有谷歌云存储桶,并且想要从项目Y上部署的代码(Python)上的项目X中的桶中上传对象。 项目X和Y都在相同的凭据(登录ID)下。
使用OAuth2.0或任何其他建议是否可以实现? 我尝试过使用服务帐户,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)
答案 0 :(得分:2)
这是一个非常常见的用例。您不需要在代码中执行任何特殊操作来访问其他项目中的存储桶。存储桶名称是全局唯一的,因此您的应用程序将引用另一个项目中的现有存储桶,其方式与它自己的项目中的存储桶相同。
为了使插入调用成功,您需要使运行该代码的帐户成为您正在写入的存储桶的所有者。
该app引擎代码?应用引擎代码作为特定服务帐户运行。您需要授予该服务帐户的权限。转到https://console.developers.google.com/permissions/serviceaccounts?project=_以查找该服务帐户的名称。它可能类似于它可能是my-project-name@appspot.gserviceaccount.com。
现在,使用GCS UI或gsutil,让该帐户完全控制存储桶:
insert