ניהול אימות מובנה באמצעות מדיניות סיסמאות

בחירה של גרסת המסמך:

בדף הזה מוסבר איך מגדירים ומנהלים מדיניות סיסמאות ב-AlloyDB Omni.

מידע על מדיניות בנושא סיסמאות

אם משתמשי מסד הנתונים של האפליקציה מאומתים באמצעות AlloyDB Omni בשיטה המובנית שמבוססת על סיסמה, אתם יכולים לחייב שימוש בסיסמאות חזקות כדי לשפר את אבטחת האימות. אפשר להגדיר ולאפשר אכיפה של סיסמאות על ידי הגדרת מדיניות סיסמאות ב-AlloyDB Omni.

מגבלות של מדיניות הסיסמאות

אלו המגבלות שחלות על מדיניות הסיסמאות ב-AlloyDB Omni:

  • מדיניות הסיסמאות חלה רק על סיסמאות שנוצרו אחרי שהגדרתם את המדיניות. שינוי במדיניות הסיסמאות לא משפיע על סיסמאות קיימות של משתמשים.

  • מדיניות הסיסמאות חלה רק על סיסמאות שמוזנות כטקסט פשוט. המדיניות בנושא סיסמאות לא חלה על סיסמאות שמוזנות כמחרוזות מוצפנות.

הגדרת מדיניות סיסמאות ב-AlloyDB Omni

כדי להגדיר מדיניות סיסמאות, צריך לעדכן את פרמטרי הסיסמה של Grand Unified Configuration ‏ (GUC) בקובץ התצורה postgresql.conf. במאמר הגדרת פלאגים של מסד נתונים ב-AlloyDB Omni מוסבר איך להגדיר פרמטר GUC.

מדיניות סיסמאות ל-AlloyDB Omni יכולה לכלול את האפשרויות הבאות:

  • איסור שימוש בשם המשתמש: מונע שימוש בשם המשתמש בסיסמה.

  • מורכבות הסיסמה: בדקו אם הסיסמה מכילה את מספר התווים המותר של אותיות קטנות, אותיות גדולות, ספרות ותווים לא אלפאנומריים. כדאי גם לבדוק אם אורך הסיסמה תקין.

  • תוקף הסיסמה: חשוב לוודא שהסיסמאות מתחלפות באופן קבוע.

רשימה של הדגלים של מדיניות הסיסמאות שנתמכים ב-AlloyDB Omni מופיעה במאמר בנושא דגלים של מדיניות הסיסמאות.

כדי לעמוד בתקני האבטחה ולפעול בהתאם להמלצות של כלי האבטחה, צריך להפעיל את כל שלוש האפשרויות יחד על ידי הגדרת דגלי האכיפה הראשיים שלהן לערך ON:

  • password.enforce_password_does_not_contain_username
  • password.enforce_complexity
  • password.enforce_expiration

אם מגדירים את אחד משלושת ה-flags האלה לערך OFF או משמיטים אותם, כלי המלצות האבטחה מסמן את המופע ככזה שלא מופעלת בו מדיניות סיסמאות.

טעינה מראש של ספריית אימות הסיסמאות

כדי שמדיניות הסיסמאות תיכנס לתוקף ב-AlloyDB Omni, צריך לטעון את הספרייה alloydb_password_validation. כדי לטעון את הספרייה הזו: פועלים לפי השלבים הבאים:

  1. מאתרים את קובץ ההגדרות postgresql.conf של ההתקנה של AlloyDB Omni ופותחים אותו בכלי לעריכת טקסט.

  2. מחפשים את השורה shared_preload_libraries ובודקים אם היא כוללת את alloydb_password_validation. אם לא, צריך להוסיף אותה. בסיום, השורה shared_preload_libraries תיראה בערך כך:

    shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_storage,alloydb_password_validation'
    

אכיפת סיסמאות מורכבות

כדי לאכוף מדיניות בנושא מורכבות סיסמאות:

  1. מוודאים שקובץ postgresql.conf טוען מראש את ספריית אימות הסיסמה.

  2. מגדירים את הדגל password.enforce_complexity לערך ON.

  3. משתמשים בדגלים של מדיניות הסיסמאות כדי להגדיר את מדיניות הסיסמאות.

