下表列出了在给定资源上运行每个 Cloud Storage gsutil 命令所需的 Identity and Access Management (IAM) 权限。将 IAM 权限捆绑在一起即可创建角色。您可以向用户和群组授予角色。
在此页面上,您还可以找到以下方面的信息:
- 使用仅适用于停用了统一存储桶级访问权限的存储桶的其他命令 
- 使用通配符和递归标志 
- 使用 - -u标志指定用于结算的项目
- 使用 - -m标志并行执行操作
| 命令 | 子命令 | 所需的 IAM 权限 | 
|---|---|---|
| autoclass | get | storage.buckets.get | 
| autoclass | set | storage.buckets.update | 
| cat | storage.objects.get | |
| compose | storage.objects.getstorage.objects.createstorage.objects.delete1 | |
| config | 无 | |
| cors | get | storage.buckets.get | 
| cors | set | storage.buckets.update | 
| cp | storage.objects.list2storage.objects.getstorage.objects.createstorage.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.getstorage.buckets.getIamPolicy | 
| iam | set或ch | storage.buckets.getstorage.buckets.getIamPolicystorage.buckets.setIamPolicystorage.buckets.update | 
| kms | authorize | resourceManager.projects.getiam.serviceAccounts.create4cloudkms.cryptoKeys.setIamPolicy | 
| kms | encryption | storage.buckets.get | 
| kms | encryption -d | storage.buckets.getstorage.buckets.update | 
| kms | encryption -k | storage.buckets.getstorage.buckets.updateresourceManager.projects.get5cloudkms.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.liststorage.buckets.getIamPolicy6 | |
| ls(列出对象) | storage.objects.liststorage.objects.getIamPolicy7 | |
| ls -b | storage.buckets.getstorage.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.updatepubsub.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.getstorage.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.getstorage.buckets.updatestorage.buckets.setIamPolicy | 
| perfdiag | storage.buckets.getstorage.objects.createstorage.objects.deletestorage.objects.liststorage.objects.get | |
| rb | storage.buckets.delete | |
| requesterpays | get | storage.buckets.get | 
| requesterpays | set on | storage.buckets.update | 
| requesterpays | set off | storage.buckets.updateresourcemanager.projects.createBillingAssignment9 | 
| retention | clear、event-default、lock或set | storage.buckets.update | 
| retention | event或temp | storage.objects.getstorage.objects.liststorage.objects.update | 
| retention | get | storage.buckets.get | 
| rewrite -k | storage.objects.liststorage.objects.getstorage.objects.createstorage.objects.delete | |
| rewrite -s | storage.objects.liststorage.objects.getstorage.objects.createstorage.objects.deletestorage.objects.update | |
| rm | storage.objects.delete | |
| rm -a | storage.objects.deletestorage.objects.list | |
| rm -r(删除存储桶) | storage.buckets.deletestorage.objects.deletestorage.objects.list | |
| rpo | get | storage.buckets.get | 
| rpo | set | storage.buckets.getstorage.buckets.update | 
| rsync | storage.objects.getstorage.objects.createstorage.objects.delete11storage.objects.list | |
| rsync -n | storage.objects.list(针对源和目标存储分区) | |
| setmeta | storage.objects.getstorage.objects.liststorage.objects.update | |
| signurl | 无;但是,密钥包含在此命令中的服务账号必须有权执行编码到签名网址中的请求。 | |
| stat | storage.objects.get | |
| test | 无 | |
| ubla | set | storage.buckets.getstorage.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.getstorage.buckets.getIamPolicy | 
| acl | set或ch | 存储桶 | storage.buckets.getstorage.buckets.getIamPolicystorage.buckets.setIamPolicystorage.buckets.update | 
| acl | get | 对象 | storage.objects.getstorage.objects.getIamPolicy | 
| acl | set或ch | 对象 | storage.objects.getstorage.objects.getIamPolicystorage.objects.setIamPolicystorage.objects.update | 
| cp -a或cp -p | 对象 | storage.objects.listastorage.objects.getstorage.objects.createstorage.objects.deletebstorage.objects.getIamPolicystorage.objects.setIamPolicy | |
| defacl | get | 存储桶 | storage.buckets.getstorage.buckets.getIamPolicy | 
| defacl | set或ch | 存储桶 | storage.buckets.getstorage.buckets.getIamPolicystorage.buckets.setIamPolicystorage.buckets.update | 
| iam | get | 对象 | storage.objects.getstorage.objects.getIamPolicy | 
| iam | set或ch | 对象 | storage.objects.getstorage.objects.getIamPolicystorage.objects.setIamPolicystorage.objects.update | 
| mv -a或mv -p | 对象 | storage.objects.listastorage.objects.getstorage.objects.createstorage.objects.deletestorage.objects.deletebstorage.objects.getIamPolicystorage.objects.setIamPolicy | |
| rsync -arsync -p | 对象 | storage.objects.getstorage.objects.createstorage.objects.deletecstorage.objects.liststorage.objects.getIamPolicystorage.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 应用于您没有权限的对象时,会出现此类错误),但是,它不会失败,而是会继续执行操作。
后续步骤
- 在项目和存储桶级层分配 IAM 角色。
- 查看包含 Cloud Storage 权限的 IAM 角色。