gsutil 命令的 IAM 权限

下表列出了在给定资源上运行每个 Cloud Storage gsutil 命令所需的 Identity and Access Management (IAM) 权限。将 IAM 权限捆绑在一起即可创建角色。您可以向用户和群组授予角色

您还可以在本页面上找到以下方面的信息:

命令 子命令 所需的 IAM 权限
autoclass get storage.buckets.get
autoclass set storage.buckets.update
cat storage.objects.get
compose storage.objects.get
storage.objects.create
storage.objects.delete1
config
cors get storage.buckets.get
cors set storage.buckets.update
cp storage.objects.list2(针对目标存储分区)
storage.objects.get(针对源对象)
storage.objects.create(针对目标存储分区)
storage.objects.delete3(针对目标存储分区)
defstorageclass get storage.buckets.get
defstorageclass set storage.buckets.update
du storage.objects.get
hash storage.objects.get
help
hmacKeys create storage.hmacKeys.create
hmacKeys delete storage.hmacKeys.delete
hmacKeys get storage.hmacKeys.get
hmacKeys list storage.hmacKeys.list
hmacKeys update storage.hmacKeys.update
iam get storage.buckets.get
storage.buckets.getIamPolicy
iam setch storage.buckets.get
storage.buckets.getIamPolicy
storage.buckets.setIamPolicy
storage.buckets.update
kms authorize resourceManager.projects.get
iam.serviceAccounts.create4
cloudkms.cryptoKeys.setIamPolicy(针对授权的 Cloud KMS 密钥)
kms encryption storage.buckets.get
kms encryption -d storage.buckets.get
storage.buckets.update
kms encryption -k storage.buckets.get
storage.buckets.update
resourceManager.projects.get5
cloudkms.cryptoKeys.setIamPolicy5
kms serviceaccount resourceManager.projects.get
label get storage.buckets.get
label set/ch storage.buckets.update
lifecycle get storage.buckets.get
lifecycle set/ch storage.buckets.update
logging get storage.buckets.get
logging set storage.buckets.update
ls(列出存储分区) storage.buckets.list
storage.buckets.getIamPolicy6
ls(列出对象) storage.objects.list
storage.objects.getIamPolicy7
ls -b storage.buckets.get
storage.buckets.getIamPolicy6
mb storage.buckets.create
mv storage.objects.list2(针对目标存储桶)
storage.objects.get(针对源对象)
storage.objects.create(针对目标存储桶)
storage.objects.delete(针对源存储桶)
storage.objects.delete3(针对目标存储桶)
notification create storage.buckets.update
pubsub.topics.get(针对包含 Pub/Sub 主题的项目)
pubsub.topics.create8(针对包含 Pub/Sub 主题的项目)
pubsub.topics.getIamPolicy(针对接收通知的 Pub/Sub 主题)
pubsub.topics.setIamPolicy8(针对接收通知的 Pub/Sub 主题)
notification create -s storage.buckets.update
notification delete storage.buckets.get
storage.buckets.update
notification list storage.buckets.get
notification watchbucket storage.buckets.update
notification stopchannel storage.buckets.update
pap get storage.buckets.get
pap set storage.buckets.get
storage.buckets.update
storage.buckets.setIamPolicy10
perfdiag storage.buckets.get
storage.objects.create
storage.objects.delete
storage.objects.list
storage.objects.get
rb storage.buckets.delete
requesterpays get storage.buckets.get
requesterpays set on storage.buckets.update
requesterpays set off storage.buckets.update
resourcemanager.projects.createBillingAssignment9
retention clearevent-defaultlockset storage.buckets.update
retention eventtemp storage.objects.get
storage.objects.list
storage.objects.update
retention get storage.buckets.get
rewrite -k storage.objects.list
storage.objects.get
storage.objects.create
storage.objects.delete
rewrite -s storage.objects.list
storage.objects.get
storage.objects.create
storage.objects.delete
storage.objects.update
rm storage.objects.delete
rm -a storage.objects.delete
storage.objects.list
rm -r(删除存储桶) storage.buckets.delete
storage.objects.delete
storage.objects.list
rpo get storage.buckets.get
rpo set storage.buckets.get
storage.buckets.update
rsync storage.objects.get(针对源对象和目标存储桶)
storage.objects.create(针对目标存储桶)
storage.objects.delete11(针对目标存储桶)
storage.objects.list(针对源存储桶和目标存储桶)
rsync -n storage.objects.list(针对源和目标存储分区)
setmeta storage.objects.get
storage.objects.list
storage.objects.update
signurl 无;但是,密钥包含在此命令中的服务账号必须有权执行编码到签名网址中的请求。
stat storage.objects.get
test
ubla set storage.buckets.get
storage.buckets.update
ubla get storage.buckets.get
update
version
versioning get storage.buckets.get
versioning set storage.buckets.update
web get storage.buckets.get
web set storage.buckets.update

1 仅当构造的对象与存储分区中已存在的对象具有相同的名称时,才需要此权限。

2 仅当命令中的目标包含对象路径时,才需要此权限。

