באמצעות תנאים ב-IAM תוכלו להגדיר ולאכוף בקרת גישה מותנית למשאבים, על סמך מאפיינים. בין היתר, תוכלו להגדיר תנאים למופעים של Cloud SQL.Cloud de Confiance מידע נוסף על תנאי IAM מופיע במאמר סקירה כללית על תנאי IAM.
מבוא
ב-Cloud SQL, אפשר לאכוף גישה מותנית על סמך המאפיינים הבאים:
- מאפייני תאריך/שעה: משמשים להגדרת גישה זמנית (עם תאריך תפוגה), מתוזמנת או לזמן מוגבל למשאבי Cloud SQL. לדוגמה, אתם יכולים לאפשר למשתמש גישה למכונה של מסד נתונים עד לתאריך מסוים. אפשר להשתמש במאפייני תאריך ושעה בכל רמה בהיררכיית המשאבים. מידע נוסף זמין במאמר הגדרת גישה זמנית.
- מאפייני משאבים: משמשים להגדרת גישה מותנית על סמך תג, שם משאב, סוג משאב או מאפיין של שירות משאב. ב-Cloud SQL, אפשר להשתמש במאפיינים של מכונות מסד נתונים כדי להגדיר גישה מותנית. לדוגמה, אפשר לאפשר למשתמש גישה רק למופעים עם תג ספציפי. מידע נוסף מופיע במאמר הגדרת גישה לפי משאבים.
תרחישים לדוגמה:
לאפשר למשתמשים להתחבר למופעים ספציפיים.
לאפשר למשתמשים ליצור מופעים עם קידומות או סיומות ספציפיות (לדוגמה, 'test').
הגבלת הגישה לפעולות גיבוי עבור מופעי בדיקה
לאפשר למשתמשים למחוק מכונות פיתוח ובדיקה, אבל לא מכונות ייצור.
אפשרות למשתמשים לבצע פעולות אדמיניסטרטיביות בתאריכים מסוימים או בשעות מסוימות.
המשתמשים יכולים להתחבר למופעים ספציפיים
נניח שאתם רוצים לתת למשתמש או לחשבון שירות הרשאה להתחבר רק למכונה ספציפית אחת של Cloud SQL. אתם יכולים לכלול תנאי IAM בקישור למדיניות IAM שמקצה לחשבון הזה את ההרשאות של תפקיד ב-Cloud SQL.
כברירת מחדל, התפקיד המוגדר מראש Cloud SQL Client (roles/cloudsql.client), שמכיל את ההרשאה cloudsql.instances.connect, מאשר לחברים בו להתחבר לכל המכונות של Cloud SQL בפרויקט. על ידי הוספת תנאי IAM לקישור המדיניות, אפשר להעניק הרשאה רק למופע שצוין בשם.
המסוף
בדוגמה הזו אפשר לראות איך לשנות את הקישור הקיים ב-IAM לפרויקט כדי לתת לחשבון שירות תפקיד של לקוח Cloud SQL עבור מופע ספציפי.
בדוגמה הזו נעשה שימוש במשתנים הבאים:
- PROJECT_ID: הפרויקט ב- Cloud de Confiance .
- INSTANCE_ID: השם של המכונה שרוצים לתת לה גישה.
-
נכנסים לדף Service accounts במסוף Cloud de Confiance .
- לוחצים על הוספה.
- בתיבת הקלט New Members (משתמשים חדשים), מזינים את כתובת האימייל של חשבון השירות.
- לוחצים על הרשימה הנפתחת תפקיד ובוחרים בתפקיד Cloud SQL Client.
- לוחצים על הוספת תנאי.
- מזינים שם ותיאור.
- בוחרים את הכרטיסייה Condition editor (עורך התנאים).
- בקטע Condition builder (הכלי להגדרת תנאים):
- בשדה Condition type - Resource - Name, מזינים
projects/PROJECT_ID/instances/INSTANCE_ID - מוודאים שהתנאי AND נבחר.
- בשדה Condition type - Resource - Service, בוחרים באפשרות
sqladmin.googleapis.com.
- בשדה Condition type - Resource - Name, מזינים
- לוחצים על שמירה כדי לשמור את התנאי.
- לוחצים על שמירה כדי לשמור את המדיניות.
gcloud
בדוגמה הזו אפשר לראות איך לשנות את הקישור הקיים של מדיניות IAM לפרויקט כדי לתת לחשבון שירות ספציפי את התפקיד Cloud SQL Client, אבל רק עבור מכונה ספציפית.
בדוגמה הזו נעשה שימוש במשתנים הבאים:
- PROJECT_ID: הפרויקט ב- Cloud de Confiance .
- INSTANCE_ID: השם של המכונה שרוצים לתת גישה אליה.
- SERVICE_ACCOUNT_EMAIL: כתובת האימייל המלאה של חשבון השירות שרוצים לשנות את הגישה שלו.
- מקבלים את הקישורים הקיימים למדיניות IAM ומציגים אותם בקובץ
bindings.json: - מוסיפים את קישור התפקיד המותנה הבא לקובץ
bindings.json:{ "bindings": [ { "role": "roles/cloudsql.client", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ], "condition": { "expression": "resource.name == 'projects/PROJECT_ID/instances/INSTANCE_ID' && resource.service == 'sqladmin.googleapis.com'" } } ], "etag": "BwWKmjvelug=", "version": 3 }
- מעדכנים את מדיניות ה-IAM באמצעות הקובץ החדש
bindings.json.gcloud projects set-iam-policy PROJECT_ID bindings.json
gcloud projects get-iam-policy PROJECT_ID --format=json > bindings.json
Terraform
כדי לאפשר למשתמשים להתחבר למופעים ספציפיים, צריך להשתמש במשאב נתונים של Terraform google_iam_policy ובgoogle_project_iam_policyמשאב של Terraform.
החלה של השינויים
כדי להחיל את ההגדרות של Terraform בפרויקט ב- Cloud de Confiance , מבצעים את השלבים בקטעים הבאים.
הכנת Cloud Shell
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Cloud de Confiance
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform, הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).
-
יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת
.tf, למשלmain.tf. במדריך הזה, הקובץ נקראmain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.
מעתיקים את הקוד לדוגמה בקובץ
main.tfהחדש שיצרתם.לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.
- בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
- שומרים את השינויים.
-
מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
terraform init
אופציונלי: תוכלו לכלול את האפשרות
-upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:terraform init -upgrade
החלה של השינויים
-
בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
terraform plan
מתקנים את ההגדרות לפי הצורך.
-
מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform:terraform apply
ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!".
- פותחים את Cloud de Confiance הפרויקט כדי לראות את התוצאות. במסוף Cloud de Confiance , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.
מחיקת השינויים
כדי למחוק את השינויים:
- כדי להשבית את ההגנה מפני מחיקה, בקובץ התצורה של Terraform מגדירים את הארגומנט
deletion_protectionלערךfalse.deletion_protection = "false"
- מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform המעודכנות:terraform apply
-
כדי להסיר משאבים שהוחלו בעבר על הגדרות Terraform, מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה:terraform destroy
הגבלת הגישה לפעולות גיבוי עבור מופעי בדיקה
נניח שהטופולוגיה של השירות מוגדרת כך שלכל מופעי הבדיקה יש קידומת של test (לדוגמה, test-instance-1), ולכל מופעי הייצור יש קידומת של prod (לדוגמה, prod-instance-1).
אתם יכולים להגביל את הגישה לפעולות גיבוי עבור מופעי הבדיקה שלכם למשתמש או לחשבון שירות. הגבלת הגישה כוללת הגבלת פעולות CREATE, GET, LIST או DELETE לגיבויים של מופעי הבדיקה.
המסוף
-
נכנסים לדף Service accounts במסוף Cloud de Confiance .
- לוחצים על הכרטיסייה PRINCIPALS.
- מאתרים את כתובת האימייל של המשתמש או את חשבון השירות (הגורם המורשה) שרוצים להגביל את הגישה שלהם.
- לוחצים על סמל Edit principal (עריכת הגורם המרכזי) משמאל לגורם המרכזי. הסמל הזה נראה כמו עיפרון.
- בתיבת הדו-שיח Edit permissions, לוחצים על ADD ANOTHER ROLE.
בתיבת הדו-שיח הבאה, בשדה Filter, מזינים
Cloud SQL Admin. לאחר מכן בוחרים בתפקיד Cloud SQL Admin שמופיע.תיבת הדו-שיח Edit permissions פעילה, והתפקיד Cloud SQL Admin מופיע עכשיו בתיבת הדו-שיח.
- משמאל לתפקיד Cloud SQL Admin, לוחצים על הקישור Add condition (הוספת תנאי).
- בתיבת הדו-שיח עריכת תנאי, מציינים את הפרטים הבאים:
- בשדה Title, מזינים שם לתנאי שמוסיפים כדי להגביל את הגישה לפעולות גיבוי עבור מופעי בדיקה. לדוגמה, אפשר להזין
Limit access to backup operations. לוחצים על הכרטיסייה CONDITION EDITOR (עורך התנאים) ומוסיפים את התנאי הבא:
resource.type == "sqladmin.googleapis.com/BackupRun" && resource.name.startsWith("projects/PROJECT_ID/instances/test")
- בשדה Title, מזינים שם לתנאי שמוסיפים כדי להגביל את הגישה לפעולות גיבוי עבור מופעי בדיקה. לדוגמה, אפשר להזין
- לוחצים על SAVE.
- בתיבת הדו-שיח עריכת הרשאות, לוחצים על שמירה.
gcloud
בדוגמה הזו נעשה שימוש במשתנים הבאים:
- PROJECT_ID: הפרויקט ב- Cloud de Confiance .
- USER_EMAIL: כתובת האימייל של המשתמש.
- SERVICE_ACCOUNT_EMAIL:כתובת האימייל המלאה של חשבון השירות שרוצים להגביל את הגישה שלו.
-
הגבלת ההיקף של התפקיד
cloudsql.adminלמשתמש עם כתובת האימייל USER_EMAIL.ההיקף של התפקיד מוגבל למשאבים ששמות המשאבים שלהם מתחילים ב-
projects/PROJECT_ID/instances/test.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:USER_EMAIL \ --role=roles/cloudsql.admin \ --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
-
הגבלת היקף התפקיד
cloudsql.adminלמשתמש שמחובר באמצעות חשבון שירות של SERVICE_ACCOUNT_EMAIL.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role=roles/cloudsql.admin \ --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
או
המשתמשים יכולים למחוק מופעי בדיקה, אבל לא מופעי ייצור
נניח שאתם רוצים לאפשר לחשבון שירות למחוק מופעי בדיקה, אבל לא מופעי ייצור. כדי לעשות את זה, אפשר להשתמש בתגים ולהוסיף את שני קשרי המדיניות הבאים לחשבון השירות:
- תפקיד עריכה ב-Cloud SQL במשאב שבו הקציתם את התפקיד, ובמשאבים שנמצאים מתחתיו בהיררכיית המשאבים. אם התפקיד מוענק ברמת הפרויקט, הוא חל על כל המופעים בפרויקט. התפקיד Cloud SQL Editor לא מכיל את ההרשאה
cloudsql.instances.delete. - תפקיד אדמין ב-Cloud SQL במכונות עם התג
test.
המסוף
-
נכנסים לדף Service accounts במסוף Cloud de Confiance .
- לוחצים על הוספה.
- בשדה New Members (משתמשים חדשים), מזינים את כתובת האימייל של חשבון השירות.
- לוחצים על הרשימה הנפתחת תפקיד ובוחרים בתפקיד עריכת Cloud SQL. לא מוסיפים עוד כלום לתפקיד הזה.
- לוחצים על שמירה כדי לשמור את התנאי.
- לוחצים על התפריט Role (תפקיד) של אותו חשבון ובוחרים בתפקיד Cloud Cloud SQL Admin (אדמין של Cloud SQL).
- לוחצים על הוספת תנאי.
- מזינים שם ותיאור.
- בוחרים את הכרטיסייה Condition editor (עורך התנאים).
- בקטע Condition builder (הכלי להגדרת תנאים):
- בשדה Condition type - Resource - Name, מזינים שם לתנאי.
- בשדה Condition type - Resource - Service, בוחרים באפשרות
sqladmin.googleapis.com. - בשדה Condition type - Resource - Tag, מזינים את השם ממרחב השמות של מפתח התג. בדוגמה הזו, האופרטור הוא
matchesוהערך הוא815471563813/env/test.
- לוחצים על שמירה כדי לשמור את התנאי.
- לוחצים על שמירה כדי לשמור את המדיניות.
gcloud
בדוגמה הזו נעשה שימוש במשתנים הבאים:
- PROJECT_ID: הפרויקט ב- Cloud de Confiance .
- INSTANCE_ID: מופע Cloud SQL.
- REGION: האזור שבו נמצא מופע Cloud SQL.
- ORGANIZATION_ID: המזהה של הארגון שיהיה משאב האב של מפתח התג הזה. לדוגמה: 12345678901. במאמר יצירה וניהול של ארגונים מוסבר איך מוצאים את מספר הארגון.
- SERVICE_ACCOUNT_EMAIL:כתובת האימייל המלאה של חשבון השירות שרוצים לשנות את הגישה שלו.
- יוצרים מפתח תג בשם env עם ערכי התגים prod ו-test. מידע נוסף זמין במאמר
יצירה והגדרה של תג חדש.
gcloud alpha resource-manager tags keys create env \ --parent=organizations/ORGANIZATION_ID gcloud alpha resource-manager tags values create prod \ --parent=env gcloud alpha resource-manager tags values create test \ --parent=env
- מצרפים את התג env עם הערך test למכונות של Cloud SQL בסביבת הבדיקה. מידע נוסף זמין במאמר תגים של Cloud SQL.
- מקבלים את הקישורים הקיימים למדיניות IAM ומציגים אותם בקובץ
bindings.json:gcloud projects get-iam-policy PROJECT_ID --format=json >> bindings.json
- מוסיפים את הקישורים המותנים הבאים לקובץ
bindings.json:{ "bindings": [ { "role": "roles/cloudsql.editor", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ] }, { "role": "roles/cloudsql.admin", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ], "condition": { "expression": "resource.matchTag('ORGANIZATION_ID/env', 'test')" } } ], "etag": "BwWKmjvelug=" "version": 3 }
- מעדכנים את הקישורים למדיניות IAM באמצעות הקובץ החדש
bindings.json.gcloud projects set-iam-policy PROJECT_ID bindings.json
gcloud alpha resource-manager tags bindings create \ --tag-value=test \ --parent=//sqladmin.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID \ --location=REGION