לדוגמה, כדי לאכוף מדיניות סיסמאות שקובעת שסיסמה חייבת להכיל לפחות אות גדולה אחת, מספר אחד ולהיות באורך של 10 תווים לפחות, צריך להגדיר את הערכים הבאים בקובץ postgresql.conf:

  • password.enforce_complexity = ON
  • password.min_uppercase_letters = 1
  • password.min_numerical_chars = 1
  • password.min_pass_length = 10

אחרי שמגדירים את הדגלים האלה, ניסיון להגדיר סיסמה למשתמש במסד נתונים שלא עומדת בדרישות של מדיניות הסיסמאות הזו ייכשל. לדוגמה, אם המדיניות הזו מוגדרת, הפקודה הבאה של הלקוח psql נכשלת כי הסיסמה foo קצרה מ-10 תווים ולא מכילה מספר או אות רישית.

CREATE USER USERNAME WITH PASSWORD foo;

אכיפת תפוגת תוקף של סיסמאות

כדי לאכוף את מדיניות תפוגת הסיסמאות:

  1. מוודאים שקובץ postgresql.conf טוען מראש את ספריית אימות הסיסמה.

  2. מגדירים את הדגל password.enforce_expiration לערך ON.

  3. מגדירים את הדגל password.expiration_in_days למספר הימים שאחריו הסיסמה תפוג.

  4. מגדירים את הדגל password.notify_expiration_in_days למספר הימים לפני פקיעת התוקף של הסיסמה שבהם המשתמש מתחיל לקבל התראות על פקיעת התוקף של הסיסמה.

לדוגמה, כדי לאכוף מדיניות סיסמאות שקובעת שתוקף הסיסמאות יפוג אחרי 30 ימים ושהמשתמשים יקבלו התראה 15 ימים לפני שתוקף הסיסמה שלהם יפוג, צריך להגדיר את הערכים הבאים בקובץ postgresql.conf:

  • password.enforce_expiration = ON
  • password.expiration_in_days = 30
  • password.notify_expiration_in_days = 15

אם תוקף הסיסמה של משתמש פג, המשתמש לא יכול להתחבר ל-AlloyDB Omni. כדי לאפס את הסיסמה של משתמש:

  1. מתחברים ל-AlloyDB Omni באמצעות psql. לדוגמה, אם התקנתם את AlloyDB Omni באמצעות Docker, מריצים את הפקודה הבאה:

    sh docker exec -it CONTAINER-NAME psql -h localhost -U postgres

  2. בהנחיה postgres=#, מריצים את הפקודה הבאה:

    ALTER USER USERNAME WITH 'NEW-PASSWORD';
    

מידע נוסף על שינוי סיסמה של משתמש זמין במאמר בנושא ALTER ROLE במסמכי התיעוד של PostgreSQL.

אכיפת אימות מבוסס-סיסמה בחשבונות אדמין פנימיים

התכונה 'אכיפת סיסמאות' בחשבונות אדמין מאפשרת לבצע באופן אוטומטי ומרכזי רוטציה ועדכון מאובטחים של סיסמאות קריטיות במערכת, בדרך כלל באמצעות כלי חיצוני כמו Vault. התכונה הזו מאפשרת הקפדה על מדיניות של אפס אמון, על ידי אכיפת אימות מבוסס-סיסמה בחשבונות אדמין קריטיים ש-AlloyDB Omni משתמש בהם כדי לנהל תהליכים פנימיים שונים.

אפשר לאכוף סיסמאות בחשבונות הבאים במסד הנתונים:

  • alloydbadmin: חשבון הסופר-משתמש של בקר Kubernetes‏ (K8s).
  • alloydbmonitor: חשבון לקריאה בלבד לאיסוף מדדים של מסד הנתונים.

כדי להפעיל את האכיפה, צריך להגדיר את המפרט של אשכול מסד הנתונים כך שיפנה לאובייקטים סודיים של Kubernetes שמאחסנים את הסיסמאות של החשבונות האלה. התהליך הזה משפר את האבטחה ומפחית את העומס הידני שנדרש לניהול פרטי הכניסה של חשבונות האדמין הפנימיים של מסד הנתונים.