3 仅当您使用并行复合上传或者不使用 -n 标志但插入的对象与存储桶中已存在的对象具有相同的名称时,才需要此权限。

4 仅当不存在与项目关联的 Cloud Storage 服务账号时,才需要此权限。

5 如果您使用 gsutil kms encryption -k 且您项目的服务账号没有访问所请求 Cloud KMS 密钥的权限,gsutil 会运行 gsutil kms authorize,以便为您的服务账号授予所需的权限。

6 仅当您要在详细信息中添加 IAM 政策时,才需要此权限。

7 仅当您希望 IAM 政策包含在详细信息中时,才需要此权限,并且此权限不适用于启用了统一存储桶级访问权限的存储桶。

8 如果主题已存在且相关服务账号可以访问该主题,则不需要这些权限。

9 仅当您的请求中未包含结算项目时,才需要此权限。如需了解详情,请参阅请求者付款功能的使用和访问要求

10 如果命令不更改存储桶设置,则不需要此权限。

11 仅当您使用 -d 标志或者插入的对象与存储桶中已存在的对象具有相同的名称但具有不同的数据时,才需要此权限。

与 ACL 相关的方法

下表列出了运行仅适用于管理 ACL 的 gsutil 命令所需的 IAM 权限。这些命令仅适用于已停用统一存储分区级访问权限的存储分区。

命令 子命令 处理的资源 所需的 IAM 权限
acl get 存储桶 storage.buckets.get
storage.buckets.getIamPolicy
acl setch 存储桶 storage.buckets.get
storage.buckets.getIamPolicy
storage.buckets.setIamPolicy
storage.buckets.update
acl get 对象 storage.objects.get
storage.objects.getIamPolicy
acl setch 对象 storage.objects.get
storage.objects.getIamPolicy
storage.objects.setIamPolicy
storage.objects.update
cp -acp -p 对象 storage.objects.lista(针对目标存储分区)
storage.objects.get(针对源对象)
storage.objects.create(针对目标存储分区)
storage.objects.deleteb(针对目标存储分区)
storage.objects.getIamPolicy(针对源对象)
storage.objects.setIamPolicy(针对目标存储分区)
defacl get 存储桶 storage.buckets.get
storage.buckets.getIamPolicy
defacl setch 存储桶 storage.buckets.get
storage.buckets.getIamPolicy
storage.buckets.setIamPolicy
storage.buckets.update
iam get 对象 storage.objects.get
storage.objects.getIamPolicy
iam setch 对象 storage.objects.get
storage.objects.getIamPolicy
storage.objects.setIamPolicy
storage.objects.update
mv -amv -p 对象 storage.objects.lista(针对目标存储桶)
storage.objects.get(针对源对象)
storage.objects.create(针对目标存储桶)
storage.objects.delete(针对源存储桶)
storage.objects.deleteb(针对目标存储桶)
storage.objects.getIamPolicy(针对源对象)
storage.objects.setIamPolicy(针对目标存储桶)
rsync -arsync -p 对象 storage.objects.get(针对源对象和目标存储分区)
storage.objects.create(针对目标存储分区)
storage.objects.deletec(针对目标存储分区)
storage.objects.list(针对源存储分区和目标存储分区)
storage.objects.getIamPolicy(针对源对象)
storage.objects.setIamPolicy(针对目标存储分区)

a 仅当命令中的目标包含对象路径时,才需要此权限。

b 仅当您使用并行复合上传或者不使用 -n 标志但插入的对象与存储桶中已存在的对象具有相同的名称时,才需要此权限。

c 仅当您使用 -d 标志或者插入的对象与存储桶中已存在的对象具有相同的名称但具有不同的数据时,才需要此权限。

-u 顶级标志

如果您使用 -u 全局标志指定应该用于结算请求费用的项目,则必须对指定的项目具有 serviceusage.services.use 权限。例如,在访问启用了请求者付款功能的存储桶时,会用到 -u 标志。

通配符和递归标志

如果在命令中使用 URI 通配符选择多个对象,则您必须对包含这些对象的存储桶具有 storage.objects.list 权限。类似地,如果在命令中使用 URI 通配符选择多个存储分区,则您必须对包含这些存储分区的项目具有 storage.buckets.list 权限。

如果您使用递归标志(-r-R),那么,除了您正在使用的特定命令所需的权限之外,您还必须具有相关存储分区的 storage.objects.list 权限。

-m 顶级标志

通常,如果您使用作用于多个对象或存储桶的 gsutil 命令,该命令会在出现第一个错误时失败。但是,当您使用 -m 全局标志时,gsutil 会记录它遇到的任何错误并继续执行操作。

例如,假设您尝试对一系列对象执行 acl set 命令,但您仅有权对其中部分对象执行该命令。如果不使用 -m 标志,gsutil 会一直成功应用 ACL,直到到达您无权应用 ACL 的对象为止。这时,gsutil 将失败。如果您使用 -m 标志,gsutil 会记录出现的错误(gsutil 在尝试将 ACL 应用于您没有权限的对象时,会出现此类错误),但是,它不会失败,而是会继续执行操作。

后续步骤