授权谷歌云平台服务账号只访问一个谷歌云存储桶
Posted
技术标签:
【中文标题】授权谷歌云平台服务账号只访问一个谷歌云存储桶【英文标题】:Authorize Google Cloud Platform Service Account to Access Only One Google Cloud Storage Bucket 【发布时间】:2020-03-29 07:23:18 【问题描述】:我创建了一个具有存储管理员 (roles/storage.admin
) 角色的 Google Cloud Platform 服务帐户 $GCP_SERVICE_ACCOUNT
。
现在我希望限制此帐户,使其只能访问特定的 Google Cloud Storage (GCS) 存储桶 ($GCS_BUCKET_NAME
)。
现在的问题是$GCP_SERVICE_ACCOUNT
可以访问所有 GCS 存储桶。我无法从其他 GCS 存储桶中删除 $GCP_SERVICE_ACCOUNT
,因为 roles/storage.admin
已被继承。
我该怎么办?
【问题讨论】:
你的问题解决了吗? 【参考方案1】:您可以使用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
我建议从存储桶中删除服务帐户的访问权限。然后授予对特定存储桶的访问权限。
【讨论】:
感谢您的回复。这会删除对其他存储桶的访问吗? sa 用户已经是存储桶 gs://my-project/my-bucket 的对象管理员 我了解到您想移除服务帐号对所有存储桶的访问权限,然后仅将其分配给特定存储桶。 正确。我尝试了第一个 gsutil 命令,但这并没有删除对其他存储桶的访问权限。 好的,我看到你的更新了。我是否必须为要删除 sa 的每个存储桶运行此命令?:“ gsutil iam ch -d serviceAccount:my-service-account@project.iam.gserviceaccount.com:objectAdmin gs://my-project/my-桶” 没有 gsutil 可以做到吗?其中一些任务依赖于 gsutils 真是太奇怪了:(【参考方案2】:我遇到了同样的问题。
删除所有不应访问项目所有存储分区的服务帐号。
在“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”的输出中看到它!? 何时以及如果您发现它对我来说不能完全重现。
由于我的测试,服务帐户现在只能访问此存储桶,而不能访问项目中的其他存储桶。
【讨论】:
以上是关于授权谷歌云平台服务账号只访问一个谷歌云存储桶的主要内容,如果未能解决你的问题,请参考以下文章