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 HMAC 密钥 storage.hmacKeys.create
hmacKeys delete HMAC 密钥 storage.hmacKeys.delete
hmacKeys get HMAC 密钥 storage.hmacKeys.get
hmacKeys list HMAC 密钥 storage.hmacKeys.list
hmacKeys update HMAC 密钥 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 存储桶、项目5 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.buckets.delete
storage.objects.delete
storage.objects.list
rm 对象 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 应用于您没有权限的对象时,会出现此类错误),但是,它不会失败,而是会继续执行操作。

后续步骤