首页 > 解决方案 > 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 很陌生,所以请告诉我。

标签: google-cloud-platformgoogle-cloud-storage

解决方案


请阅读官方文档,了解使用 IAM 角色设置服务帐户访问级别和设置 GCE 实例的访问范围之间的区别:

服务帐号权限

当您将实例设置为作为服务账户运行时,您可以通过授予服务账户的 IAM 角色来确定服务账户的访问级别。如果服务账户没有 IAM 角色,则服务账户不能在该实例上运行任何 API 方法。

此外,实例的访问范围决定了通过 gcloud 工具和实例上的客户端库发出的请求的默认 OAuth 范围。因此, 在通过 OAuth 进行身份验证时,访问范围可能会进一步限制对 API 方法的访问。但是,它们不会扩展到其他身份验证协议,例如 gRPC。

本质上:

IAM根据授予服务账户的 IAM 角色限制对 API 的访问。

通过 OAuth 进行身份验证时,访问范围可能会进一步限制对 API 方法的访问。

因此,我建议为您的实例服务帐户添加一个具有权限的 IAM 角色(也许)。storage.objects.listroles/storage.legacyBucketReader


推荐阅读