使用 IAM 进行访问权限控制


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

如需安装 Config Connector,您需要创建一个 IAM 服务账号,然后使用适用于 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,该 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 清单应用于您的集群。

Project Owner 权限

如需允许 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:授予 editor 角色将允许使用大部分 Config Connector 功能,但项目或组织范围内的配置除外(如 IAM 修改)。

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

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

自定义角色

如果预定义角色不能满足您的需要,您可以使用自己定义的权限创建自定义角色

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

后续步骤