בדף הזה מוסבר איך להתחבר למכונה של Cloud SQL באמצעות Cloud SQL Auth Proxy.
מידע נוסף על האופן שבו Cloud SQL Auth Proxy פועל זמין במאמר מידע על Cloud SQL Auth Proxy.
סקירה כללית
השיטה המומלצת להתחברות למכונת Cloud SQL היא באמצעות Cloud SQL Auth Proxy. Cloud SQL Auth Proxy:
- פועל עם נקודות קצה של כתובות IP ציבוריות ופרטיות
- מאמת את החיבורים באמצעות פרטי כניסה של משתמש או של חשבון שירות
- עוטף את החיבור בשכבת הצפנה של SSL/TLS שמאושרת למכונה שלכם ב-Cloud SQL.
Cloud de Confiance by S3NS חלק מהשירותים והאפליקציות משתמשים ב-Cloud SQL Auth Proxy כדי לספק חיבורים לנתיבי IP ציבוריים עם הצפנה והרשאה, כולל:
אפליקציות שפועלות ב- Google Kubernetes Engine יכולות להתחבר באמצעות Cloud SQL Auth Proxy.
במדריך למתחילים בנושא שימוש ב-Cloud SQL Auth Proxy מוסבר איך להשתמש בו.
אפשר גם להתחבר באמצעות לקוח mysql ממחשב מקומי או מ-Compute Engine, עם או בלי Cloud SQL Auth Proxy.
לפני שמתחילים
לפני שמתחברים למכונה של Cloud SQL, צריך לבצע את הפעולות הבאות:
-
- למשתמש או לחשבון שירות, צריך לוודא שלחשבון יש את התפקיד Cloud SQL Client. התפקיד הזה מכיל את ההרשאה
cloudsql.instances.connect, שמאפשרת לחשבון משתמש להתחבר לכל המכונות של Cloud SQL בפרויקט. - אפשר לכלול תנאי IAM בקשירת מדיניות IAM שמעניקה לחשבון הרשאה להתחבר רק למופע ספציפי אחד של Cloud SQL.
- למשתמש או לחשבון שירות, צריך לוודא שלחשבון יש את התפקיד Cloud SQL Client. התפקיד הזה מכיל את ההרשאה
מפעילים את Cloud SQL Admin API, אם הוא עדיין לא מופעל.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים- מתקינים ומפעילים את ה-CLI של gcloud.
- זה שינוי אופציונלי. מתקינים את לקוח Docker של Cloud SQL Auth Proxy.
הורדת Cloud SQL Auth Proxy
לפני שמתחילים, צריך לקבוע את הארכיטקטורה של המכונה.
אם אתם משתמשים ב-Linux או ב-Mac, אתם יכולים להריץ את הפקודה הבאה כדי למצוא את הכתובת:
uname -a
Linux 64 סיביות
- מורידים את Cloud SQL Auth Proxy:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.linux.amd64
- הופכים את Cloud SQL Auth Proxy לקובץ הפעלה:
chmod +x cloud-sql-proxy
Linux 32 סיביות
- מורידים את Cloud SQL Auth Proxy:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.linux.386
- אם הפקודה
curlלא נמצאה, מריצים את הפקודהsudo apt install curlוחוזרים על פקודת ההורדה. - הופכים את Cloud SQL Auth Proxy לקובץ הפעלה:
chmod +x cloud-sql-proxy
macOS 64 סיביות
- מורידים את Cloud SQL Auth Proxy:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.darwin.amd64
- הופכים את Cloud SQL Auth Proxy לקובץ הפעלה:
chmod +x cloud-sql-proxy
Mac M1
- מורידים את Cloud SQL Auth Proxy:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.darwin.arm64
- הופכים את Cloud SQL Auth Proxy לקובץ הפעלה:
chmod +x cloud-sql-proxy
Windows 64 סיביות
לוחצים לחיצה ימנית על https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.x64.exe ובוחרים באפשרות שמירת קישור בשם כדי להוריד את Cloud SQL Auth Proxy. משנים את שם הקובץ ל-cloud-sql-proxy.exe.
Windows 32 סיביות
לוחצים לחיצה ימנית על https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.x86.exe ובוחרים באפשרות Save Link As כדי להוריד את Cloud SQL Auth Proxy. משנים את שם הקובץ ל-cloud-sql-proxy.exe.
קובץ אימג' של Docker ל-Cloud SQL Auth Proxy
ל-Cloud SQL Auth Proxy יש קובצי אימג' של קונטיינר שונים, כמו distroless, alpine ו-buster. קובץ האימג' של הקונטיינר שמשמש כברירת מחדל ל-Cloud SQL Auth Proxy משתמש ב-distroless, שלא מכיל מעטפת. אם אתם צריכים מעטפת או כלים קשורים, הורידו קובץ אימג' שמבוסס על alpine או על buster.
מידע נוסף מופיע במאמר קובצי אימג' של קונטיינרים של Cloud SQL Auth Proxy.
אפשר למשוך את התמונה העדכנית ביותר למחשב המקומי באמצעות Docker באמצעות הפקודה הבאה:
docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.26.2
מערכת הפעלה אחרת
במערכות הפעלה אחרות שלא נכללות כאן, אפשר לקמפל את Cloud SQL Auth Proxy ממקור.הפעלת Cloud SQL Auth Proxy
בהתאם לשפה ולסביבה שלכם, אתם יכולים להפעיל את Cloud SQL Auth Proxy באמצעות שקעי TCP, שקעי Unix או קובץ אימג' של Docker של Cloud SQL Auth Proxy. הקובץ הבינארי של Cloud SQL Auth Proxy מתחבר למכונה אחת או יותר של Cloud SQL שצוינו בשורת הפקודה, ופותח חיבור מקומי כ-TCP או כשקע Unix. אפליקציות ושירותים אחרים, כמו קוד האפליקציה או כלי לקוח לניהול מסדי נתונים, יכולים להתחבר למכונות של Cloud SQL דרך חיבורי ה-TCP או שקעי Unix.
שקעי TCP
בחיבורי TCP, כברירת מחדל שרת ה-Proxy של Cloud SQL Auth מאזין ל-localhost(127.0.0.1).
לכן, כשמציינים --port PORT_NUMBER למכונה, החיבור המקומי הוא בכתובת 127.0.0.1:PORT_NUMBER.
לחלופין, אפשר לציין כתובת אחרת לחיבור המקומי.
לדוגמה, כך מגדירים את Cloud SQL Auth Proxy להאזין בכתובת 0.0.0.0:1234 לחיבור המקומי:
./cloud-sql-proxy --address 0.0.0.0 --port 1234 INSTANCE_CONNECTION_NAME
מעתיקים את INSTANCE_CONNECTION_NAME. אפשר למצוא את כתובת ה-IP בדף Overview של המופע במסוףCloud de Confiance או על ידי הפעלת הפקודה הבאה:
gcloud sql instances describe INSTANCE_NAME --format='value(connectionName)'
לדוגמה: myproject:myregion:myinstance.
- אם למכונה מוגדרות גם כתובת IP ציבורית וגם כתובת IP פרטית, ואתם רוצים ש-Cloud SQL Auth Proxy ישתמש בכתובת ה-IP הפרטית, אתם צריכים לספק את האפשרות הבאה כשאתם מפעילים את Cloud SQL Auth Proxy:
--private-ip
- אם אתם משתמשים בחשבון שירות כדי לאמת את Cloud SQL Auth Proxy, שימו לב למיקום במכונת הלקוח של קובץ המפתח הפרטי שנוצר כשיצרתם את חשבון השירות.
- מפעילים את Cloud SQL Auth Proxy.
מחרוזות אפשריות להפעלת Cloud SQL Auth Proxy:
- שימוש באימות של Cloud SDK:
היציאה שצוינה לא יכולה להיות בשימוש, למשל על ידי שרת מסד נתונים מקומי../cloud-sql-proxy --port 3306 INSTANCE_CONNECTION_NAME
- שימוש בחשבון שירות וציון מפורש של שם החיבור למכונה (מומלץ לסביבות ייצור):
./cloud-sql-proxy \ --credentials-file PATH_TO_KEY_FILE INSTANCE_CONNECTION_NAME &
למידע נוסף על האפשרויות של Cloud SQL Auth Proxy, ראו אפשרויות לאימות של Cloud SQL Auth Proxy.
- שימוש באימות של Cloud SDK:
שקעי Unix
שרת proxy ל-Cloud SQL Auth יכול להאזין לשקע Unix, שהוא מנגנון תקני של Posix לשימוש בתיקייה כדי לנהל תקשורת בין שני תהליכים שפועלים באותו מארח. היתרונות של שימוש בשקעי Unix הם אבטחה משופרת וזמן אחזור קצר יותר, אבל אי אפשר לגשת לשקע Unix ממכונה חיצונית.
כדי ליצור שקע Unix ולהשתמש בו, ספריית היעד צריכה להיות קיימת, וגם ל-Cloud SQL Auth Proxy וגם לאפליקציה צריכה להיות גישת קריאה וכתיבה אליה.
מעתיקים את INSTANCE_CONNECTION_NAME. אפשר למצוא את המידע הזה בדף Overview של המכונה במסוףCloud de Confiance , או באמצעות הרצת הפקודה הבאה:
gcloud sql instances describe INSTANCE_NAME --format='value(connectionName)'
לדוגמה: myproject:myregion:myinstance.
- יוצרים את הספרייה שבה יאוחסנו שקעי Cloud SQL Auth Proxy:
sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
- אם אתם משתמשים בחשבון שירות כדי לאמת את Cloud SQL Auth Proxy, שימו לב למיקום במכונת הלקוח של קובץ המפתח הפרטי שנוצר כשיצרתם את חשבון השירות.
- פותחים חלון טרמינל חדש ב-Cloud Shell ומפעילים את Cloud SQL Auth Proxy.
כמה מחרוזות אפשריות להפעלה של Cloud SQL Auth Proxy:
- שימוש באימות של Google Cloud SDK:
./cloud-sql-proxy --unix-socket /cloudsql INSTANCE_CONNECTION_NAME &
- שימוש בחשבון שירות:
./cloud-sql-proxy --unix-socket /cloudsql --credentials-file PATH_TO_KEY_FILE INSTANCE_CONNECTION_NAME &
מפעילים את Cloud SQL Auth Proxy בטרמינל משלו ב-Cloud Shell, כדי שתוכלו לעקוב אחרי הפלט שלו בלי שהוא יתערבב עם פלט מתוכנות אחרות.
למידע נוסף על האפשרויות של Cloud SQL Auth Proxy, ראו אפשרויות לאימות של Cloud SQL Auth Proxy.
- שימוש באימות של Google Cloud SDK:
Docker
כדי להריץ את Cloud SQL Auth Proxy בקונטיינר של Docker, משתמשים בקובץ האימג' של Cloud SQL Auth Proxy ל-Docker שזמין ב-Google Container Registry.
אפשר להפעיל את Cloud SQL Auth Proxy באמצעות שקעי TCP או שקעי Unix, עם הפקודות שמוצגות בהמשך. האפשרויות משתמשות ב-INSTANCE_CONNECTION_NAME כמחרוזת החיבור כדי לזהות מכונה של Cloud SQL. אפשר למצוא את INSTANCE_CONNECTION_NAME בדף Overview של המופע במסוףCloud de Confiance או באמצעות הפעלת הפקודה הבאה:
gcloud sql instances describe INSTANCE_NAME
לדוגמה: myproject:myregion:myinstance.
בהתאם לשפה ולסביבה שלכם, אתם יכולים להפעיל את Cloud SQL Auth Proxy באמצעות שקעי TCP או שקעי Unix. אין תמיכה בשקעי Unix באפליקציות שכתובות בשפת התכנות Java או בסביבת Windows.
שימוש בשקעי TCP
docker run -d \ -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \ -p 127.0.0.1:3306:3306 \ gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.26.2 \ --address 0.0.0.0 --port 3306 \ --credentials-file /path/to/service-account-key.json INSTANCE_CONNECTION_NAME
אם אתם משתמשים בפרטי הכניסה שסופקו על ידי המכונה של Compute Engine, אל תכללו את הפרמטר --credentials-file ואת השורה -v PATH_TO_KEY_FILE:/path/to/service-account-key.json.
תמיד צריך לציין את הקידומת 127.0.0.1 ב--p כדי ש-Cloud SQL Auth Proxy לא ייחשף מחוץ למארח המקומי. הדגל --address 0.0.0.0 נדרש כדי שהיציאה תהיה נגישה מחוץ לקונטיינר של Docker.
שימוש בשקעי Unix
docker run -d -v /cloudsql:/cloudsql \ -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \ gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.26.2 \ --unix-socket /cloudsql \ --credentials-file /path/to/service-account-key.json INSTANCE_CONNECTION_NAME
אם אתם משתמשים בפרטי הכניסה שסופקו על ידי המכונה של Compute Engine, אל תכללו את הפרמטר --credentials-file ואת השורה -v PATH_TO_KEY_FILE:/path/to/service-account-key.json.
אם משתמשים בתמונה שעברה אופטימיזציה לקונטיינר, צריך להשתמש בספרייה שניתן לכתוב בה במקום /cloudsql, לדוגמה:
-v /mnt/stateful_partition/cloudsql:/cloudsqlאפשר לציין יותר ממופע אחד, ולהפריד ביניהם באמצעות רווחים. אפשר גם להשתמש במטא-נתונים של Compute Engine כדי לקבוע באופן דינמי את המכונות להתחבר אליהן. מידע נוסף על הפרמטרים של Cloud SQL Auth Proxy
התחברות באמצעות לקוח MySQL
- מורידים את MySQL Community Server לפלטפורמה שלכם מדף ההורדה של MySQL Community Server.
Community Server כולל את לקוח MySQL. - מתקינים את Community Server לפי ההוראות בדף ההורדה.
מידע נוסף על התקנת MySQL זמין במאמר Installing and Upgrading MySQL.
מחרוזת החיבור שבה משתמשים תלויה בשאלה אם הפעלתם את Cloud SQL Auth Proxy באמצעות שקע TCP, שקע UNIX או Docker.
שקעי TCP
- מפעילים את לקוח mysql:
אם מתחברים למכונה של MySQL 8.4, משתמשים בפקודה הבאה:mysql -u USERNAME -p --host 127.0.0.1
mysql -u USERNAME -p --host 127.0.0.1 --get-server-public-key
כשמתחברים באמצעות שקעי TCP, הגישה ל-Cloud SQL Auth Proxy מתבצעת דרך
127.0.0.1. - אם מתבקשים, מזינים את הסיסמה.
- תוצג ההנחיה של mysql.
שימוש בשקעי Unix
- מפעילים את לקוח mysql:
mysql -u USERNAME -p -S /cloudsql/INSTANCE_CONNECTION_NAME --get-server-public-key
- מזינים את הסיסמה.
- מופיעה ההנחיה של mysql.
דרושה לך עזרה? לקבלת עזרה בפתרון בעיות ב-Cloud SQL Auth Proxy, אפשר לעיין במאמר פתרון בעיות בחיבורים של Cloud SQL Auth Proxy או בדף התמיכה ב-Cloud SQL.
קישור לאפליקציה
אפשר להתחבר ל-Cloud SQL Auth Proxy מכל שפה שמאפשרת להתחבר לשקע Unix או TCP. בהמשך מוצגים כמה קטעי קוד מדוגמאות פתורות ב-GitHub, כדי להבין איך הם פועלים ביחד באפליקציה.
נושאים נוספים
ארגומנטים של שורת הפקודה ב-Cloud SQL Auth Proxy
הדוגמאות שלמעלה מכסות את התרחישים הנפוצים ביותר, אבל ל-Cloud SQL Auth Proxy יש גם אפשרויות הגדרה אחרות שאפשר להגדיר באמצעות ארגומנטים של שורת הפקודה. כדי לקבל עזרה בנושא ארגומנטים בשורת הפקודה, משתמשים בדגל --help כדי לראות את התיעוד העדכני:
./cloud-sql-proxy --helpדוגמאות נוספות לשימוש באפשרויות של שורת הפקודה של Cloud SQL Auth Proxy זמינות בקובץ README במאגר GitHub של Cloud SQL Auth Proxy.
אפשרויות לאימות של Cloud SQL Auth Proxy
בכל האפשרויות האלה נעשה שימוש ב-INSTANCE_CONNECTION_NAME כמחרוזת החיבור כדי לזהות מכונת Cloud SQL. אפשר למצוא את INSTANCE_CONNECTION_NAME בדף Overview של המכונה במסוףCloud de Confiance , או על ידי הרצת הפקודה הבאה:
gcloud sql instances describe --project PROJECT_ID INSTANCE_CONNECTION_NAME.
לדוגמה: gcloud sql instances describe --project myproject myinstance .
חלק מהאפשרויות האלה משתמשות בקובץ פרטי כניסה בפורמט JSON שכולל את המפתח הפרטי של RSA לחשבון. הוראות ליצירת קובץ JSON של פרטי כניסה לחשבון שירות זמינות במאמר יצירת חשבון שירות.
שרת ה-proxy ל-Cloud SQL Auth מספק כמה חלופות לאימות, בהתאם לסביבה שלכם. Cloud SQL Auth Proxy בודק כל אחד מהפריטים הבאים, לפי הסדר הבא, ומשתמש בפריט הראשון שהוא מוצא כדי לנסות לבצע אימות:
פרטי כניסה שסופקו על ידי הדגל credentials-file.
משתמשים בחשבון שירות כדי ליצור ולהוריד את קובץ ה-JSON המשויך, ומגדירים את הדגל--credentials-fileלנתיב של הקובץ כשמפעילים את Cloud SQL Auth Proxy. לחשבון השירות צריכות להיות ההרשאות הנדרשות למכונה של Cloud SQL.כדי להשתמש באפשרות הזו בשורת הפקודה, מפעילים את הפקודה
cloud-sql-proxyכשהדגל--credentials-fileמוגדר לנתיב ולשם הקובץ של קובץ JSON שמכיל את פרטי הכניסה. הנתיב יכול להיות מוחלט או יחסי לספריית העבודה הנוכחית. לדוגמה:./cloud-sql-proxy --credentials-file PATH_TO_KEY_FILE \ INSTANCE_CONNECTION_NAME
הוראות מפורטות להוספת תפקידי IAM לחשבון שירות זמינות במאמר הענקת תפקידים לחשבונות שירות.
מידע נוסף על התפקידים שנתמכים ב-Cloud SQL זמין במאמר תפקידי IAM ב-Cloud SQL.
פרטי הכניסה שסופקו על ידי אסימון גישה.
יוצרים אסימון גישה ומפעילים את הפקודהcloud-sql-proxyעם האפשרות--tokenשמוגדרת לאסימון גישה מסוג OAuth 2.0. לדוגמה:./cloud-sql-proxy --token ACCESS_TOKEN \ INSTANCE_CONNECTION_NAME
פרטי כניסה שסופקו על ידי משתנה סביבה.
האפשרות הזו דומה לשימוש בדגל--credentials-file, אבל במקום להשתמש בארגומנט שורת הפקודה--credentials-file, מציינים את קובץ פרטי הכניסה בפורמט JSON שהגדרתם במשתנה הסביבהGOOGLE_APPLICATION_CREDENTIALS.פרטי כניסה מלקוח מאומת של ה-CLI של gcloud.
אם התקנתם את ה-CLI של gcloud ואתם מאומתים באמצעות החשבון האישי שלכם, Cloud SQL Auth Proxy יכול להשתמש באותם פרטי כניסה לחשבון. השיטה הזו שימושית במיוחד להקמה ולהפעלה של סביבת פיתוח.
כדי לאפשר ל-Cloud SQL Auth Proxy להשתמש בפרטי הכניסה של ה-CLI של gcloud, צריך להשתמש בפקודה הבאה כדי לאמת את ה-CLI של gcloud:
gcloud auth application-default login
פרטי הכניסה שמשויכים למכונה של Compute Engine.
אם מתחברים ל-Cloud SQL ממכונת Compute Engine, שרת ה-Cloud SQL Auth Proxy יכול להשתמש בחשבון השירות שמשויך למכונת Compute Engine. אם לחשבון השירות יש את ההרשאות הנדרשות למכונה של Cloud SQL, האימות של Cloud SQL Auth Proxy יתבצע בהצלחה.אם המכונה ב-Compute Engine נמצאת באותו פרויקט כמו המכונה ב-Cloud SQL, לחשבון השירות שמוגדר כברירת מחדל למכונה ב-Compute Engine יש את ההרשאות הנדרשות לאימות Cloud SQL Auth Proxy. אם שני המקרים נמצאים בפרויקטים שונים, צריך להוסיף את חשבון השירות של מכונת Compute Engine לפרויקט שמכיל את מכונת Cloud SQL.
חשבון השירות שמוגדר כברירת מחדל בסביבה
אם Cloud SQL Auth Proxy לא מוצא פרטי כניסה באף אחד מהמקומות שצוינו קודם, הוא פועל לפי הלוגיקה שמתועדת במאמר הגדרת אימות לאפליקציות בסביבת ייצור של שרת לשרת. בסביבות מסוימות (כמו Compute Engine, App Engine ואחרות) יש חשבון שירות שמוגדר כברירת מחדל, שבו האפליקציה יכולה להשתמש כדי לבצע אימות. אם משתמשים בחשבון שירות שמוגדר כברירת מחדל, צריך לוודא שיש לו את ההרשאות שמפורטות במאמר בנושא תפקידים והרשאות. למידע נוסף על הגישה של Google Cloud לאימות, אפשר לעיין במאמר סקירה כללית על אימות.
יצירה של חשבון שירות
- נכנסים לדף Service accounts במסוף Cloud de Confiance .
- בוחרים את הפרויקט שמכיל את המכונה של Cloud SQL.
- לוחצים על Create service account.
- בשדה Service account name, מזינים שם תיאורי לחשבון השירות.
- משנים את מזהה חשבון השירות לערך ייחודי וקל לזיהוי, ואז לוחצים על יצירה והמשך.
-
לוחצים על השדה בחירת תפקיד ובוחרים אחד מהתפקידים הבאים:
- Cloud SQL > Cloud SQL Client
- Cloud SQL > Cloud SQL Editor
- Cloud SQL > Cloud SQL Admin
- לוחצים על Done כדי לסיים ליצור את חשבון השירות.
- לוחצים על תפריט הפעולות של חשבון השירות החדש ובוחרים באפשרות ניהול מפתחות.
- לוחצים על התפריט הנפתח Add key ואז על Create new key.
-
מוודאים שסוג המפתח הוא JSON ולוחצים על Create.
קובץ המפתח הפרטי יורד למחשב שלכם. אפשר להעביר אותו למיקום אחר. שומרים על אבטחת קובץ המַפְתח.
שימוש ב-Cloud SQL Auth Proxy עם כתובת IP פרטית
כדי להתחבר למכונה של Cloud SQL באמצעות כתובת IP פרטית, ה-Cloud SQL Auth Proxy צריך להיות במשאב עם גישה לאותה רשת VPC כמו המכונה.
ה-Cloud SQL Auth Proxy משתמש ב-IP כדי ליצור חיבור למכונה שלכם ב-Cloud SQL. כברירת מחדל, Cloud SQL Auth Proxy מנסה להתחבר באמצעות כתובת IPv4 ציבורית.
אם למכונת Cloud SQL יש רק כתובת IP פרטית, או אם למכונה יש כתובת IP ציבורית וגם כתובת IP פרטית, ואתם רוצים ש-Cloud SQL Auth Proxy ישתמש בכתובת ה-IP הפרטית, אתם צריכים לספק את האפשרות הבאה כשאתם מפעילים את Cloud SQL Auth Proxy:
--private-ip
שימוש ב-Cloud SQL Auth Proxy כדי להתחבר לנקודת קצה לכתיבה
אתם יכולים להשתמש ב-Cloud SQL Auth Proxy כדי להתחבר למכונה ראשית של Cloud SQL שמוגדרת עם נקודת קצה לכתיבה. נקודת קצה לכתיבה היא שם דומיין גלובלי של שירות שמות דומיינים (DNS) שאפשר להשתמש בו לחיבורים במקום כתובת IP, לצורך תוכנית התאוששות מאסון (DR) מתקדמת, כמו ביצוע פעולת יתירות כשל או מעבר בין רפליקות. אם מתרחשת פעולת מעבר לגיבוי בעת כשל או פעולת החלפה של רפליקה במכונה הראשית, שרת ה-Proxy לאימות ב-Cloud SQL מזהה באופן אוטומטי שינויים ברשומת ה-DNS.
במאמר איך מחברים לקוחות של מסדי נתונים למכונות באמצעות Cloud SQL Auth Proxy או מחברי שפה של Cloud SQL מוסבר איך משתמשים ב-Cloud SQL Auth Proxy כדי להתחבר לנקודת קצה לכתיבה.
שימוש ב-Cloud SQL Auth Proxy עם מכונות שמופעל בהן Private Service Connect
אפשר להשתמש ב-Cloud SQL Auth Proxy כדי להתחבר למכונה של Cloud SQL עם Private Service Connect מופעל.
Cloud SQL Auth Proxy הוא מחבר שמספק גישה מאובטחת למכונה הזו בלי צורך ברשתות מורשות או בהגדרת SSL.
כדי לאפשר חיבורי לקוח של Cloud SQL Auth Proxy, צריך להגדיר רשומת DNS שתואמת לשם ה-DNS המומלץ שמופיע עבור המכונה. רשומת ה-DNS היא מיפוי בין משאב DNS לבין שם דומיין.
מידע נוסף על השימוש ב-Cloud SQL Auth Proxy כדי להתחבר למכונות שמופעל בהן Private Service Connect זמין במאמר התחברות באמצעות Cloud SQL Auth Proxy.
הגדרות נדרשות לשימוש ב-Cloud SQL Auth Proxy עם MySQL 8.4 ואילך
כשמתחברים ל-MySQL 8.4 ואילך באמצעות Cloud SQL Auth Proxy, צריך להגדיר את הלקוח של מסד הנתונים של האפליקציה כך שישתמש בהגדרת התצורה allowPublicKeyRetrieval=true של MySQL.
לדוגמה, אם אתם משתמשים בלקוח mysql, השתמשו בדגל --get-server-public-key:
mysql -u username -p --get-server-public-key
אם אתם משתמשים בשפת התכנות Java, צריך להגדיר את הפרטים הבאים:
config.setJdbcUrl("jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName);
config.addDataSourceProperty("allowPublicKeyRetrieval", "true");
יצירת חשבון משתמש במסד הנתונים בשביל Cloud SQL Auth Proxy
כשמתחברים למכונה באמצעות Cloud SQL Auth Proxy, צריך לספק חשבון משתמש כדי להתחבר למכונה. לצורך כך, אתם יכולים להשתמש בכל חשבון משתמש של מסד נתונים. עם זאת, מכיוון ש-Cloud SQL Auth Proxy תמיד מתחבר משם מארח שאפשר לגשת אליו רק דרך Cloud SQL Auth Proxy, אפשר ליצור חשבון משתמש שאפשר להשתמש בו רק דרך Cloud SQL Auth Proxy. היתרון של השיטה הזו הוא שאפשר לציין את החשבון הזה בלי סיסמה, בלי לפגוע באבטחה של המכונה או של הנתונים.
כדי ליצור חשבון משתמש שאפשר להשתמש בו רק עם Cloud SQL Auth Proxy, צריך לציין את שם המארח בתור 'cloudsqlproxy~[IP_ADDRESS]'. אפשר גם להשתמש בתו הכללי לכתובת IP, שיוביל ל-'cloudsqlproxy~%'. השם המלא של חשבון המשתמש יהיה:
'[USER_NAME]'@'cloudsqlproxy~%'
או
'[USER_NAME]'@'cloudsqlproxy~[IP_ADDRESS]'
למידע נוסף על יצירת משתמש, תוכלו לקרוא את המאמר יצירה וניהול של משתמשים. מידע על האופן שבו Cloud SQL פועל עם חשבונות משתמשים מופיע במאמר משתמשים.
הפעלת שרת proxy ל-Cloud SQL Auth בתהליך נפרד
כדי לא לערבב את הפלט של מסוף Cloud SQL Auth Proxy עם פלט מתוכנות אחרות, כדאי להריץ אותו בתהליך נפרד של מסוף Cloud Shell. כדי להפעיל את Cloud SQL Auth Proxy בתהליך נפרד, משתמשים בתחביר שמוצג בהמשך.
Linux
ב-Linux או ב-macOS, משתמשים ב-& בסוף שורת הפקודה כדי להפעיל את Cloud SQL Auth Proxy בתהליך נפרד:
./cloud-sql-proxy INSTANCE_CONNECTION_NAME
--credentials-file PATH_TO_KEY_FILE &
Windows
ב-Windows PowerShell, משתמשים בפקודה Start-Process כדי להפעיל את Cloud SQL Auth Proxy בתהליך נפרד:
Start-Process --filepath "cloud-sql-proxy.exe"
--ArgumentList "
--credentials-file PATH_TO_KEY_FILEINSTANCE_CONNECTION_NAME"
הפעלת Cloud SQL Auth Proxy בקונטיינר של Docker
כדי להריץ את Cloud SQL Auth Proxy במאגר Docker, משתמשים בקובץ האימג' של Cloud SQL Auth Proxy Docker שזמין ב-Google Container Registry. כדי להתקין את קובץ האימג' של Cloud SQL Auth Proxy ב-Docker, משתמשים בפקודה הבאה:
docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.26.2
שקעי TCP
docker run -d \ -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \ -p 127.0.0.1:3306:3306 \ gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.26.2 \ --address 0.0.0.0 --port 3306 \ --credentials-file /path/to/service-account-key.json \ INSTANCE_CONNECTION_NAME
תמיד צריך לציין את הקידומת 127.0.0.1 ב--p כדי ש-Cloud SQL Auth Proxy לא ייחשף מחוץ למארח המקומי. כדי שהיציאה תהיה נגישה מחוץ למאגר Docker, צריך להשתמש בדגל --address 0.0.0.0.
שקעי Unix
docker run -d \ -v /cloudsql:/cloudsql \ -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \ gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.26.2 \ --unix-socket /cloudsql \ --credentials-file /path/to/service-account-key.json \ INSTANCE_CONNECTION_NAME
אם משתמשים בתמונה שעברה אופטימיזציה לקונטיינר, צריך להשתמש בספרייה שניתן לכתוב בה במקום /cloudsql, לדוגמה:
-v /mnt/stateful_partition/cloudsql:/cloudsqlאם אתם משתמשים בפרטי הכניסה שסופקו על ידי המכונה של Compute Engine, אל תכללו את הפרמטר --credentials-file ואת השורה -v PATH_TO_KEY_FILE:/path/to/service-account-key.json.
הפעלת Cloud SQL Auth Proxy כשירות
אפשר להריץ את Cloud SQL Auth Proxy כשירות שפועל ברקע לעומסי עבודה של פיתוח מקומי וייצור. במהלך פיתוח, כשצריך לגשת למכונת Cloud SQL, אפשר להפעיל את השירות ברקע ולהפסיק אותו כשמסיימים.
בעומסי עבודה בסביבת ייצור, ל-Cloud SQL Auth Proxy אין כרגע תמיכה מובנית להפעלה כשירות של Windows, אבל אפשר להשתמש במנהלי שירות של צד שלישי כדי להפעיל אותו כשירות. לדוגמה, אפשר להשתמש ב-NSSM כדי להגדיר את Cloud SQL Auth Proxy כשירות Windows, ו-NSSM מנטר את Cloud SQL Auth Proxy ומפעיל אותו מחדש באופן אוטומטי אם הוא מפסיק להגיב. מידע נוסף מופיע במאמרי העזרה בנושא NSSM.
אכיפת השימוש ב-Cloud SQL Auth Proxy
מפעילים את השימוש ב-Cloud SQL Auth Proxy ב-Cloud SQL באמצעות ConnectorEnforcement.
אם אתם משתמשים במופע עם Private Service Connect, יש מגבלה. אם במכונה מופעלת אכיפת מחבר, אי אפשר ליצור רפליקות לקריאה בלבד של המכונה. באופן דומה, אם למכונה יש רפליקות לקריאה, אי אפשר להפעיל אכיפת מחברים במכונה.
gcloud
הפקודה הבאה אוכפת את השימוש ב-Cloud SQL Connectors.
gcloud sql instances patch INSTANCE_NAME \ --connector-enforcement REQUIRED
כדי להשבית את האכיפה, משתמשים בשורת הקוד הבאה:
--connector-enforcement NOT_REQUIRED
העדכון לא מפעיל הפעלה מחדש.
REST v1
הפקודה הבאה אוכפת את השימוש ב-Cloud SQL Connectors
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- project-id: מזהה הפרויקט.
- instance-id: מזהה המכונה.
ה-method של ה-HTTP וכתובת ה-URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
תוכן בקשת JSON:
{
"settings": {
"connectorEnforcement": "REQUIRED"
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-16T02:32:12.281Z",
"operationType": "UPDATE",
"name": "operation-id",
"targetId": "instance-id",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
"targetProject": "project-id"
}
כדי להשבית את האכיפה, משתמשים במדיניות "connectorEnforcement": "NOT_REQUIRED" במקום זאת. העדכון לא מפעיל מחדש את המכשיר.
REST v1beta4
הפקודה הבאה אוכפת את השימוש ב-Cloud SQL Connectors.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- project-id: מזהה הפרויקט.
- instance-id: מזהה המכונה.
ה-method של ה-HTTP וכתובת ה-URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
תוכן בקשת JSON:
{
"settings": {
"connectorEnforcement": "REQUIRED"
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-16T02:32:12.281Z",
"operationType": "UPDATE",
"name": "operation-id",
"targetId": "instance-id",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
"targetProject": "project-id"
}
כדי להשבית את האכיפה, צריך להשתמש במדיניות "connectorEnforcement": "NOT_REQUIRED". העדכון לא מפעיל מחדש את המכשיר.
טיפים לעבודה עם Cloud SQL Auth Proxy
הפעלת Cloud SQL Auth Proxy
כל הקריאות לדוגמה ל-Proxy מתחילות את Cloud SQL Auth Proxy ברקע, ולכן מוחזרת הנחיה. שמרו את הטרמינל הזה של Cloud Shell ל-Cloud SQL Auth Proxy, כדי שהפלט שלו לא יתערבב עם הפלט של תוכנות אחרות. בנוסף, הפלט משרת ה-Cloud SQL Auth Proxy יכול לעזור לכם לאבחן בעיות בחיבור, ולכן כדאי לתעד אותו בקובץ יומן. אם לא מפעילים את Cloud SQL Auth Proxy ברקע, הפלט מועבר ל-stdout אלא אם הוא מנותב מחדש.
אתם לא חייבים להשתמש ב-/cloudsql בתור הספרייה של שקעי Cloud SQL Auth Proxy. (שם הספרייה הזה נבחר כדי לצמצם את ההבדלים עם מחרוזות החיבור של App Engine). אם אתם משנים את שם הספרייה, חשוב לשמור על אורך מינימלי, כי הוא משולב במחרוזת ארוכה יותר שיש לה מגבלת אורך שנקבעת על ידי מערכת ההפעלה. זה תלוי במערכת, אבל בדרך כלל זה בין 91 ל-108 תווים. ב-Linux, האורך בדרך כלל מוגדר כ-108, ואפשר להשתמש בפקודה הבאה כדי לבדוק:
cat /usr/include/linux/un.h | grep "define UNIX_PATH_MAX"
שימוש ב-Cloud SQL Auth Proxy כדי להתחבר לכמה מכונות
אתם יכולים להשתמש בלקוח מקומי אחד של Cloud SQL Auth Proxy כדי להתחבר לכמה מכונות של Cloud SQL. הדרך שבה עושים את זה תלויה בשאלה אם משתמשים ב-Unix sockets או ב-TCP.
שקעי Unix
כדי לחבר את Cloud SQL Auth Proxy לכמה מכונות, צריך לספק את שם החיבור של כל מכונה כארגומנט ל-Cloud SQL Auth Proxy, ברשימה שמופרדת באמצעות רווחים. השרת proxy ל-Cloud SQL Auth מתחבר לכל מופע כשהוא מופעל.
מתחברים לכל מכונה באמצעות השקע שלה, בספרייה שצוינה.
לדוגמה:
./cloud-sql-proxy --unix-socket /cloudsql \ myProject:us-central1:myInstance myProject:us-central1:myInstance2 & mysql -u myUser -S /cloudsql/myProject:us-central1:myInstance2
שקעי TCP
כשמתחברים באמצעות TCP, מציינים יציאה במחשב שבה שרת ה-proxy ל-Cloud SQL Auth יאזין לכל מכונה של Cloud SQL. כשמתחברים לכמה מכונות Cloud SQL, כל יציאה שצוינה צריכה להיות ייחודית וזמינה לשימוש במחשב.
לדוגמה:
# Start the Cloud SQL Auth Proxy to connect to two different Cloud SQL instances. # Give the Cloud SQL Auth Proxy a unique port on your machine to use for each Cloud SQL instance. ./cloud-sql-proxy "myProject:us-central1:myInstance?port=3306" \ "myProject:us-central1:myInstance2?port=1234" # Connect to "myInstance" using port 3306 on your machine: mysql -u myInstanceUser --host 127.0.0.1 --port 3306 # Connect to "myInstance2" using port 1234 on your machine: mysql -u myInstance2User --host 127.0.0.1 --port 1234
פתרון בעיות בחיבורים של Cloud SQL Auth Proxy
קובץ האימג' של Cloud SQL Auth Proxy ב-Docker מבוסס על גרסה ספציפית של Cloud SQL Auth Proxy. כשגרסה חדשה של Cloud SQL Auth Proxy זמינה, צריך למשוך את הגרסה החדשה של קובץ האימג' של Cloud SQL Auth Proxy Docker כדי שהסביבה תהיה מעודכנת. כדי לראות את הגרסה הנוכחית של Cloud SQL Auth Proxy, אפשר להיכנס ל דף הגרסאות של Cloud SQL Auth Proxy ב-GitHub.
אם אתם לא מצליחים להתחבר למכונה של Cloud SQL באמצעות Cloud SQL Auth Proxy, נסו את הפתרונות הבאים כדי לגלות מה גורם לבעיה.
בודקים את הפלט של Cloud SQL Auth Proxy.
לרוב, הפלט של שרת ה-Proxy ל-Cloud SQL Auth יכול לעזור לכם לקבוע מה מקור הבעיה ואיך לפתור אותה. מעבירים את הפלט לקובץ או צופים בטרמינל של Cloud Shell שבו הפעלתם את Cloud SQL Auth Proxy.
אם מופיעה השגיאה
403 notAuthorizedואתם משתמשים בחשבון שירות כדי לאמת את Cloud SQL Auth Proxy, ודאו שלחשבון השירות יש את ההרשאות הנכונות.כדי לבדוק את חשבון השירות, מחפשים את המזהה שלו בדף IAM. צריכה להיות לו הרשאה מסוג
cloudsql.instances.connect. התפקידים המוגדרים מראשCloud SQL Admin,Clientו-Editorכוללים את ההרשאה הזו.אם אתם מתחברים מ-App Engine ומופיעה השגיאה
403 notAuthorized, בדקו את הערךapp.yamlשלcloud_sql_instancesכדי לוודא ששם החיבור של המכונה נכון ומאוית נכון. שמות החיבור של המכונות מוצגים תמיד בפורמטPROJECT:REGION:INSTANCE.בנוסף, צריך לוודא שלחשבון השירות של App Engine (לדוגמה, $PROJECT_ID@appspot.s3ns-system.iam.gserviceaccount.com) יש את תפקיד הלקוח של Cloud SQL ב-IAM.
אם שירות App Engine נמצא בפרויקט אחד (פרויקט א') ומסד הנתונים נמצא בפרויקט אחר (פרויקט ב'), השגיאה הזו מציינת שחשבון השירות של App Engine לא קיבל את תפקיד ה-IAM של לקוח Cloud SQL בפרויקט עם מסד הנתונים (פרויקט ב').
חשוב להפעיל את Cloud SQL Admin API.
אם לא, יופיע פלט כמו
Error 403: Access Not Configuredביומני Cloud SQL Auth Proxy.אם אתם כוללים כמה מכונות ברשימת המכונות, הקפידו להשתמש בפסיק כמפריד, ללא רווחים. אם אתם משתמשים ב-TCP, הקפידו לציין יציאות שונות לכל מופע.
אם אתם מתחברים באמצעות שקעי UNIX, צריך לוודא שהשקעים נוצרו על ידי הצגת רשימת הספרייה שציינתם כשהפעלתם את Cloud SQL Auth Proxy.
אם יש לכם מדיניות חומת אש ליציאה, ודאו שהיא מאפשרת חיבורים ליציאה 3307 במופע היעד של Cloud SQL.
כדי לוודא ש-Cloud SQL Auth Proxy הופעל כמו שצריך, אפשר לבדוק את היומנים בקטע Operations > Logging > Logs explorer במסוףCloud de Confiance . אם הפעולה בוצעה בהצלחה, התשובה תיראה כך:
2021/06/14 15:47:56 Listening on /cloudsql/$PROJECT_ID:$REGION:$INSTANCE_NAME/3306 for $PROJECT_ID:$REGION:$INSTANCE_NAME 2021/06/14 15:47:56 Ready for new connectionsבעיות במכסה: אם חורגים מהמכסה של Cloud SQL Admin API, Cloud SQL Auth Proxy מופעל עם הודעת השגיאה הבאה:
There was a problem when parsing a instance configuration but ignoring due to the configuration. Error: googleapi: Error 429: Quota exceeded for quota metric 'Queries' and limit 'Queries per minute per user' of service 'sqladmin.googleapis.com' for consumer 'project_number:$PROJECT_ID., rateLimitExceededאחרי שאפליקציה מתחברת לשרת ה-proxy, השרת מדווח על השגיאה הבאה:
failed to refresh the ephemeral certificate for $INSTANCE_CONNECTION_NAME: googleapi: Error 429: Quota exceeded for quota metric 'Queries' and limit 'Queries per minute per user' of service 'sqladmin.googleapis.com' for consumer 'project_number:$PROJECT_ID., rateLimitExceededפתרון: צריך לזהות את מקור הבעיה במכסה. לדוגמה, יכול להיות שאפליקציה משתמשת במחבר בצורה לא נכונה ויוצרת חיבורים חדשים שלא לצורך. אפשרות נוספת היא לפנות לתמיכה כדי לבקש הגדלה של מכסת Cloud SQL Admin API. אם שגיאת המכסה מופיעה בזמן ההפעלה, צריך לפרוס מחדש את האפליקציה כדי להפעיל מחדש את שרת ה-proxy. אם שגיאת המכסה מופיעה אחרי ההפעלה, אין צורך לפרוס מחדש.
המאמרים הבאים
- מידע נוסף על Cloud SQL Auth Proxy
- מידע נוסף על ניהול זהויות והרשאות גישה (IAM)
- מידע נוסף על חשבונות שירות
- מידע ולמידה על שתי רמות של בקרת גישה למכונות Cloud SQL.
- יוצרים משתמשים ומסדי נתונים.
- מידע על התחברות למכונה מהאפליקציה
- מידע ולמידה על לקוח MySQL
- מידע על אפשרויות התמיכה