我已经创建了一个角色为“ Storage Admin”的服务帐户“ my-service-account@blabla.com”。 现在,我想将此帐户限制为仅访问特定的存储桶-“ gs:// my-project / my-bucket”
现在的问题是sa用户可以访问我的所有存储桶。我无法从存储桶权限(我不想让用户访问的存储桶)中删除“ my-service-account@blabla.com”,因为这些权限是继承的。我该怎么办? 干杯, 克里斯
答案 0 :(得分:3)
我遇到了同样的问题。
删除所有不应访问项目所有存储分区的服务帐户。
在“IAM -> 服务账户”中创建一个新的服务账户“my_user”。在创建过程中不要赋予它任何权利(这将允许访问您在问题中描述的项目的所有存储桶)
在存储桶中授予新的服务帐号权限:
gsutil iam ch serviceAccount:my_user@my_project.iam.gserviceaccount.com:roles/storage.objectViewer gs://my_bucket
(我无法使用 GCP UI 执行此操作)
替换 my_user、my_project 和 my_bucket。 “storage.objectViewer”赋予用户读取对象的权限。
警告:您需要一些时间才能在“bucket -> Permissions”中看到这个“正确”,您还会在“gsutil iam get gs://my-bucket”的输出中看到它!? 何时以及如果您看到它对我来说无法完全重现。
由于我的测试,服务帐户现在只能访问此存储分区,而不能访问项目中的其他存储分区。
答案 1 :(得分:0)
您可以使用Cloud IAM将服务帐户的访问权限限制为特定的存储桶。
这是您可以使用的gsutil命令:
gsutil iam ch serviceAccount:my-service-account@project.iam.gserviceaccount.com:objectAdmin gs://my-project/my-bucket
要从存储桶中的所有角色中删除服务帐户,请执行以下操作:
gsutil iam ch -d serviceAccount:my-service-account@project.iam.gserviceaccount.com gs://my-project/my-bucket
或者您可以使用ACLs控制对存储桶和对象的访问。
例如,授予服务帐户WRITE(R:READ,W:WRITE,O:OWNER)对存储桶的访问权限:
gsutil acl ch -u my-service-account@project.iam.gserviceaccount.com:W gs://my-project/my-bucket
要从存储桶中删除对服务帐户的访问权限,请执行以下操作:
gsutil acl ch -d my-service-account@project.iam.gserviceaccount.com gs://my-project/my-bucket
我建议从存储桶中删除对服务帐户的访问。然后授予对特定存储桶的访问权限。