使用 IAM 进行访问权限控制
本主题介绍如何使用 Identity and Access Management 来控制 Config Connector 如何 创建和管理 Google Cloud 资源。
如需安装 Config Connector,您可以通过创建 IAM 来进行身份验证 服务账号,然后使用适用于 GKE for GKE 的工作负载身份联合 绑定 IAM 和 Kubernetes 服务账号借助 IAM Config Connector 对特定资源执行操作。限制权限 则您可以更好地控制 Config Connector 可以创建的资源
您可以选择使用单个或多个服务账号管理资源 服务账号。
单个服务账号
使用 GKE 插件或手动安装 Config Connector 时,您可以在 ConfigConnector
CustomResource 中设置集群模式。在集群模式下,您可以使用单个 IAM 服务账号
创建和管理资源,即使您使用 Config Connector 来管理
多个项目
下图展示了此模式的工作原理,其中同一服务 账号管理两个项目:
多个服务账号
您可以使用多个服务账号,只需在
ConfigConnector
CustomResource.
借助命名空间型模式,您可以根据不同 IAM 服务账号的各自注意事项来划分权限,并在不同的 Kubernetes 命名空间之间隔离权限,因为您可以为每个命名空间关联不同的服务账号。
在以下情况下选择命名空间型模式:
- 希望将 IAM 权限隔离在 Kubernetes 命名空间中 。
- 预期通过 Google Cloud 控制台管理大量 Google Cloud 资源, 管理单个集群上的多个 Google Cloud 项目。
例如,您可以为每个集群 将各项目中的资源整理到同一 Kubernetes 命名空间中, 然后将相应的 IAM 服务账号绑定到 Kubernetes 命名空间这样,您就可以将多个资源的 IAM 权限 确保每个项目都拥有一组不同的、不相关的权限。
下图简要展示了命名空间模式的工作原理,其中 每个项目由不同的服务账号管理:
在命名空间模式下,每个 IAM 服务账号都会绑定到
命名空间当您在该命名空间内创建资源时
Config Connector 使用此服务账号创建 Google Cloud
资源。有一个专用的 Config Connector cnrm-controller-manager
Pod
对于模拟 IAM 服务账号的每个命名空间
与命名空间关联的方法
如需了解如何配置命名空间模式,请参阅使用命名空间模式安装 Config Connector。
安装后调整权限
在安装 Config Connector 的过程中,您可能为 基本角色,并将该角色分配给 您为其配置的服务账号 Config Connector。如果您在 namespaced 中配置了 Config Connector 模式,可能会有更多 多个 IAM 服务账号
完成安装后,您可能需要删除或更新 以满足安全注意事项和最佳实践要求。
Config Connector 的一项核心优势是统一的工具。这意味着您可以 使用 Config Connector 本身来微调 IAM 角色, 权限。您可以使用 IAMPolicyMember 或 IAMPartialPolicy Config Connector 中的资源来配置 IAM 权限。这需要一个拥有您项目、文件夹或组织的管理员权限的 IAM 服务账号。此服务账号必须是 配置为绑定到 Config Connector 通过集群模式或命名空间模式进行安装。
以下部分列出了使用 Config Connector 的不同政策示例 来管理 IAM 权限。
组织所有者权限
扩展 Config Connector 的权限,使其可以管理所有项目和 文件夹中,请完成以下步骤:
创建以下 YAML 清单:
apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPolicyMember metadata: name: iampolicymember-orglevel-permission namespace: NAMESPACE spec: member: serviceAccount:SERVICE_ACCOUNT_NAME@HOST_PROJECT_ID.iam.gserviceaccount.com role: roles/owner resourceRef: kind: Organization external: ORGANIZATION_ID
替换以下内容:
- 将
NAMESPACE
替换为您的命名空间的名称 - 将
SERVICE_ACCOUNT_NAME
替换为您的服务账号名称 - 将
HOST_PROJECT_ID
替换为服务账号的宿主项目 ID - 将
roles/owner
替换为适当的角色 - 将
ORGANIZATION_ID
替换为您的组织 ID
- 将
使用
kubectl
或您选择的任何配置管理工具将 YAML 清单应用于您的集群。
文件夹所有者权限
扩展 Config Connector 的权限,使其可以管理所有项目和 文件夹位于 给定文件夹中,请完成以下步骤:
创建以下 YAML 清单:
apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPolicyMember metadata: name: iampolicymember-orglevel-permission namespace: NAMESPACE spec: member: serviceAccount:SERVICE_ACCOUNT_NAME@HOST_PROJECT_ID.iam.gserviceaccount.com role: roles/owner resourceRef: kind: Folder external: folders/FOLDER_ID
替换以下内容:
- 将
NAMESPACE
替换为您的命名空间的名称 - 将
SERVICE_ACCOUNT_NAME
替换为您的服务账号名称 - 将
HOST_PROJECT_ID
替换为服务账号的宿主项目 ID - 将
roles/owner
替换为适当的角色 - 将
FOLDER_ID
替换为您的文件夹 ID
- 将
使用
kubectl
或您选择的任何配置管理工具将 YAML 清单应用于您的集群。
项目所有者权限
如需允许 Config Connector 管理特定项目的资源, 请完成以下步骤:
创建以下 YAML 清单:
apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPolicyMember metadata: name: iampolicymember-orglevel-permission namespace: NAMESPACE spec: member: serviceAccount:SERVICE_ACCOUNT_NAME@HOST_PROJECT_ID.iam.gserviceaccount.com role: roles/owner resourceRef: kind: Project external: projects/PROJECT_ID
替换以下内容:
- 将
NAMESPACE
替换为您的命名空间的名称 - 将
SERVICE_ACCOUNT_NAME
替换为您的服务账号名称 - 将
HOST_PROJECT_ID
替换为服务账号的宿主项目 ID - 将
roles/owner
替换为适当的角色 - 将
PROJECT_ID
替换为您的目标项目 ID
- 将
使用
kubectl
或您选择的任何配置管理工具将 YAML 清单应用于您的集群。
预定义角色
如果您希望向 Config Connector 授予更多受限权限,可以 为 Config Connector 分配一个或多个 IAM 角色 来创建一些 IAMPolicyMember 资源还是 IAMPartialPolicy 资源。以下角色通常分配给 Config Connector 服务账号:
Editor:授予 editor 角色 允许使用除项目级或组织级以外的大多数 Config Connector 功能 配置(例如 IAM 修改)。
IAM Service Account Admin 角色:授予
roles/iam.serviceAccountAdmin
权限允许 Config Connector 配置 IAM 服务账号。Resource Manager:授予 Resource Manager 角色 例如
roles/resourcemanager.folderCreator
,Config Connector 可以 管理文件夹和 组织。
自定义角色
如果预定义角色不能满足您的需求,您可以创建 具有您定义的权限的自定义角色。
如需了解如何创建和分配自定义角色,请参阅创建和管理自定义角色。
后续步骤
- 了解如何按文件夹、项目或组织整理资源。