בדף הזה מוסבר איך להגדיר את איחוד שירותי אימות הזהות של כוח העבודה (שנקרא גם אימות IAM של צד שלישי) ואיך להשתמש בו עם Cloud SQL. איחוד שירותי אימות הזהות של כוח עבודה מאפשר לכם להשתמש בספק הזהויות (IdP) הקיים שלכם, כמו Microsoft Active Directory או Okta, כדי לגשת למופעי Cloud SQL בלי שיהיה צורך ב Google חשבון.
בין היתרונות המרכזיים של שימוש באיחוד שירותי אימות הזהות של כוח העבודה:
- הפחתת התקורה: אין צורך לאמת דומיינים או לסנכרן זהויות עם Cloud Identity.
- אבטחה משופרת: ניהול מרכזי של הגישה למסד הנתונים דרך ספק זהויות ארגוני קיים.
- קלות ההתאמה: מתאים לארגונים גדולים עם צרכים מורכבים של ניהול זהויות.
תיאור מפורט של איחוד שירותי אימות הזהות של כוח עבודה זמין במאמר סקירה כללית על איחוד שירותי אימות הזהויות של כוח עבודה.
איך זה עובד
איחוד שירותי אימות הזהות של כוח עבודה מאפשר למשתמשים לבצע אימות ב- 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 Admin (
roles/cloudsql.admin) -
התחברות למכונה:
משתמש במכונת Cloud SQL (
roles/cloudsql.instanceUser) -
מתחברים למופע באמצעות שרת proxy ל-Cloud SQL Auth:
Cloud SQL Client (
roles/cloudsql.client) -
ניהול מדיניות IAM:
אדמין IAM של פרויקט (
roles/resourcemanager.projectIamAdmin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
הגדרת אימות באמצעות איחוד שירותי אימות הזהות של כוח העבודה
בסעיפים הבאים מוסבר איך להגדיר את המופע כך שישתמש באימות של איחוד שירותי אימות הזהות של כוח עבודה.
הפעלת אימות IAM במכונה
כדי להפעיל אימות IAM, מגדירים את הדגל cloudsql.iam_authentication לערך on.
המסוף
-
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
- כדי לפתוח את הדף סקירה כללית של מכונה, לוחצים על שם המכונה.
- לוחצים על Edit.
- מרחיבים את הקטע התאמה אישית של המופע.
- מרחיבים את הקטע Connections.
- בקטע Security (אבטחה), מסמנים את תיבת הסימון Enable Cloud SQL IAM authentication (הפעלת אימות IAM ב-Cloud SQL).
- לוחצים על 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 .
- כדי לפתוח את הדף סקירה כללית של מכונה, לוחצים על שם המכונה.
- בתפריט הניווט של SQL, בוחרים באפשרות משתמשים.
- לוחצים על הוספת חשבון משתמש. נפתחת החלונית Add a user account to instance INSTANCE_NAME.
- בוחרים באפשרות איחוד שירותי אימות הזהות של כוח העבודה.
- בשדה משתמש בכוח העבודה, מזינים את מזהה המשתמש שרוצים להוסיף.
- לוחצים על הוספה.
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.
- אופציונלי: אם רוצים להתחבר באמצעות שרת proxy ל-Cloud SQL Auth או באמצעות מחברי שפה של Cloud SQL, לוחצים על הוספת תפקיד נוסף ואז בוחרים באפשרות 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 או שרת proxy ל-Cloud SQL Auth.
שימוש ב-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: השם של מסד הנתונים שאליו רוצים להתחבר.
שימוש בשרת proxy ל-Cloud SQL Auth
מפעילים את ה-proxy עם הדגל --auto-iam-authn:
./cloud-sql-proxy INSTANCE_CONNECTION_NAME --auto-iam-authn
מידע נוסף על שרת ה-proxy זמין במאמר מידע על שרת proxy ל-Cloud SQL Auth.
הגבלות ומגבלות
- מזהה משתמש כפול במאגרים: Cloud SQL לא יכול להבחין בין נושאים עם אותו מזהה משתמש במאגרי כוח עבודה שונים או בספקי זהויות שונים. אם אתם משתמשים בכמה מאגרי זהויות של כוח עבודה או בכמה ספקים, אתם צריכים להשתמש במדיניות IAM כדי לוודא שלא תעניקו את
roles/cloudsql.instanceUserהרשאת ההתחברות לשמות נושאים כפולים ממאגרים או מספקים שונים. כך נמנעת גישה לא מורשית ממאגר או מספק אחרים עם אותו מזהה משתמש. - מכסת התחברויות: יש מכסה של 12,000 התחברויות בדקה לכל מופע, כולל ניסיונות התחברות מוצלחים ולא מוצלחים. כשחורגים מהמכסה, אי אפשר להתחבר לחשבון באופן זמני. מומלץ להימנע מהתחברויות תכופות ולהגביל את ההתחברויות באמצעות רשתות מורשות.