המסמכים שלנו בדרך כלל נכתבים במטרה לעזור לכם להפעיל מוצר או תכונה, אבל יכול להיות שחלק מהמסמכים לא יפעלו בצורה תקינה אם הארגון שלכם מטיל מגבלות אבטחה. לדוגמה, החברה שלכם יכולה להטמיע חלק ממגבלות האבטחה מתוך Cloud Foundation Toolkit, מתוך Google Cloud תוכניות האבטחה או ליצור מגבלות משלה.
במאמר הזה מוסבר איך לפתור בעיות שגיאה בהטמעת אפליקציות שמוצגות בארגון שמשתמש במגבלות אבטחה.
פתרון בעיות שקשורות למגבלות אבטחה
צוות תפעול IT או צוות אבטחה יכולים להפעיל אילוצי אבטחה באמצעות מדיניות הארגון. האילוצים האלה מגבילים את השימוש במשאבים של הארגון.
כששולחים בקשת API שמחזירה שגיאה, בתגובת ה-API אמור להיות מצוין אם השגיאה נובעת מהפרות מדיניות. התשובה צריכה לכלול הסבר על האילוץ שהופר. השלבים הבאים לפתרון בעיות יעזרו לכם לקבוע אם מתרחשת הפרה ולהבין אותה:
בודקים את הודעת השגיאה בתגובה של ה-API. תוכל לזהות איזו מגבלת אבטחה ההטמעה שלך מפרה?
בדוגמה הבאה אפשר לראות שהבעיה היא האילוץ
sql.restrictPublicIp:Organization Policy check failure The external IP of this instance violates the constraints/sql.restrictPublicIp enforced
אם הבנתם את הפרת המדיניות, אתם יכולים לעדכן את הגדרות הפריסה של המשאב כדי לעמוד בדרישות.
בדוגמה הקודמת להגבלת כתובות IP ציבוריות חיצוניות, צריך להגדיר את מופע Cloud SQL לשימוש בכתובת IP פרטית פנימית.
אם אתם לא בטוחים למה ההגבלה חלה או מה צריך לעשות, כדאי לפנות לצוות האבטחה כדי להבין איפה המדיניות חלה בהיררכיה של הארגון, ולבדוק איתם מה אפשר לעשות כדי לעקוף את הבעיה.
בודקים אם יש תבניות פריסה, כמו תבניות Terraform, שמשותפות בארגון. בתבניות האלה צריך לפרט איךGoogle Cloud התשתית הוגדרה ואיך היא מגבילה את הפריסה של האפליקציה.
בעיות נפוצות במגבלות אבטחה
כשפורסים את האפליקציות ב- Google Cloud, יכול להיות שתיתקלו בשגיאה כמו בדוגמה הבאה:
ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request: Organization Policy check failure: the external IP of this instance violates the constraints/sql.restrictPublicIp enforced at the 123456789 project.
בדוגמה הזו, אי אפשר להגדיר מופע של Cloud SQL לשימוש בכתובת IP ציבורית חיצונית. אילוץ אבטחה נאכף ממדיניות שחלה על הסביבה שלכם.
יכול להיות שתיתקלו באילוצים הנפוצים הבאים בנושא אבטחה, שיופעלו ויפורטו בתגובת שגיאה של API במהלך פיתוח האפליקציות.
Compute Engine
| שם האילוץ | למה כדאי להטמיע את התכונה הזו | פתרון עקיף מוצע |
|---|---|---|
| constraints/compute.disableNestedVirtualization | למנוע התקנה של Hypervisor שתואם ל-KVM בתוך המכונה הווירטואלית. התנהגות כזו עלולה להוביל לסיכוני אבטחה אם לא מתבצעים תיקונים וניהול מתאימים. | מגדירים את המכונה הווירטואלית כך שווירטואליזציה מקוננת עם שיפור מהירות באמצעות חומרה תושבת. כברירת מחדל, התכונה הזו מופעלת בכל המכונות הווירטואליות של Compute Engine שפועלות בפלטפורמות מעבד Intel Haswell או בפלטפורמות מעבד חדשות יותר. |
| constraints/compute.requireShieldedVm | נדרש ליצור מכונות וירטואליות חדשות באמצעות תמונות דיסק מוגנות עם האפשרויות 'הפעלה מאובטחת', vTPM ו'ניטור תקינות' מופעלות. האפשרויות האלה מונעות שינוי לא מורשה של המכונה הווירטואלית וגישה לנתונים או שינוי שלהם. | אל תפעילו מכונות וירטואליות מוגנות כשאתם יוצרים מכונה וירטואלית. כדי ליצור אשכול GKE, צריך להפעיל צמתים מוגנים של GKE. בשלב הזה, Dataflow לא תומך בעובדים של מכונות וירטואליות מוגנות. |
| constraints/compute.disableSerialPortAccess | הסרת וקטורים של אבטחה כדי ליצור אינטראקציה עם מכונה וירטואלית או להציג פלט אבחון שאפשר להשתמש בו כדי לבצע התקפה. | אל תפעילו גישה ליציאה טורית כשאתם יוצרים מכונה וירטואלית. |
| constraints/compute.disableGuestAttributesAccess | לצמצם את כמות המידע על המארח ועל הפלטפורמה הבסיסיים, שעלול לשמש אפליקציה זדונית. | אל תשתמשו ב-Compute Engine API כדי לקרוא מאפייני אורח של מכונות וירטואליות ב-Compute Engine. |
| constraints/compute.vmExternalIpAccess | למנוע הפעלה של אפליקציות עם כתובת IP חיצונית וגישה מהאינטרנט. | השבתה של גישה לכתובות IP חיצוניות במכונות וירטואליות. אפשר להשתמש רק בכתובת IP פרטית פנימית. אפשר להשתמש ב-GKE באשכולות פרטיים ללא כתובות IP ציבוריות. בשלב הזה, אין תמיכה בכתובות IP פרטיות ב-Dataprep וב-Dataflow. |
רשת וירטואלית וכתובות IP
| שם האילוץ | למה כדאי להטמיע את התכונה הזו | פתרון עקיף מוצע |
|---|---|---|
| constraints/compute.skipDefaultNetworkCreation | מוודאים שאפשר ליצור רק עננים וירטואליים פרטיים (VPC) שמנוהלים על ידי החברה, ושהתנועה ברשת או כללי הסינון חלים. | לקשר את האפליקציות שלכם ל-VPC קיימים בארגון. רשתות VPC שנוצרות אוטומטית כברירת מחדל לא נפרסות בפרויקטים חדשים. |
| constraints/compute.restrictXpnProjectLienRemoval | למנוע מחיקה בטעות של VPC משותף כשמשאבים בפרויקטים אחרים מסתמכים על שירותי הרשת שהוא מספק. | אל תנסו למחוק VPC משותף. חשוב לוודא שמטרגטים את המשאב הנכון למחיקה. |
| constraints/sql.restrictPublicIp | למנוע ממכונות Cloud SQL לפעול עם כתובת IP חיצונית ולמנוע גישה אליהן מהאינטרנט. | אל תגדירו את מופע Cloud SQL לשימוש בכתובת IP ציבורית חיצונית. במקום זאת, מגדירים את מכונת Cloud SQL כך שתשתמש בכתובת IP פרטית פנימית. |
זהות ואימות
| שם האילוץ | למה כדאי להטמיע את התכונה הזו | פתרון עקיף מוצע |
|---|---|---|
| constraints/iam.disableServiceAccountKeyCreation | מפתחות של חשבונות שירות עלולים להוות סיכון אבטחה אם הם נחשפים, לכן חשוב למנוע את הייצוא שלהם. | ביצוע אימות באמצעות חלופה מאובטחת יותר למפתחות של חשבונות שירות. |
| constraints/storage.uniformBucketLevelAccess | כדי למזער את הסיכון להחלת הרשאות שגויות או לא עקביות על קטגוריות אחסון, מומלץ לאפשר שימוש רק בניהול זהויות והרשאות גישה (IAM). | הפעלת גישה אחידה ברמת הקטגוריה כדי לאבטח את הקטגוריה של Cloud Storage. |
| constraints/iam.allowedPolicyMemberDomains | הגבלת Google Cloud הגישה למשאבים רק לדומיינים מאושרים. | להשתמש בחשבון באחד מהדומיינים המאושרים. יש בעיות ידועות נוספות שקשורות למגבלה הזו. |
דוגמאות לשגיאות בתגובת API
בדוגמה הקודמת להגבלת כתובות IP ציבוריות חיצוניות באמצעות Cloud SQL, הפרת מדיניות גורמת ל-API להחזיר שגיאה. בדוגמאות המפורטות הבאות מוצגת תגובת ה-API שמציינת איזו מגבלה גורמת לכך שהבקשה נכשלת. כדאי לבדוק את התשובות של ה-API כדי להבין למה פריסת האפליקציות נכשלת.
כשל ב-Cloud SQL עם Google Cloud CLI:
$ gcloud alpha sql instances create mysql-node --project my-sql-project ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request: Organization Policy check failure: the external IP of this instance violates the constraints/sql.restrictPublicIp enforced at the 123456789 project.
כשל ב-Cloud SQL עם Terraform:
$ terraform apply plan.out [...] module.mysql-db.google_sql_database_instance.default: Creating... Error: Error, failed to create instance backend01-db-1c81e0e3: googleapi: Error 400: Invalid request: Organization Policy check failure: the external IP of this instance violates the constraints/sql.restrictPublicIp enforced at the 123456789 project., invalid
רשימת מדיניות הארגון שחלה על הפרויקט
יכול להיות שהפרויקט יירש מדיניות מרמת התיקייה או הארגון. בהתאם לתפקידי הגישה שלכם, יכול להיות שלא תהיה לכם אפשרות לראות אילו מדיניות נאכפת ברמות גבוהות יותר בהיררכיה, כדי לדעת איפה מוחל האילוץ שהופר.
כדי לראות את כללי המדיניות או החריגים שחלים על הפרויקט, משתמשים בפקודה gcloud org-policies list:
gcloud org-policies list --project=PROJECT_ID
מחליפים את PROJECT_ID בפרויקט שרוצים לראות את המדיניות שנאכפת בו.
כדי לקבל מידע נוסף על מדיניות שהוחלה, משתמשים בפקודה gcloud org-policies describe. צריך לציין את שם המדיניות שרוצים לתאר ואת מזהה הפרויקט עם הפרמטר --project:
gcloud org-policies describe POLICY_NAME \ --project=PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
POLICY_NAME: השם של מדיניות הארגון
PROJECT_ID: הפרויקט שרוצים לראות את המדיניות שנאכפת בו
המאמרים הבאים
אם אתם לא מצליחים להבין איפה מוחלת מדיניות מסוימת ואיך לעקוף מגבלת אבטחה, אתם יכולים לפנות לצוות תפעול ה-IT או לצוות האבטחה. כל ארגון מחיל מדיניות ותוכניות שמותאמות לסביבה שלו.
מידע נוסף על כל האמצעים שאפשר להחיל בארגון זמין ברשימת האילוצים של מדיניות הארגון.