问题描述
通常有 Compute Engine default service account
由 GCP 自动创建,例如 VM 代理使用此帐户访问 GCP 中的不同资源,默认情况下具有 role/editor
权限。
假设我想创建只能由此默认服务帐户访问而其他人不能访问的 GCS 存储桶。我查看了 ACL 并尝试使用此默认服务帐户电子邮件将 ACL 添加到存储桶中,但它并没有真正起作用。
我意识到我仍然可以从其他具有 storage bucket read
和 storage object read
权限的帐户访问存储桶和此存储桶中的对象,但我不确定我做错了什么(也许存在一些默认 ACL? ).
我的问题是:
- 是否可以只访问该默认帐户?在这种情况下,谁将无法访问它?
- 最好的方法是什么? (非常感谢使用 Storage API 的示例)
- 仍然有
role/StorageAdmin
等角色,实际上无论将什么 ACL 放在存储桶上,如果我拥有此角色(或更高的角色,例如所有者),我仍然可以访问它,对吗?
谢谢!
解决方法
我建议您不要使用 ACL(还有 Google)。最好在统一 IAM 策略中切换存储桶。
ACL 有两个不好的方面:
- 新创建的文件不是 ACL,每次创建 ne 文件时都需要设置它
- 很难知道谁有访问权限,谁没有访问 ACL。 IAM 服务更适合审计。
当您切换到统一 IAM 访问权限时,所有者、查看者和编辑者角色不再有权访问存储桶(角色/storage.admin 不包含在此原始角色中)。它可以一键解决所有不需要的访问。否则,正如 John 所说,删除存储桶和除您的服务帐户之外有权访问该存储桶的项目的所有 IAM 权限。
,您可以使用 Cloud IAM 和 ACLs 控制对存储桶和对象的访问。
例如,使用 ACL 授予服务帐户 WRITE (R: READ,W: WRITE,O: OWNER) 对存储桶的访问权限:
gsutil acl ch -u service-account@project.iam.gserviceaccount.com:W gs://my-bucket
从存储桶中删除服务帐户的访问权限:
gsutil acl ch -d service-account@project.iam.gserviceaccount.com gs://my-bucket
如果在 IAM 身份(项目级别)中有 role/StorageAdmin 等角色,他们将有权访问项目的所有 GCS 资源。您可能需要更改权限以避免他们获得访问权限。