1

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

使用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) 

回答

1

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

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

这是应用程序引擎代码吗?应用引擎代码作为特定的服务帐户运行。您需要授予该服务帐户的权限。前往https://console.developers.google.com/permissions/serviceaccounts?project=_查找该服务帐户的名称。这可能是像这可能是[email protected]

现在,使用GCS UI,或者通过gsutil会,给那个了水桶帐户完全控制:

gsutil acl ch -u [email protected]:FC gs://myBucketName