当前位置: 首页 > 知识库问答 >
问题:

批量更改Google云存储ACL权限

钱欣悦
2023-03-14

我一直在通过与云存储桶直接关联的App Engine制作具有以下ACL属性的文件。

$options = stream_context_create(['gs'=>['acl'=>'private']]);

如果我想编辑和查看应用程序引擎脚本中的文件,这很好。然而,我希望能够从一个完全不同的Google App Engine项目ID.甚至是一个计算引擎访问这些文件。

由于当前ACL设置为private,我意识到这可能是不可能的。

在具有这些私有ACL文件的bucket中,我将不同项目ID的bucket权限设置为owner,并且它可以很好地处理未设置为private的文件。

我想知道是否有任何方法可以将bucket中的所有文件批量更改为正确的ACL。我有数百个文件,很难一一完成。目前,如果我点击一个文件并查看它的权限,那里什么都没有(因此是私有的)。

这就是当我尝试使用gsutil从文件中获取特定ACL时得到的结果

$ gsutil acl get gs://bucket/file
AccessDeniedException: Access denied. Please ensure you have OWNER permission on gs://bucket/file

这是我使用gsutil ch命令添加用户组时得到的

$ gsutil acl ch -u <project_id>@appspot.gserviceaccount.com:W gs://bucket/file
ERROR 0313 15:29:18.896421 retry_decorator.py] Retrying in 1.00 seconds ...
Traceback (most recent call last):
File "/usr/lib/google-cloud-sdk/platform/gsutil/third_party/retry-decorator/retry_decorator/retry_decorator.py", line 20, in f_retry
return f(*args, **kwargs)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/commands/acl.py", line 372, in ApplyAclChanges
fields=['acl', 'generation', 'metageneration'])
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/cloud_api_delegator.py", line 199, in GetObjectMetadata
bucket_name, object_name, generation=generation, fields=fields)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/gcs_json_api.py", line 513, in GetObjectMetadata
generation=generation)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/gcs_json_api.py", line 1018, in _TranslateExceptionAndRaise
raise translated_exception
AccessDeniedException: AccessDeniedException: 403 Forbidden
ERROR 0313 15:29:19.995003 retry_decorator.py] Retrying in 2.05 seconds ...
Traceback (most recent call last):
File "/usr/lib/google-cloud-sdk/platform/gsutil/third_party/retry-decorator/retry_decorator/retry_decorator.py", line 20, in f_retry
return f(*args, **kwargs)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/commands/acl.py", line 372, in ApplyAclChanges
fields=['acl', 'generation', 'metageneration'])
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/cloud_api_delegator.py", line 199, in GetObjectMetadata
bucket_name, object_name, generation=generation, fields=fields)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/gcs_json_api.py", line 513, in GetObjectMetadata
generation=generation)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/gcs_json_api.py", line 1018, in _TranslateExceptionAndRaise
raise translated_exception
AccessDeniedException: AccessDeniedException: 403 Forbidden
AccessDeniedException: 403 Forbidden

我假设我可能必须编写一个在我的应用程序引擎中运行的php脚本,该脚本将遍历每个文件并更改或添加权限?

任何帮助都将不胜感激,谢谢。

共有2个答案

何涵衍
2023-03-14

您可以运行gsutil命令-acl来更改对所有文件的访问权限,或者只更改对符合某些模式的文件的访问权限。

确保您验证自己,否则gsutil将无法访问您的存储桶:https://cloud.google.com/storage/docs/gsutil_install#authenticate

宋正真
2023-03-14

ACL设置为private时,只有创建该对象的AppEngine服务帐户才能修改ACL。

您可能需要使用其中一个API客户机库编写一个程序,并在AppEngine上执行它。

或者,我相信默认GCE服务号与AppEngine共享,因此如果您创建具有devstorage.full_control范围的VM,我认为您应该能够在VM中使用gsutil修改ACL。

 类似资料:
  • 我在我创建的谷歌云存储上有一个存储桶。我想测试一些内置ACL,如public read、public read write等。但是,一旦我使用gsutil setacl命令更改了ACL,例如:

  • 我有一个谷歌云存储桶,我想给个人用户访问个人文件的权限。因此,我有一个uri为:列为具有“读取”权限的“用户”。 但是,任何使用url访问该文件的尝试:<代码>https://storage.cloud.google.com/my-bucket/myfile即使我已登录,也会通过浏览器返回一个简短页面,说明“403禁止”。如果我打开“匿名”选项卡,当我转到该URL时,系统会提示我登录google,

  • 我是一个谷歌云项目的所有者,里面有一个谷歌云存储桶。我们所有的备份都被移到这个桶中。当我试图检索一些备份时,我得到了一个被拒绝的权限。我什么也做不了,只能把桶列出来。 当我尝试用 CommandException:未能为gs://abc/1234.sql设置acl。请确保您拥有对此资源的所有者角色访问权限。 这毫无意义,因为我是项目和桶的所有者。

  • 我想向成千上万,也许是数百万的用户授予对谷歌云存储桶的访问权限。我最初的计划是通过IAM角色使用他们的REST api授予访问权限。然而,在这个配额上 每个存储桶最多有100名成员拥有旧版IAM角色,每个存储桶最多有1500名成员拥有所有IAM角色。成员的示例包括个人用户、组和域。请参阅IAM标识。 这是否意味着,我只能为1500人提供阅读权限?如果是这样的话,有什么办法可以让成千上万的人进入?

  • 我已经将一些文件从S3转移到GCS,但是这些对象现在归传输服务所有,当我试图使用GSUTIL更新ACL时,它会说我不是所有者。这似乎是因为传输服务创建了它拥有的对象。是否有一种方法来模仿转移服务(或通过它的服务帐户登录),以便将所有权改变给我自己。 这样做时,我会得到以下错误: 请确保您拥有对此资源的所有者角色访问权限