google-cloud-platform - GCP - 即使拥有 devstorage.read_only 权限也无法列出 Bucket 中的对象?
问题描述
我创建了一个 EC2 实例,它默认创建具有默认权限的服务帐户。所以当我检查默认权限时,我发现服务帐户是下面所有这些权限。
https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/monitoring.write
https://www.googleapis.com/auth/servicecontrol
https://www.googleapis.com/auth/service.management.readonly
https://www.googleapis.com/auth/trace.append
现在我尝试使用以下命令列出存储桶内的所有对象:-
gsutil ls gs://mybucketname
发现错误
AccessDeniedException: 403 XXXX@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket.
为什么即使我的服务帐户用户有这个错误devstorage.read_only
?
我对 GCP 很陌生,所以请告诉我。
解决方案
请阅读官方文档,了解使用 IAM 角色设置服务帐户访问级别和设置 GCE 实例的访问范围之间的区别:
当您将实例设置为作为服务账户运行时,您可以通过授予服务账户的 IAM 角色来确定服务账户的访问级别。如果服务账户没有 IAM 角色,则服务账户不能在该实例上运行任何 API 方法。
此外,实例的访问范围决定了通过 gcloud 工具和实例上的客户端库发出的请求的默认 OAuth 范围。因此, 在通过 OAuth 进行身份验证时,访问范围可能会进一步限制对 API 方法的访问。但是,它们不会扩展到其他身份验证协议,例如 gRPC。
本质上:
IAM根据授予服务账户的 IAM 角色限制对 API 的访问。
通过 OAuth 进行身份验证时,访问范围可能会进一步限制对 API 方法的访问。
因此,我建议为您的实例服务帐户添加一个具有权限的 IAM 角色(也许)。storage.objects.list
roles/storage.legacyBucketReader
推荐阅读
- firebase - 我想将产品添加到具有多个变体的 Firebase
- android - 为什么当我导入文件并且函数在那里时,代码给了我一个未解析的引用?
- c++ - 附加文件的 C++ Boost FileSystem 临时路径不存在
- sql - 填充 XML 数据类型的 postgres 列
- php - 违反完整性约束:列不能为空错误
- java - docx4j / xlsx4j - 为什么 Row 忽略具有空值的单元格
- c# - MethodInfo 从找到的列表中获取事件
- javascript - svg 中的中心 D3 geoPath 美国地图
- c++ - 需要有关在 C++ 中处理线程的建议
- tsql - SSIS:将 SSIS 作业中的所有电子邮件连接到一封电子邮件?