繁体   English   中英

GCP 限制服务帐户有条件访问单个实例

[英]GCP limit service account to have conditional access to a single instance

我想设置一个实例计划,显然这需要服务帐户具有compute.instances.start/stop权限。 做到这一点的唯一方法是使服务帐户具有管理员权限,这会添加与角色相关联的整个主机(在我的情况下)不必要的权限。

所以我想将默认角色保留为“计算引擎服务代理”,并添加管理员角色,条件是它只适用于单个虚拟机。 所以我尝试将条件设置为:

resource.type == "compute.googleapis.com/Instance"
resource.name == "//compute.googleapis.com/projects/<project>/zones/<zone>/instances/<name>"

但是,当我尝试应用计划时,我仍然收到 IAM 错误。 这种方法是否可行,“名称”需要采用什么格式?

另外在这里设置无条件角色有哪些安全风险? 文档基本上说“设置它”而没有任何进一步的限定。

编辑:这种情况(上图)似乎对 scope 完全不正确,所有虚拟机都显示我的服务帐户具有管理员角色。 就像resource.name被忽略一样。

我可以使用 Compute Engine Instances 页面上的“Permissions”选项卡正确设置此角色,范围为单个 VM,但仍有两个问题:

  1. Compute Admin (beta) 条件似乎还不够,即使它们包含实例启动/停止。 但是,当通过实例权限设置时,v1 确实有效。 有什么不同?
  2. 如何将条件正确设置为 IAM 规则,而不是按实例手动设置?

更好的方法是创建一个仅具有启动/停止权限的自定义角色,然后将该角色绑定到Compute Engine Service Agent 服务帐户

创建自定义角色:

gcloud iam roles create Scheduler --project=$YOUR_PROJECT_ID \
    --title=Scheduler \
    --description="Schedule a VM instance to start/stop" \
    --permissions=compute.instances.start,compute.instances.stop

并将自定义角色绑定到 Compute Engine 服务代理:

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:service-$PROJECT_NUMBER@compute-system.iam.gserviceaccount.com" \
    --role="projects/$PROJECT_ID/roles/Scheduler"

这样你就可以避免条件部分,只授予启动/停止权限,因为我相信这是你的初衷。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM