בדף הזה מוסבר איך להגדיר ולהשתמש באיחוד שירותי אימות הזהות של כוח עבודה (שנקרא גם אימות IAM של צד שלישי) עם Cloud SQL. איחוד שירותי אימות הזהות של כוח עבודה מאפשר לכם להשתמש בספק הזהויות (IdP) הקיים שלכם, כמו Microsoft Active Directory או Okta, כדי לגשת למכונות Cloud SQL בלי צורך בחשבון Google .
היתרונות העיקריים של השימוש באיחוד שירותי אימות הזהות של כוח העבודה:
- פחות תקורה: אין צורך לאמת דומיינים או לסנכרן זהויות עם Cloud Identity.
- אבטחה משופרת: ניהול מרכזי של הגישה למסד הנתונים באמצעות ה-IdP הקיים של הארגון.
- קלות בהרחבה: מתאים לארגונים גדולים עם צרכים מורכבים של ניהול זהויות.
לתיאור מפורט של איחוד שירותי אימות הזהות של כוח עבודה, קראו את הסקירה הכללית על איחוד שירותי אימות הזהות של כוח עבודה.
איך זה עובד
איחוד שירותי אימות הזהות של כוח עבודה מאפשר למשתמשים לאמת את הזהות שלהם ב- Google Cloud באמצעות זהות חיצונית. ב-Cloud SQL, המשמעות היא שחשבונות משתמשים ממאגר כוח עבודה יכולים להתחבר למכונות של Cloud SQL ל-PostgreSQL.
ב-Cloud SQL יש תמיכה באיחוד שירותי אימות הזהות של כוח העבודה באמצעות סוג המשתמש CLOUD_IAM_WORKFORCE_IDENTITY. כדי לתת גישה, Cloud SQL מאמת את פרטי הכניסה של כוח העבודה ואת הרשאת ה-IAM ברמת הפרויקט במהלך ההתחברות.
לפני שמתחילים
לפני שמגדירים אימות של מסד נתונים באמצעות איחוד שירותי אימות הזהות של כוח העבודה, צריך לוודא שעומדים בדרישות המוקדמות הבאות:
- מתקינים את הגרסה האחרונה של ה-CLI של gcloud.
- מגדירים מאגר של איחוד שירותי אימות הזהות של כוח עבודה וספק בארגון ב- Google Cloud .
- הגדרת התחזות לחשבון שירות לעומס העבודה.
- מוודאים שבמכונה של Cloud SQL פועלת גרסה 13 ומעלה של PostgreSQL.
תפקידים והרשאות
כדי לקבל את ההרשאות שנדרשות להגדרה ולשימוש באימות של איחוד שירותי אימות הזהות של כוח עבודה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בארגון:
-
ניהול מכונה: אדמין ב-Cloud SQL (
roles/cloudsql.admin) -
התחברות למכונה:
משתמש במכונה של Cloud SQL (
roles/cloudsql.instanceUser) -
התחברות למכונה באמצעות Cloud SQL Auth Proxy:
לקוח Cloud SQL (
roles/cloudsql.client) -
ניהול מדיניות IAM:
אדמין IAM של פרויקט (
roles/resourcemanager.projectIamAdmin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
הגדרת אימות באמצעות איחוד שירותי אימות הזהות של כוח העבודה
בקטעים הבאים מוסבר איך להגדיר את המכונה כך שתשתמש באימות של איחוד שירותי אימות הזהות של כוח עבודה.
הפעלת אימות IAM במכונה
כדי להפעיל אימות ב-IAM, מגדירים את הדגל cloudsql.iam_authentication לערך on.
המסוף
-
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
- כדי לפתוח את הדף Overview של מכונה, לוחצים על שם המכונה.
- לוחצים על Edit.
- מרחיבים את הקטע Customize your instance.
- מרחיבים את הקטע Connections.
- בקטע Security, מסמנים את התיבה Enable Cloud SQL IAM authentication.
- לוחצים על Save.
gcloud
כדי להפעיל אימות IAM, משתמשים בפקודה הבאה:
gcloud sql instances patch INSTANCE_NAME \ --database-flags=cloudsql.iam_authentication=on
מחליפים את INSTANCE_NAME בשם המכונה.
Terraform
מוסיפים את הבלוק database_flags למשאב google_sql_database_instance:
resource "google_sql_database_instance" "instance" { name = "INSTANCE_NAME" database_version = "POSTGRES_15" region = "REGION" settings { tier = "db-f1-micro" database_flags { name = "cloudsql.iam_authentication" value = "on" } } }
מחליפים את מה שכתוב בשדות הבאים:
-
INSTANCE_NAME: שם המכונה. -
REGION: האזור שבו נמצא המכונה.
REST v1
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט
- LOCATION_ID: מזהה המיקום
- INSTANCE_ID: מזהה המכונה הרצוי
- REGION: האזור הרצוי
- DATABASE_VERSION: מחרוזת של טיפוסים בני מנייה (enum) של גרסת מסד הנתונים.
לדוגמה:
POSTGRES_12 - PASSWORD: הסיסמה של משתמש ה-root
- MACHINE_TYPE: מחרוזת enum של סוג המכונה (רמה), למשל:
db-custom-[CPUS]-[MEMORY_MBS]
ה-method של ה-HTTP וכתובת ה-URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances
תוכן בקשת JSON:
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql.iam_authentication",
"value": "on"
}
]
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת 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-01T19:13:21.834Z",
"operationType": "CREATE",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
REST v1beta4
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט
- LOCATION_ID: מזהה המיקום
- INSTANCE_ID: מזהה המכונה הרצוי
- REGION: האזור הרצוי
- DATABASE_VERSION: מחרוזת של טיפוסים בני מנייה (enum) של גרסת מסד הנתונים.
לדוגמה:
POSTGRES_12 - PASSWORD: הסיסמה של משתמש ה-root
- MACHINE_TYPE: מחרוזת enum של סוג המכונה (רמה), למשל:
db-custom-[CPUS]-[MEMORY_MBS]
ה-method של ה-HTTP וכתובת ה-URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances
תוכן בקשת JSON:
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql.iam_authentication",
"value": "on"
}
]
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת 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-01T19:13:21.834Z",
"operationType": "CREATE",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
הוספת המשתמש של איחוד שירותי אימות הזהות של כוח העבודה למכונה
מוסיפים את חשבון המשתמש החיצוני למכונה באמצעות הסוג CLOUD_IAM_WORKFORCE_IDENTITY.
חשוב לוודא שמזהה המשתמש שבו אתם משתמשים תואם לערך שסופק על ידי מיפוי המאפיינים מספק הזהויות של כוח העבודה. בדרך כלל, המזהה הזה מוגדר ככתובת אימייל, לדוגמה cruz@example.com.
המסוף
-
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
- כדי לפתוח את הדף Overview של מכונה, לוחצים על שם המכונה.
- בתפריט הניווט של SQL, לוחצים על Users.
- לוחצים על הוספת חשבון משתמש. נפתח החלון Add a user account to instance INSTANCE_NAME.
- בוחרים באפשרות איחוד שירותי אימות הזהות של כוח עבודה.
- בשדה Workforce user, מזינים את מזהה המשתמש שרוצים להוסיף.
- לוחצים על הוספה.
gcloud
מריצים את הפקודה הבאה כדי ליצור את המשתמש:
gcloud sql users create USER_ID \ --instance=INSTANCE_NAME \ --type=CLOUD_IAM_WORKFORCE_IDENTITY
מחליפים את מה שכתוב בשדות הבאים:
-
USER_ID: מזהה המשתמש שרוצים להוסיף, לדוגמהcruz@example.com. -
INSTANCE_NAME: שם המכונה.
Terraform
משתמשים במשאב google_sql_user כדי להגדיר את המשתמש של כוח העבודה:
resource "google_sql_user" "workforce_user" { name = "USER_ID" # e.g., "cruz@example.com" instance = "INSTANCE_NAME" type = "CLOUD_IAM_WORKFORCE_IDENTITY" }
מחליפים את מה שכתוב בשדות הבאים:
-
USER_ID: מזהה המשתמש שרוצים להוסיף, לדוגמהcruz@example.com. -
INSTANCE_NAME: שם המכונה.
REST v1
יצירה של חשבון משתמש
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט
- INSTANCE_ID: מזהה המכונה שאליה מוסיפים את המשתמש
- USERNAME: כתובת האימייל של המשתמש
ה-method של ה-HTTP וכתובת ה-URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users
תוכן בקשת JSON:
{
"name": "USERNAME",
"type": "CLOUD_IAM_WORKFORCE_IDENTITY"
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
"status": "DONE",
"user": "user@example.com",
"insertTime": "2020-02-07T22:44:16.656Z",
"startTime": "2020-02-07T22:44:16.686Z",
"endTime": "2020-02-07T22:44:20.437Z",
"operationType": "CREATE_USER",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
REST v1beta4
יצירה של חשבון משתמש
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט
- INSTANCE_ID: מזהה המכונה שאליה מוסיפים את המשתמש
- USERNAME: כתובת האימייל של המשתמש
ה-method של ה-HTTP וכתובת ה-URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users
תוכן בקשת JSON:
{
"name": "USERNAME",
"type": "CLOUD_IAM_WORKFORCE_IDENTITY"
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
"status": "DONE",
"user": "user@example.com",
"insertTime": "2020-02-07T22:44:16.656Z",
"startTime": "2020-02-07T22:44:16.686Z",
"endTime": "2020-02-07T22:44:20.437Z",
"operationType": "CREATE_USER",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
הקצאת תפקיד משתמש במכונה
מקצים את התפקיד roles/cloudsql.instanceUser לחשבון הראשי של זהות כוח העבודה או למאגר כולו.
המסוף
-
נכנסים לדף Service accounts במסוף Google Cloud .
- לוחצים על הענקת גישה.
בשדה New principals, מבצעים אחת מהפעולות הבאות:
כדי לתת גישה לחשבון ראשי ספציפי, מזינים את זהות כוח העבודה בתור
principal:principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_IDכדי לתת גישה לכל המאגר, מזינים את מאגר כוח העבודה בתור
principalSet:principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*
- ברשימה Role, בוחרים באפשרות Cloud SQL > Cloud SQL Instance User.
- אופציונלי: אם רוצים להתחבר באמצעות Cloud SQL Auth Proxy או מחברי השפה של Cloud SQL, לוחצים על Add another role ובוחרים באפשרות Cloud SQL > Cloud SQL Client.
- לוחצים על Save.
gcloud
כדי לתת גישה למשתמש ספציפי, משתמשים בפקודה gcloud projects
add-iam-policy-binding:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" \ --role="roles/cloudsql.instanceUser"
מחליפים את מה שכתוב בשדות הבאים:
-
USER_ID: מזהה המשתמש שרוצים להוסיף, לדוגמהcruz@example.com. -
POOL_ID: מזהה המאגר של כוח העבודה. -
PROJECT_ID: מזהה הפרויקט שמכיל את המכונה.
כדי לתת גישה לכל מאגר כוח העבודה, משתמשים בפקודה gcloud projects
add-iam-policy-binding עם פורמט החבר principalSet:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*" \ --role="roles/cloudsql.instanceUser"
Terraform
משתמשים במשאב google_project_iam_member כדי להקצות את התפקיד לחשבון הראשי של כוח העבודה:
resource "google_project_iam_member" "workforce_user_iam" { project = "PROJECT_ID" role = "roles/cloudsql.instanceUser" member = "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" }
מחליפים את מה שכתוב בשדות הבאים:
-
USER_ID: מזהה המשתמש שרוצים להוסיף, לדוגמהcruz@example.com. -
POOL_ID: מזהה המאגר של כוח העבודה. -
PROJECT_ID: מזהה הפרויקט שמכיל את המכונה.
REST
כדי להקצות מדיניות IAM באמצעות ה-API, מאחזרים את מדיניות ה-IAM של הפרויקט באמצעות ה-method getIamPolicy.
לאחר מכן, מוסיפים את הקישור החדש למדיניות, ולבסוף מחילים את המדיניות המעודכנת באמצעות השיטה setIamPolicy.
המטען הייעודי (payload) הבא הוא דוגמה לקישור שצריך לצרף למדיניות ה-IAM:
{ "bindings": [ { "role": "roles/cloudsql.instanceUser", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" ] } ] }
מחליפים את מה שכתוב בשדות הבאים:
-
USER_ID: מזהה המשתמש שרוצים להוסיף, לדוגמהcruz@example.com. -
POOL_ID: מזהה המאגר של כוח העבודה.
מתן הרשאות למסד הנתונים
אתם יכולים לציין את התפקידים במסד הנתונים שיוקצו כשיוצרים את המשתמש בכוח העבודה, או להקצות באופן ידני את ההרשאות במסד הנתונים.
לדוגמה, כדי להעניק הרשאות באופן ידני:
GRANT SELECT ON TABLE_NAME TO "USER_ID";
מחליפים את מה שכתוב בשדות הבאים:
-
TABLE_NAME: שם הטבלה במסד הנתונים. -
USER_ID: מזהה המשתמש של המשתמש במסד הנתונים של מאגר הזהויות של כוח העבודה, לדוגמהcruz@example.com.
התחברות למכונה
עכשיו אפשר להתחבר למכונה באמצעות ה-CLI של gcloud או Cloud SQL Auth Proxy.
שימוש ב-CLI של gcloud
כדי ליצור אסימון התחברות, קודם צריך לבצע אימות באמצעות זהות כוח העבודה.
כדי לאמת באמצעות איחוד שירותי אימות הזהות של כוח עבודה, משתמשים בפקודה
gcloud auth loginעם הדגל--cred-file:gcloud auth login --cred-file=CONFIGURATION_FILEמחליפים את
CONFIGURATION_FILEבנתיב לקובץ התצורה שנוצר בשביל ספק הזהויות של כוח העבודה.כדי להתחבר באמצעות טוקן שנוצר, מריצים את הפקודה הבאה:
bash export PGPASSWORD=$(gcloud sql generate-login-token) psql "host=INSTANCE_IP user=USER_ID \ dbname=DB_NAME sslmode=require"מחליפים את מה שכתוב בשדות הבאים:
INSTANCE_IP: כתובת ה-IP של המכונה ב-Cloud SQL.
USER_ID: מזהה המשתמש של המשתמש בכוח העבודה, לדוגמהcruz@example.com.
DB_NAME: שם מסד הנתונים שאליו רוצים להתחבר.
שימוש ב-Cloud SQL Auth Proxy
מפעילים את שרת ה-proxy עם הדגל --auto-iam-authn:
./cloud-sql-proxy INSTANCE_CONNECTION_NAME --auto-iam-authn
מידע נוסף על שרת ה-proxy זמין במאמר מידע על Cloud SQL Auth Proxy.
הגבלות ומגבלות
- מזהה משתמש כפול במאגרים: Cloud SQL לא יכול להבחין בין נושאים עם אותו מזהה משתמש במאגרים שונים של כוח עבודה או בספקי זהויות שונים. אם אתם משתמשים בכמה מאגרים או ספקים של כוח עבודה, אתם צריכים להשתמש בכללי מדיניות של IAM כדי לוודא שאתם לא נותנים את הרשאת ההתחברות של
roles/cloudsql.instanceUserלשמות נושאים כפולים ממאגרים או מספקים שונים. כך אפשר למנוע גישה לא מורשית ממאגר או מספק אחר עם אותו מזהה משתמש. - מכסת התחברויות: יש מכסה של 12,000 התחברויות לדקה לכל מכונה, כולל ניסיונות התחברות שהצליחו וניסיונות שנכשלו. אם חורגים מהמכסה, אי אפשר להתחבר באופן זמני. מומלץ להימנע מהתחברויות תכופות ולהגביל את ההתחברויות באמצעות רשתות מורשות.
המאמרים הבאים
- מידע נוסף על איחוד שירותי אימות הזהות של כוח עבודה
- איך מגדירים מכונות לאימות מסד נתונים באמצעות IAM
- איך מנהלים משתמשים באמצעות אימות מסד נתונים של IAM
- איך מתחברים באמצעות אימות מסד נתונים ב-IAM