התחבר ל-PostgreSQL

הושלם

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

יסודות החיבור

חיבורי PostgreSQL דורשים מספר פרמטרים שמזהים את השרת, מסד הנתונים ופרטי המשתמש. Azure Database for PostgreSQL משתמש בפורמט נקודת קצה ספציפי ואוכף העברה מאובטחת כברירת מחדל.

נקודת הקצה של השרת שלך עוקבת אחרי הדפוס <server-name>.postgres.database.azure.com, כאשר <server-name> הוא השם הייחודי שציינת בעת יצירת השרת. שם הדומיין המוסמך במלואו (FQDN) הופך לכתובת IP ציבורית של השרת בעת שימוש בגישה ציבורית, או לכתובת IP פרטית בעת שימוש באינטגרציה עם VNet.

חיבור PostgreSQL דורש את הפרמטרים המרכזיים הבאים: המארח (שרת FQDN), פורט (5432 לחיבורים ישירים או 6432 ל-PgBouncer), שם מסד נתונים, שם משתמש (לאימות Entra ( username@servername שימוש בפורמט), סיסמה (סטטי או טוקן Entra), ומצב SSL. ספריות וכלים שונים של לקוחות מקבלים פרמטרים אלו בפורמטים שונים, כולל מחרוזות חיבור, זוגות מילות מפתח-ערך, או פרמטרים בודדים.

שיטות אימות

Azure Database for PostgreSQL תומך בשתי גישות אימות: אימות Microsoft Entra מספק אבטחה חזקה יותר באמצעות גישה מבוססת טוקנים, בעוד שאימות מקורי של PostgreSQL משתמש בפרטי משתמש וסיסמאות מסורתיים.

אימות Microsoft Entra משתמש בטוקנים OAuth 2.0 במקום סיסמאות. גישה זו משתלבת עם פלטפורמת הזהויות של Azure ומספקת ניהול זהויות מרכזי, מבטלת אחסון סיסמאות (הטוקנים קצרים מועד), תומכת בזהויות מנוהלות עבור יישומים מאוחסנים על ידי Azure, ויוצרת מסלולי ביקורת ביומני כניסה של Entra. כדי להשתמש באימות Entra, הגדר מנהל Microsoft Entra בשרת שלך (חשבון משתמש, קבוצה או ראש שירות). לאחר ההגדרה, זהויות Entra מתחברות על ידי קבלת טוקן מהמשאב https://ossrdbms-aad.database.windows.net .

תהליך החיבור פועל כך:

  1. האפליקציה שלך מבקשת אסימון גישה מ-Microsoft Entra ID.
  2. Entra מאמת את הזהות ומחזיר טוקן.
  3. האפליקציה שלך מתחברת ל-PostgreSQL באמצעות הטוקן כסיסמה.
  4. PostgreSQL מאמת את הטוקן מול מנהל ה-Entra המוגדר בהגדרה.

בפייתון, אפשר להשתמש בספרייה azure-identity כדי לקבל טוקנים:

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
token = credential.get_token("https://ossrdbms-aad.database.windows.net/.default")
# Use token.token as the password in your connection string

המחלקה DefaultAzureCredential מנסה אוטומטית מספר שיטות אימות לפי הסדר, כולל זהות מנוהלת (כאשר פועלת על Azure), אישורי CLI של Azure (לפיתוח מקומי), ואפשרויות נוספות.

אימות מקורי של PostgreSQL מאחסן שמות משתמש וסיסמאות מוצפנות במסד הנתונים. גישה זו מתאימה כאשר יישומים לא יכולים להשתמש באימות Entra (יישומים ישנים), אתה צריך להעניק גישה לזהויות מחוץ לשוכר Entra שלך, או שאתה רץ בסביבה ללא חיבור Azure במהלך הפיתוח. בעת שימוש באימות PostgreSQL, שמרו סיסמאות ב-Azure Key Vault במקום בהגדרות היישום, סובבו סיסמאות באופן קבוע, השתמשו בסיסמאות חזקות שנוצרו באקראית, והגבלו את ההרשאות של כל משתמש במסד נתונים. שם המשתמש והסיסמה של המנהל שאתה מציין במהלך יצירת השרת משתמשים באימות PostgreSQL.

תצורת TLS/SSL

Azure Database for PostgreSQL מצפין את כל החיבורים באמצעות Transport Layer Security (TLS). השרת דורש TLS כברירת מחדל ותומך ב-TLS 1.2 ו-1.3. חיבורים עם גרסאות TLS ישנות נדחים.

לקוחות PostgreSQL משתמשים בפרמטר כדי sslmode לשלוט בהצפנה ובאימות תעודות. המצבים הזמינים הם:

  • השבתה: אין הצפנה. Azure דוחה חיבורים באמצעות מצב זה.
  • אפשר: מצפין אם השרת דורש זאת, אבל לא מאמת תעודות.
  • מעדיפים: מצפין אם השרת תומך בכך, אבל לא מאשר תעודות.
  • נדרש: אוכף הצפנה אבל לא מאמת תעודות.
  • Verify-CA: אוכף הצפנה ומאמת את תעודת השרת מול רשויות אישור מהימנות.
  • verify-full: אוכף הצפנה, מאמת את ה-CA, ומאשר ששם המארח של התעודה תואם לשרת.

ליישומי ייצור, השתמש verify-full כדי לוודא שאתה מתחבר לשרת Azure PostgreSQL האמיתי. מצב זה מאשר שהשרת מציג תעודה חתומה על ידי רשות תעודה אמינה, ושהשם הנפוץ או שם הנושא החלופי של התעודה תואמים לשם המארח של השרת.

מצבי verify-ca ה-and verify-full דורשים מהלקוח שלך גישה לתעודות ה-CA השורש שחתמו על תעודת השרת. רוב מערכות ההפעלה וסביבות האחסון של Azure כבר כוללות את DigiCert ו-Microsoft root CAs ש-Azure Database for PostgreSQL משתמש בהם. אם אימות התעודה נכשל, ייתכן שתצטרך להוריד את תעודות השורש ממאגר ה-PKI של מיקרוסופט ולהגדיר את הלקוח שלך להשתמש בהן.

איגוד חיבורים עם PgBouncer

Azure Database for PostgreSQL כולל PgBouncer מובנה, שניתן להפעיל דרך הגדרות השרת בפורטל Azure או באמצעות Azure CLI. ברגע שהפעלה, התחבר ליציאה 6432 במקום 5432.

חשוב

PgBouncer זמין רק בשכבות חישוב כלליות ו-Memory Optimized. אם השרת שלך משתמש בשכבת Burtable, אי אפשר להפעיל PgBouncer מובנה.

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

כדי להפעיל את PgBouncer באמצעות ה-CLI של Azure:

az postgres flexible-server parameter set \
    --resource-group myResourceGroup \
    --server-name myserver \
    --name pgbouncer.enabled \
    --value true

לאחר ההפעלה, עדכן את מחרוזת החיבור שלך לשימוש ביציאה 6432:

postgresql://user@myserver.postgres.database.azure.com:6432/mydb?sslmode=require

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

שיקולי גישה לרשת

Azure Database for PostgreSQL תומך בשני מודלים של רשת: גישה ציבורית עם כללי חומת אש, וגישה פרטית עם אינטגרציה של VNet. הפלטפורמה או צוות התפעול שלך בדרך כלל מגדירים את ההגדרות האלה, אבל הבנתן עוזרת לך לאבחן בעיות חיבור.

בגישה ציבורית, לשרת יש כתובת IP ציבורית וכללי חומת אש שולטות באילו כתובות IP של לקוחות יכולים להתחבר. אם אינך מצליח להתחבר מהמחשב שלך, ודא שכתובת ה-IP שלך מותרת בחוקי חומת האש.

בגישה פרטית, לשרת יש כתובת IP פרטית בלבד בתוך Azure Virtual Network. אפשר להתחבר רק ממשאבים בתוך אותו VNet, רשתות מקובלות או דרך VPN/ExpressRoute. גישה פרטית נפוצה בסביבות ייצור שבהן נדרש בידוד רשת.

דוגמאות למחרוזת חיבור

הדוגמאות הבאות מציגות דפוסי מחרוזות חיבור נפוצות עבור Azure Database עבור PostgreSQL.

# Basic connection with SSL required
postgresql://myuser:mypassword@myserver.postgres.database.azure.com/mydb?sslmode=require

# Connection with certificate verification
postgresql://myuser:mypassword@myserver.postgres.database.azure.com/mydb?sslmode=verify-full&sslrootcert=/etc/ssl/certs/ca-certificates.crt

# Connection through PgBouncer (note port 6432)
postgresql://myuser:mypassword@myserver.postgres.database.azure.com:6432/mydb?sslmode=require

משאבים נוספים