使用 IAM 控制访问权限


本主题介绍如何使用 Identity and Access Management 来控制 Config Connector 创建和管理 Google Cloud 资源的方式。

如需安装 Config Connector,请进行身份验证,方法是创建 IAM 服务帐号,然后使用 Workload Identity for GKE 将 IAM 服务帐号与 Kubernetes 服务帐号绑定。IAM 允许 Config Connector 对特定资源执行操作。通过限制分配给您的服务帐号的权限,您可以更好地控制 Config Connector 可以创建的资源类型。

您可以选择使用单个服务帐号或多个服务帐号来管理资源。

单个服务账号

使用 GKE 插件或手动安装方式安装 Config Connector 时,您可以在 ConfigConnector CustomResource 中设置集群模式。在集群模式下,即使您使用 Config Connector 管理多个项目,也可以使用单个 IAM 服务帐号创建和管理资源。

下图展示了此模式的工作原理,其中同一服务帐号管理两个项目:

展示 Config Connector 使用同一服务账号管理多个项目的图

多个服务账号

您可以通过在 ConfigConnector CustomResource 中设置命名空间模式来使用多个服务帐号。命名空间模式允许您根据不同 IAM 服务帐号的相应关注点划分权限,并在不同 Kubernetes 命名空间之间隔离权限,因为您可以为每个命名空间关联不同的服务帐号。

在以下情况下选择命名空间型模式:

  • 希望在 Kubernetes 命名空间级别隔离 IAM 权限。
  • 预计会在单个集群上管理来自多个 Google Cloud 项目的大量 Google Cloud 资源。

例如,您可以为每个项目创建一个 IAM 服务帐号,将每个项目中的资源整理到同一 Kubernetes 命名空间中,然后将相应的 IAM 服务帐号绑定到 Kubernetes 命名空间。这样,您就可以分隔每个项目的 IAM 权限,使每个项目具有一组不同且不相关的权限。

下图简要介绍了命名空间模式的工作原理,在这种模式下,每个项目由不同的服务帐号管理:

显示 Config Connector 使用两个不同服务帐号管理多个项目的示意图

在命名空间模式下,每个 IAM 服务帐号默认绑定到一个命名空间。当您在该命名空间中创建资源时,Config Connector 使用此服务帐号创建 Google Cloud 资源。每个命名空间都有一个专用的 Config Connector cnrm-controller-manager pod,用于模拟与命名空间关联的 IAM 服务帐号。

如需了解如何配置命名空间模式,请参阅使用命名空间模式安装 Config Connector

安装后调整权限

在安装 Config Connector 期间,您可能选择了临时基本角色,并将该角色分配给了为其配置了 Config Connector 的服务帐号。如果您在命名空间模式下配置了 Config Connector,则您可能有多个 IAM 服务帐号。

完成安装后,您可能需要移除或更新大量权限,以与安全注意事项和最佳实践保持一致。

Config Connector 的一个核心优势是统一的工具。这意味着您可以使用 Config Connector 本身来微调 IAM 角色和权限。您可以使用 Config Connector 中的 IAMPolicyMemberIAMPartialPolicy 资源来配置 IAM 权限。这需要一个具有跨项目、文件夹或组织管理员权限的 IAM 服务帐号。必须将此服务帐号配置为通过集群模式或命名空间模式绑定到 Config Connector 安装。

以下各部分列出了使用 Config Connector 管理 IAM 权限的不同政策示例。

组织所有者权限

如需扩展 Config Connector 的权限,使其能够管理指定组织的所有项目和文件夹,请完成以下步骤:

  1. 创建以下 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
  2. 使用 kubectl 或您选择的任何配置管理工具将 YAML 清单应用于您的集群。

文件夹所有者权限

如需扩展 Config Connector 的权限,使其能够管理给定文件夹中的所有项目和文件夹,请完成以下步骤:

  1. 创建以下 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
  2. 使用 kubectl 或您选择的任何配置管理工具将 YAML 清单应用于您的集群。

项目所有者权限

如需允许 Config Connector 管理特定项目的资源,请完成以下步骤:

  1. 创建以下 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
  2. 使用 kubectl 或您选择的任何配置管理工具将 YAML 清单应用于您的集群。

预定义角色

如果您希望向 Config Connector 授予更受限的权限,则可以通过创建一些 IAMPolicyMember 资源或一个组合的 IAMPartialPolicy 资源,为 Config Connector 安装分配一个或多个 IAM 角色。以下角色通常分配给 Config Connector 服务帐号:

  • 编辑者:授予 Editor 角色会授予除项目或组织级配置(例如 IAM 修改)以外的大多数 Config Connector 功能。

  • IAM Service Account Admin 角色:授予 roles/iam.serviceAccountAdmin 权限可允许 Config Connector 配置 IAM 服务帐号。

  • Resource Manager:授予 Resource Manager 角色(例如 roles/resourcemanager.folderCreator)可让 Config Connector 管理文件夹和组织。

自定义角色

如果预定义角色不符合您的需求,您可以使用定义的权限创建自定义角色

如需了解如何创建和分配自定义角色,请参阅创建和管理自定义角色

后续步骤