אימות באמצעות איחוד שירותי אימות הזהות של כוח העבודה

בדף הזה מוסבר איך להגדיר את איחוד שירותי אימות הזהות של כוח העבודה (שנקרא גם אימות 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 ברמת הפרויקט במהלך ההתחברות.

לפני שמתחילים

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

תפקידים והרשאות

כדי לקבל את ההרשאות שדרושות להגדרה ולשימוש באימות באמצעות איחוד שירותי אימות הזהות של כוח עבודה, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בארגון:

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

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

הגדרת אימות באמצעות איחוד שירותי אימות הזהות של כוח העבודה

בסעיפים הבאים מוסבר איך להגדיר את המופע כך שישתמש באימות של איחוד שירותי אימות הזהות של כוח עבודה.

הפעלת אימות IAM במכונה

כדי להפעיל אימות IAM, מגדירים את הדגל cloudsql.iam_authentication לערך on.

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Google Cloud .

    כניסה לדף Cloud SQL Instances

  2. כדי לפתוח את הדף סקירה כללית של מכונה, לוחצים על שם המכונה.
  3. לוחצים על Edit.
  4. מרחיבים את הקטע התאמה אישית של המופע.
  5. מרחיבים את הקטע Connections.
  6. בקטע Security (אבטחה), מסמנים את תיבת הסימון Enable Cloud SQL IAM authentication (הפעלת אימות IAM ב-Cloud SQL).
  7. לוחצים על 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.

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Google Cloud .

    כניסה לדף Cloud SQL Instances

  2. כדי לפתוח את הדף סקירה כללית של מכונה, לוחצים על שם המכונה.
  3. בתפריט הניווט של SQL, בוחרים באפשרות משתמשים.
  4. לוחצים על הוספת חשבון משתמש. נפתחת החלונית Add a user account to instance INSTANCE_NAME.
  5. בוחרים באפשרות איחוד שירותי אימות הזהות של כוח העבודה.
  6. בשדה משתמש בכוח העבודה, מזינים את מזהה המשתמש שרוצים להוסיף.
  7. לוחצים על הוספה.

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 לחשבון הראשי של מאגר הזהויות של כוח העבודה או למאגר כולו.

המסוף

  1. נכנסים לדף Service accounts במסוף Google Cloud .

    כניסה לדף IAM

  2. לוחצים על הענקת גישה.
  3. בשדה 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/*

  4. ברשימה Role, בוחרים באפשרות Cloud SQL > Cloud SQL Instance User.
  5. אופציונלי: אם רוצים להתחבר באמצעות שרת proxy ל-Cloud SQL Auth או באמצעות מחברי שפה של Cloud SQL, לוחצים על הוספת תפקיד נוסף ואז בוחרים באפשרות Cloud SQL > Cloud SQL Client.
  6. לוחצים על 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

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

  1. כדי לבצע אימות באמצעות איחוד שירותי אימות הזהות של כוח עבודה, משתמשים בפקודה gcloud auth login עם הדגל --cred-file:

    gcloud auth login --cred-file=CONFIGURATION_FILE
    

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

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

    bash export PGPASSWORD=$(gcloud sql generate-login-token) psql "host=INSTANCE_IP user=USER_ID \ dbname=DB_NAME sslmode=require"

    מחליפים את מה שכתוב בשדות הבאים:

  3. INSTANCE_IP: כתובת ה-IP של מופע Cloud SQL.

  4. USER_ID: מזהה המשתמש של משתמש כוח העבודה, לדוגמה cruz@example.com.

  5. 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 התחברויות בדקה לכל מופע, כולל ניסיונות התחברות מוצלחים ולא מוצלחים. כשחורגים מהמכסה, אי אפשר להתחבר לחשבון באופן זמני. מומלץ להימנע מהתחברויות תכופות ולהגביל את ההתחברויות באמצעות רשתות מורשות.

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