將 Active Directory 與 Kubernetes 上的 AlloyDB Omni 整合

選取說明文件版本:

本文說明如何在 Kubernetes 型 AlloyDB Omni 資料庫叢集上啟用 Active Directory 整合功能,讓現有 Active Directory 使用者存取 AlloyDB Omni 資料庫。整合 Active Directory 後,透過 Kerberos 機制驗證的使用者就能使用 GSSAPI 授權,存取 AlloyDB Omni。

AlloyDB Omni 中的 Active Directory 設定為選用功能,預設為停用。只有使用 Active Directory 伺服器進行驗證的環境,才能使用這項設定機制。

本文假設您已熟悉如何套用 Kubernetes 資訊清單檔案,以及如何使用 kubectl 指令列工具。詳情請參閱「指令列工具 (kubectl)」。

事前準備

如要啟用 Active Directory 整合功能,您必須具備下列條件:

  • 部署在 Kubernetes 環境中的 AlloyDB Omni 叢集
  • Active Directory 伺服器 keytab

啟用 Active Directory 驗證

如要啟用 Active Directory 驗證,請執行下列 Helm 指令:

helm upgrade alloydbomni-operator PATH_TO_CHART -n alloydb-omni-system --set userDefinedAuthentication.enabled=true

指令傳回下列結果:

Release "alloydbomni-operator" has been upgraded. Happy Helming!
NAME: alloydbomni-operator
LAST DEPLOYED: CURRENT_TIMESTAMP
NAMESPACE: alloydb-omni-system
STATUS: deployed
REVISION: 2
TEST SUITE: None

檢查 Active Directory 驗證狀態

如要判斷 Active Directory 驗證狀態,請按照下列步驟操作:

  1. 取得機群控制器的目前部署作業 args,並確認 enable-user-defined-authentication 已設為 true,請執行下列指令:

    kubectl get deployment -n alloydb-omni-system fleet-controller-manager -o json | jq '.spec.template.spec.containers[0].args'
    
    [
      "--health-probe-bind-address=:8081",
      "--metrics-bind-address=127.0.0.1:8080",
      "--leader-elect",
      "--image-registry=gcr.io",
      ...
      "--enable-user-defined-authentication=true"
    ]
    
  2. 取得本機控制器的目前部署引數,並執行下列指令,確保 enable-user-defined-authentication 設為 true

    kubectl get deployment -n alloydb-omni-system local-controller-manager -o json | jq '.spec.template.spec.containers[0].args'
    
    [
      "--health-probe-bind-address=:8081",
      "--metrics-bind-address=127.0.0.1:8080",
      "--leader-elect",
      "--deployment-platform=generic-k8s",
      "--enable-backup-from-standby=true",
      "--enable-user-defined-authentication=true"
    ]
    

設定 Active Directory 支援

  1. 使用 pg_hba.conf 檔案項目建立及套用設定對應:

    kubectl apply -f - 
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: pg-hba-config
    data:
      pg_hba_entries: |
        # Active Directory-based users
        hostgssenc all all 0.0.0.0/0    gss
        hostgssenc all all ::1/128      gss
        # Database-based users
        hostssl    all all 0.0.0.0/0  scram-sha-256
        hostssl    all all ::/0       scram-sha-256
    EOF
    

    請根據需求修改這些項目。這些項目會覆寫 pg_hba.conf 中的預設項目。如果新增無效設定,使用者就無法登入。

    在上述範例中,您新增了以 GSS 為基礎的驗證項目,接著是密碼驗證。也就是說,使用者會透過 GSS API 登入。如果這種登入方式失敗,系統會改用密碼驗證。

    詳情請參閱「pg_hba.conf 檔案」。

  2. 使用 keytab 建立及套用密鑰:

     kubectl apply -f - 
     apiVersion: v1
     kind: Secret
     metadata:
       name: db-keytab-dbcluster-sample
     type: Opaque
     data:
       krb5.keytab: |
        BASE64_ENCODED_KEYTAB
     EOF
     

  3. 選用:使用 pg_ident.conf 項目建立及套用設定對應。

      kubectl apply -f - EOF
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: pg-ident-config
      data:
        pg_ident_entries: |
    MAP_NAME /^(.)@YOUR.REALM$/ \1 MAP_NAME /^(.)@your.realm$/ \1 EOF

    如要實作使用者名稱對應,請在 pg_hba.conf 檔案的選項欄位中指定 map=MAP_NAME

    詳情請參閱「識別地圖」。

  4. 如要啟用 Active Directory 整合功能,請將註解新增至 DBCluster 規格。

    kubectl apply -f - DB_CLUSTER_NAME
    type: Opaque
    data:
      DB_CLUSTER_NAME: "ENCODED_PASSWORD"
    ---
    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: DB_CLUSTER_NAME
      annotations:
        dbs.dbadmin.goog.com/pg-hba-config-map: pg-hba-config
        dbs.dbadmin.goog.com/pg-ident-config-map: pg-ident-config
        dbs.dbadmin.goog.com/keytab-ref: db-keytab-dbcluster-sample
    spec:
      databaseVersion: "DB_VERSION"
      primarySpec:
        adminUser:
          passwordRef:
            name: db-pw-DB_CLUSTER_NAME
        resources:
          memory: MEMORY_SIZE
          cpu: CPU_COUNT
          disks:
          - name: DataDisk
            size: DISK_SIZE
    EOF
    

以 Active Directory 使用者身分建立資料庫角色

  1. 在資料庫中建立與 Active Directory 使用者相符的角色。 如要為 Active Directory 使用者建立角色,請連線至叢集並執行下列指令:

    username=# CREATE ROLE "USERNAME@REALM" WITH LOGIN;
    
  2. 使用 Active Directory 使用者登入資料庫。您必須在連線的用戶端中啟用 kinit

    kubectl exec -it postgres -n DB_CLUSTER_NAMESPACE -- bash
    root:/# kinit USERNAME
    Password for USERNAME@REALM:
    
    root:/# psql -h HOSTNAME -d DB_NAME -U USERNAME@REALM
    psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3)
    GSSAPI-encrypted connection
    Type "help" for help.
    
  3. 執行 SQL 查詢。

    username=# select * from ;
    

停用 Active Directory 驗證

如要停用 Active Directory 驗證,請執行下列 Helm 指令:

helm upgrade alloydbomni-operator PATH_TO_CHART -n alloydb-omni-system --set userDefinedAuthentication.enabled=false

您可以檢查 Active Directory 驗證狀態

指令傳回下列結果:

Release "alloydbomni-operator" has been upgraded. Happy Helming!
NAME: alloydbomni-operator
LAST DEPLOYED: CURRENT_TIMESTAMP
NAMESPACE: alloydb-omni-system
STATUS: deployed
REVISION: 2
TEST SUITE: None