使用 python 从其他项目访问 google 云存储桶
Access google cloud storage bucket from other project using python
假设我在项目 X 中有 google 云存储桶,并且想从部署在项目 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
假设我在项目 X 中有 google 云存储桶,并且想从部署在项目 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