מידע נוסף זמין במאמר סקירה כללית על Active Directory.
במאמר הזה אנחנו מניחים שאתם יודעים איך להחיל קובצי מניפסט של Kubernetes ולהשתמש בכלי שורת הפקודה kubectl. למידע נוסף, ראו כלי שורת הפקודה (kubectl).
לפני שמתחילים
כדי להפעיל את השילוב עם Active Directory, צריך:
- אשכול AlloyDB Omni שנפרס בסביבת Kubernetes
- קובץ keytab של שרת Active Directory
מעבר מגרסה 1.4.0 לגרסה 1.5.0 של אופרטור AlloyDB Omni Kubernetes
אם אתם משתמשים בשילוב של Active Directory בגרסה 1.4.0 או גרסה קודמת של אופרטור AlloyDB Omni, אתם צריכים לעבור לגרסה 1.5.0 של אופרטור AlloyDB Omni.
כדי לעבור לגרסה 1.5.0 של אופרטור AlloyDB Omni:
- שדרוג אופרטור AlloyDB Omni לגרסה 1.5.0
- יוצרים מניפסט משאבים של
UserDefinedAuthentication.- מאכלסים את
spec.dbclusterRefבשם של אשכול מסד הנתונים (DBCluster) המטורגט. - ממלאים את
spec.keytabSecretRefבשם של הסוד של קובץ ה-keytab. - מעתיקים את הכללים הקיימים של
pg_hba.confשרלוונטיים לאימות של Active Directory ו-Kerberos לשדהspec.pgHbaEntries. - מעתיקים את הערך הקיים של
pg_ident.conf rules(אם יש כזה) לשדהspec.pgIdentEntries. - מחילים את המניפסט החדש, לדוגמה,
kubectl apply -f user-auth-crd.yaml.
- מאכלסים את
- מסירים את ההגדרות לתצוגה מקדימה ופורסים מחדש את האשכול.
- בהגדרת המשאב DBCluster, מסירים את כל ההערות ששימשו בעבר להגדרת השילוב של Active Directory, למשל כללי אימות מבוסס-מארח (HBA), כללי זיהוי והערות של קובץ keytab.
- מוחקים את מפות התצורה
pg_hbaו-pg_identשיצרתם. - מחילים מחדש את המניפסט המעודכן של DBCluster.
הגדרת תמיכה ב-Active Directory
יוצרים ומחילים סוד באמצעות ה-keytab:
apiVersion: v1 kind: Secret metadata: name: KEYTAB_SECRET_NAME namespace: DB_CLUSTER_NAMESPACE type: Opaque data: krb5.keytab: | KEYTAB_FILE_CONTENTהפקודה הבאה היא דוגמה ליצירת keytab בשרת Active Directory:
ktpass /princ postgres/DBCLUSTER_HOST@REALM /Pass PASSWORD /mapuser postgres /crypto ALL /ptype KRB5_NT_Principal /out OUTPUT_PATH
ALLOYDB_HOSTהוא המארח שמפנה ל-DBCluster או לכתובת ה-IP של DBCluster.מחילים את המניפסט הבא של
UserDefinedAuthenticationמשאב בהתאמה אישית:apiVersion: alloydbomni.dbadmin.goog/v1 kind: UserDefinedAuthentication metadata: name: USER_DEFINED_AUTHENTICATION_NAME namespace: DB_CLUSTER_NAMESPACE spec: dbclusterRef: name: DB_CLUSTER_NAME keytabSecretRef: name: KEYTAB_SECRET_NAME pgHbaEntries: PG_HBA_ENTRIES pgIdentEntries: PG_IDENT_ENTRIESמחליפים את מה שכתוב בשדות הבאים:
-
USER_DEFINED_AUTHENTICATION_NAME: השם של UserDefinedConfiguration, לדוגמהDB_CLUSTER_NAME-ad-auth. -
DB_CLUSTER_NAMESPACE: מרחב השמות של Kubernetes לתוכנית הגיבוי הזו. מרחב השמות חייב להיות זהה למרחב השמות של אשכול מסד הנתונים. -
DB_CLUSTER_NAME: השם של אשכול מסד הנתונים, שהקציתם לו כשיצרתם אותו. -
KEYTAB_SECRET_NAME: השם של ה-keytab שיצרתם.
PG_HBA_ENTRIES:pg_hba.confרשומות כרשימת מחרוזות. הרשומות האלה מחליפות את רשומות ברירת המחדל ב-pg_hba.conf. אם מוסיפים הגדרה לא תקינה, המשתמשים לא יכולים להיכנס.בדוגמה הקודמת, הוספתם רשומות לאימות מבוסס-GSS ואחריו אימות מבוסס-סיסמה. המשמעות היא שהמשתמש מחובר באמצעות GSS API. אם גישת הכניסה הזו נכשלת, האימות מבוסס הסיסמה משמש כגיבוי.
למידע נוסף, ראו הקובץ pg_hba.conf.
PG_IDENT_ENTRIES:pg_ident.confרשומות כרשימת מחרוזות. כדי להטמיע מיפוי של שמות משתמשים, מציינים אתmap=בשדה האפשרויות בקובץpg_hba.conf. מידע נוסף זמין במאמר מיפוי זהויות.ראו את הדוגמה הבאה (שזמינה גם בדוגמה להגדרת אימות בהתאמה אישית):
apiVersion: v1 kind: Secret metadata: name: db-keytab-dbcluster-sample type: Opaque data: krb5.keytab: | DUMMY_KEYTAB --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: UserDefinedAuthentication metadata: name: dbcluster-sample-ad-auth spec: dbclusterRef: name: dbcluster-sample keytabSecretRef: name: db-keytab-dbcluster-sample pgHbaEntries: - hostgssenc all all 0.0.0.0/0 gss - hostgssenc all all ::1/128 gss - hostssl all all 0.0.0.0/0 scram-sha-256 - hostssl all all ::/0 scram-sha-256 pgIdentEntries: - usermap active_directory_user postgres_user
-
יצירת תפקידים במסד הנתונים כמשתמש ב-Active Directory
יוצרים במסד הנתונים תפקיד שתואם למשתמש ב-Active Directory. כדי ליצור תפקיד למשתמש ב-Active Directory, מתחברים לאשכול ומריצים את הפקודות הבאות:
username=# CREATE ROLE "USERNAME@REALM" WITH LOGIN;
נכנסים למסד הנתונים באמצעות המשתמש ב-Active Directory. צריך להפעיל את
kinitבלקוח שאליו מתחברים. בדוגמה הזו, ב-Pod שלpostgres-clientמותקניםkinitו-psql, והוא מוגדר להתחבר לאשכול AlloyDB Omni באמצעות הלקוחpsql.kubectl exec -it postgres-client -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.
להריץ שאילתות SQL.
username=# select * from TABLE_NAME;
השבתת האימות באמצעות Active Directory
כדי להשבית את האימות של Active Directory, מריצים את פקודת Helm הבאה:
helm upgrade alloydbomni-operator PATH_TO_CHART -n alloydb-omni-system --set userDefinedAuthentication.enabled=false
הפקודה מחזירה את הפלט הבא:
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 ב-Kubernetes
- עיון במאמרי העזרה של
UserDefinedAuthenticationבנושא CRD - פתרון בעיות בשילוב של Active Directory ב-AlloyDB Omni