הפעלת אכיפת סיסמאות

כדי להפעיל אכיפת סיסמאות כשיוצרים אשכול, מבצעים את השלבים הבאים:

  1. צריך לוודא שיש לכם אשכול Kubernetes שמופעל בו אופרטור AlloyDB Omni Kubernetes בגרסה 1.7.0 ואילך.
  2. מוסיפים את המאפיין systemUserPasswordRefs למפרט של DBCluster. במאפיין הזה צריך לציין זוגות של מפתח וערך שמקשרים בין כל שם של חשבון במערכת הפנימית – לדוגמה, alloydbadmin ו-alloydbmonitor – לבין שם האובייקט המתאים של סוד Kubernetes.
  3. לפני שיוצרים את מסד הנתונים, מוודאים שהסוד של Kubernetes שאליו יש הפניה מכיל את סיסמת ה-seed של המשתמש, ושהפורמט של המאפיין תואם למבנה הבא:

    systemUserPasswordRefs: USER_NAME:USER_NAME-PASSWORD-DATABASE_NAME
    

ניהול רוטציה של סיסמאות בצורה מאובטחת

אחרי שמפעילים את האכיפה, אפשר להשתמש בכלי חיצוני כמו Vault כדי לנהל את החלפת הסיסמאות באופן מאובטח.

  1. מעדכנים את הסיסמה של מסד הנתונים. הכלי החיצוני מעדכן את הסיסמה של חשבון המערכת ישירות ב-AlloyDB Omni.
  2. מעדכנים את הסוד של Kubernetes. לאחר מכן, הכלי החיצוני מעדכן את אובייקט הסוד המשויך של Kubernetes עם הסיסמה החדשה.

    • התוכן של אובייקט הסוד חייב להיות זוג של מפתח וערך, כאשר המפתח הוא שם מסד הנתונים והערך הוא הסיסמה החדשה בקידוד Base64.
    • מומלץ להשתמש במוסכמה הבאה לשם הסוד:

      USER_NAME-pw-DATABASE_NAME
      

    האופרטור של AlloyDB Omni מזהה את השינוי בסוד של Kubernetes ומעדכן באופן אוטומטי את מטמון הסיסמאות שמשמש את סוכן מסד הנתונים שפועל בפוד של מסד הנתונים. לאחר מכן, הסוכן משתמש בסיסמה החדשה ששמורה במטמון לכל פעולות מסד הנתונים העתידיות.

השבתת אכיפת הסיסמה למשתמש ספציפי

כדי להשבית את אכיפת הסיסמה בחשבון מערכת ספציפי, צריך להסיר את המשתמש הזה מרשימת systemUserPasswordRefs במפרט DBCluster.

  1. מסירים את המשתמש. במפרט של DBCluster, מוחקים את זוג הערכים של המשתמש שרוצים להחריג מאכיפת הסיסמה. לדוגמה, אם משביתים את השירות עבור alloydbadmin, מסירים את alloydbadmin: alloydbadmin-pw-dbcluster-sample.
  2. מחילים את הגדרות ה-DBCluster ששונו באמצעות kubectl apply.

    אחרי שמחילים את המפרט המעודכן, אכיפת הסיסמה מושבתת עבור המשתמש הזה.

אי אפשר להשתמש בשמות משתמש בסיסמאות

כדי לאכוף את המדיניות שמונעת מסיסמה להכיל שם משתמש:

  1. מוודאים שקובץ postgresql.conf טוען מראש את ספריית אימות הסיסמה.

  2. מגדירים את password.enforce_password_does_not_contain_username לערך ON.

לדוגמה, כדי לוודא שסיסמה לא מכילה שם משתמש כמחרוזת משנה, מגדירים את הערך הבא בקובץ postgresql.conf:

  • password.enforce_password_does_not_contain_username = ON

אם הדגל הזה מוגדר, הפעולה הבאה נכשלת כי הסיסמה alex-secret מכילה את שם המשתמש alex:

CREATE USER alex WITH PASSWORD 'alex-secret';

המאמרים הבאים