使用 IAM 控管存取權


本主題說明如何使用身分與存取權管理功能,控管 Config Connector 建立及管理 Google Cloud 資源的方式。

如要安裝 Config Connector,您必須建立 IAM 服務帳戶,然後使用 GKE 適用的工作負載身分聯盟,將 IAM 服務帳戶與 Kubernetes 服務帳戶繫結,以便進行驗證。有了 IAM,Config Connector 就能對特定資源執行動作。限制指派給服務帳戶的權限,即可進一步控管 Config Connector 可建立的資源類型。

您可以選擇使用單一服務帳戶或多個服務帳戶來管理資源。

單一服務帳戶

使用 GKE 外掛程式或手動安裝時,您可以在 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 連接器」一文。

安裝後調整權限

安裝 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 服務帳戶:

  • 編輯者:授予編輯者角色可使用大部分的 Config Connector 功能,但不包括專案或機構層級的設定 (例如 IAM 修改)。

  • IAM 服務帳戶管理員角色:授予 roles/iam.serviceAccountAdmin 權限,可讓 Config Connector 設定 IAM 服務帳戶。

  • Resource Manager:授予 Resource Manager 角色 (例如 roles/resourcemanager.folderCreator),可讓 Config Connector 管理資料夾和機構。

自訂角色

如果預先定義的角色不符合您的需求,您可以建立自訂角色並加入您定義的權限。

如要瞭解如何建立及指派自訂角色,請參閱建立及管理自訂角色

後續步驟