GCP 为每个项目和 Terraform 预定义 IAM 角色
Posted
技术标签:
【中文标题】GCP 为每个项目和 Terraform 预定义 IAM 角色【英文标题】:GCP predefines IAM roles per Project and Terraform 【发布时间】:2021-03-02 23:29:26 【问题描述】:我想为每个文件夹构建 GCP 访问权限,因此文件夹用户只能在文件夹中拥有项目查看器,并且在文件夹中创建的每个项目都应该只允许有权访问文件夹的团队在项目中使用特定资源。
我设法创建了文件夹部分,项目将通过 terraform 创建,现在我有一个阻止程序,如何使用预定义角色执行每个项目的 iam 权限。假设我有一个小组需要处理由 terraform 创建的项目 X,并且该小组将使用 Cloud SQL、Compute Engine、网络管理。所以理想情况下,我会在 TF 中创建google_project_iam_binding,其中成员将是该组,角色将包含这些资源的预定义 IAM 角色列表。但这是不可能的,我需要指导如何实现这一点。
resource "google_project_iam_custom_role" "km-role"
role_id = "KnowledgeManagementRole"
title = "Knowledge Management Custom Role"
description = "Test role for KM"
permissions = [
"compute.*",
"networkmanagement.*",
"resourcemanager.projects.get",
"resourcemanager.projects.list",
"serviceusage.quotas.get",
"serviceusage.services.get",
"serviceusage.services.list",
]
不幸的是,不支持*
,所以在这种情况下,我必须编写 30+ 计算机权限。您也不能将预定义角色用作自定义 iam 角色中的列表:/。
【问题讨论】:
可以使用google_project_iam_binding
进行用户组绑定,也许我不完全了解您的情况,您是否在创建自定义角色时遇到问题,或者是什么问题不允许您完成这一步?
问题是权限列表。例如,如果我想添加所有计算机权限,其中有 40 多个,我需要将所有这些权限都列在 aim_custom_role 中。 google_project_iam_binding
在代码中仅支持 ONE 权限。您不能在那里定义权限列表 - 这就是问题所在。我知道如何克服这个问题的唯一方法是使用iam_custom_role
,但是你需要把所有可能的权限都放在computer.*
中,因为不支持*
表达式。
【参考方案1】:
阅读 GCP 自定义角色 documentation,除了添加您希望角色拥有的所有权限之外,似乎没有其他方法可以创建自定义角色,这似乎是一种鼓励自定义粒度的方法并避免将基本/预定义角色添加到自定义角色可能导致的安全事件。
我发现公共问题跟踪器中有一个开放的功能请求能够将预定义角色添加到自定义角色:
[FR] Be able to add pre-defined roles to a custom role
如果您为请求“加注星标”,您将收到任何重要更新的通知并跟踪其进度。
【讨论】:
是的,也许我会调查一下服务帐户和模拟权限。不确定这是否是个好方法...... 我不确定您打算如何实施服务帐户和模拟权限,但我认为您最终会在流程中再添加一个步骤,因为服务帐户需要自定义角色也是如此。以上是关于GCP 为每个项目和 Terraform 预定义 IAM 角色的主要内容,如果未能解决你的问题,请参考以下文章
在 Terraform for GCP 中允许帐户和角色时出错
为 Terraform 服务帐户定义 ClusterRoleBinding
使用 Terraformer\Terraform 克隆 GCP 项目