问题描述
在使用Google Cloud Platform(GCP)存储桶时,希望在不授予storage.bucket.list权限的情况下,配置一个公开的存储桶。他尝试创建一个基于“Storage Object Viewer”角色的自定义角色,并删除了storage.bucket.list权限。但在更新权限时遇到了错误。
解决方案
请注意以下操作可能会因版本差异而有所不同,执行前务必备份。
方案1:使用CLI(gcloud和gsutil)进行自定义角色配置
以下是一个使用GCP云Shell和CLI工具(gcloud和gsutil)来配置自定义角色的过程,以取代现有的标准roles/storage.objectViewer在allUsers上的权限。
- 创建新角色: 创建一个新的自定义角色,并定义您所需的自定义权限。
创建一个新的YAML文件,用于存储新角色的配置:
shell
vi custom_role.yaml
在custom_role.yaml
文件中添加新角色的配置,例如:
yaml
title: "storageobjectviewer.nolist"
description: "Storage Object Viewer Role without source objects list"
stage: "ALPHA"
includedPermissions:
- resourcemanager.projects.get
- storage.objects.get
使用gcloud命令在GCP中创建新角色:
shell
gcloud iam roles create storageobjectviewer.nolist --project=[YOUR PROJECT] --file=custom_role.yaml
- 获取当前权限: 将存储桶的当前权限下载到本地文件:
shell
gsutil iam get gs://[YOUR BUCKET] > perms.txt
- 更新权限: 使用新角色更新权限。在
perms.txt
文件中,找到适用于allUsers
的权限部分,并将角色更改为新创建的自定义角色:
json
{
"members": [
"allUsers"
],
"role": "projects/[YOUR PROJECT]/roles/storageobjectviewer.nolist"
}
使用以下命令将新权限应用到存储桶:
shell
gsutil iam set perms.txt gs://[YOUR BUCKET]
- 验证更改: 使用以下命令验证新配置是否生效:
shell
gsutil iam get gs://[YOUR BUCKET]
您还可以在GCP控制台中查看存储桶的权限和IAM角色配置。
方案2:使用UI进行配置
如果您更喜欢通过GCP控制台UI进行操作,可以在以下位置配置存储桶的权限:
- 进入GCP控制台并选择您的项目。
- 找到并打开您要配置的存储桶。
- 导航到“权限”或“IAM”选项卡,查找
allUsers
的权限设置。 - 将现有的
roles/storage.objectViewer
更改为您创建的自定义角色,以删除storage.bucket.list
权限。 - 确认更改。
请注意,无论您选择使用CLI还是UI,最终目标都是将新的自定义角色配置应用于存储桶,并确保已删除storage.bucket.list
权限,从而实现公开存储桶的配置。
希望这些解决方案对您有所帮助!如需进一步了解有关自定义角色和权限配置的信息,您可以查阅GCP文档中提供的相关链接。