תצוגות מאובטחות עם פרמטרים מספקות אבטחת מידע ובקרת גישה לשורות באפליקציות. הם מסננים את תוצאות השאילתה על סמך הזהות של משתמש האפליקציה.
במדריך הזה מוסבר איך להגדיר תצוגות מאובטחות עם פרמטרים ב-Cloud SQL, להגדיר תפקידים והרשאות במסד הנתונים כדי להגביל את הגישה למסדי נתונים טבלאיים, ולאמת את אבטחת המידע. הדוגמאות שמופיעות במסמך הזה הן למטרות הדגמה בלבד.
מהן תצוגות מאובטחות שמכילות פרמטרים?
באופן כללי, מומלץ להריץ את האפליקציה באמצעות חשבון שירות עם הרשאת הגישה המינימלית הנדרשת למסד הנתונים. לדוגמה, אם לאפליקציה שלכם לא אמורה להיות גישת כתיבה למסד הנתונים, צריך להשתמש בתפקיד עם הרשאת קריאה בלבד. צריך להגדיר את אמצעי בקרת הגישה האלה ברמת מסד הנתונים.
אם האפליקציה שלכם זקוקה לאבטחה מפורטת יותר מזו שמאפשרת גישה רגילה ברמת מסד הנתונים, אתם יכולים להשתמש בתצוגות מאובטחות עם פרמטרים כדי לוודא שהמשתמשים רואים רק את הנתונים שהם מורשים לראות. תצוגות מאובטחות עם פרמטרים מספקות אבטחת מידע דינמית ובקרת גישה לשורות, שמתאימות לאפליקציות SaaS עם כמה דיירים, בלי שצריך להגדיר תפקידים נפרדים במסד הנתונים לכל משתמש קצה באפליקציה.
לשימוש בתצוגות מאובטחות שמכילות פרמטרים יש שלושה יתרונות עיקריים:
- אבטחת מידע דינמית ובקרת גישה לשורות: סינון שאילתות באמצעות מזהי משתמשי קצה, כך שהמשתמשים יוכלו לגשת רק לנתונים שהם מורשים לגשת אליהם, בלי קשר לניסוח השאילתה.
- ניהול קל יותר של תפקידים: שימוש בתפקיד אחד משותף במסד הנתונים לכל משתמשי האפליקציה, במקום לנהל תפקידים נפרדים במסד הנתונים לכל משתמש.
מטרות
- ליצור תצוגות מאובטחות עם פרמטרים באמצעות פרמטרים של תצוגות עם שם.
- יוצרים את תפקיד מסד הנתונים שבו האפליקציה משתמשת כדי להתחבר למסד הנתונים ולגשת לתצוגות מאובטחות עם פרמטרים.
- נותנים לתפקיד החדש הרשאות לתצוגות המאובטחות עם הפרמטרים, ומבטלים את הגישה למסדי הנתונים הטבלאיים.
- מתחברים באמצעות התפקיד החדש ומוודאים שאי אפשר לגשת לטבלאות המוגבלות.
- מריצים שאילתות בתצוגה עם הפרמטרים באמצעות הפרוצדורה המאוחסנת
mysql.execute_parameterized_queryאו באמצעות QueryData API.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את העלויות בהתאם לשימוש הצפוי, אתם יכולים להשתמש במחשבון העלויות.
משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.
כדי להימנע מחיובים נוספים, מחקו את המשאבים שיצרתם כשתסיימו את המשימות שבמסמך הזה. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
לפני שיוצרים תצוגות מאובטחות עם פרמטרים, צריך לבצע את הפעולות הבאות.
הפעלת החיוב וממשקי ה-API הנדרשים
בוחרים פרויקט במסוף Google Cloud .
מפעילים את Cloud APIs שנדרשים כדי ליצור מכונות של Cloud SQL ולהתחבר אליהן.
בשלב Confirm project, לוחצים על Next כדי לאשר את שם הפרויקט שבו רוצים לבצע שינויים.
בשלב Enable APIs, לוחצים על Enable כדי להפעיל את ממשקי ה-API הבאים:
- Cloud SQL for MySQL API
- Knowledge Catalog API
- Data Analytics API עם Gemini (
geminidataanalytics.googleapis.com)
יצירת מסד נתונים והתחברות אליו
- יוצרים מכונה.
- מתחברים למכונה ויוצרים מסד נתונים.
מפעילים את Cloud SQL Data API במכונה של Cloud SQL ל-MySQL, כדי ש-
QueryDataAPI יוכל להריץ שאילתות:gcloud sql instances patch INSTANCE_ID \ --project=PROJECT_ID \ --data-api-access=ALLOW_DATA_APIמחליפים את מה שכתוב בשדות הבאים:
-
INSTANCE_ID: המזהה של המכונה של Cloud SQL ל-MySQL. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
-
הקצאת התפקידים הנדרשים ויצירת משתמש במסד הנתונים של IAM
כדי לבצע אימות באמצעות ניהול זהויות והרשאות גישה (IAM) ולהריץ בקשות queryData בתצוגות מאובטחות עם פרמטרים, צריך להגדיר את המשתמש או את חשבון השירות ב-IAM:
מקצים את תפקידי ה-IAM הבאים ל-
IAM_USER_EMAILבפרויקט ב- Google Cloud :roles/geminidataanalytics.queryDataUserroles/serviceusage.serviceUsageConsumerroles/cloudsql.instanceUser
מידע נוסף על הקצאת תפקידי IAM זמין במאמר הוספת קישור למדיניות IAM בפרויקט.
מפעילים אימות של מסד נתונים ב-IAM במכונה של Cloud SQL ומוסיפים את
IAM_USER_EMAILכמשתמש של מסד נתונים ב-IAM במכונה. צריך ליצור את משתמש מסד הנתונים הזה ב-IAM לפני שנותנים לו את התפקידpsv_userבמסד הנתונים. מידע נוסף על הגדרת משתמשים במסד נתונים של IAM זמין במאמר ניהול משתמשים באמצעות אימות של מסד נתונים ב-IAM.
הכנת הסביבה
כדי להתכונן להרצת שאילתות בתצוגה מאובטחת עם פרמטרים, צריך להגדיר את מסד הנתונים, את התפקידים במסד הנתונים ואת הסכימה של האפליקציה.
הפעלת הדגל לניהול מסד הנתונים
- מוודאים שבמכונה של Cloud SQL ל-MySQL פועלת גרסה 8.0.43 או גרסה חדשה יותר. אם במכונה של Cloud SQL ל-MySQL 8.0 פועלת גרסה משנית קודמת, אתם יכולים לשדרג לגרסה משנית חדשה יותר.
- מפעילים את הדגל לניהול מסד הנתונים
cloudsql_parameterized_secure_viewבמכונה. השינוי הזה בדגל לא מחייב הפעלה מחדש של מסד הנתונים. מידע נוסף זמין במאמר הגדרת דגלים לניהול מסד נתונים של מכונה.
הגדרת מסד הנתונים והתפקידים
נכנסים לדף Cloud SQL במסוף Google Cloud .
בוחרים מכונה מהרשימה.
בתפריט הניווט, לוחצים על Cloud SQL Studio.
נכנסים ל-Studio באמצעות חשבון משתמש עם הרשאת אדמין.
לוחצים על אימות. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
לוחצים על New SQL editor tab או על New tab כדי לפתוח כרטיסייה חדשה.
יוצרים מסד נתונים בשם
store_dbבשביל הנתונים והתצוגות של האפליקציה:CREATE DATABASE IF NOT EXISTS store_db; USE store_db;יוצרים תפקיד חדש במסד הנתונים כדי להריץ שאילתות בתצוגות עם פרמטרים. האפליקציה משתמשת בתפקיד הזה כדי להתחבר למסד הנתונים ולהריץ שאילתות, כשהגישה מוגבלת רק לתצוגות מורשות:
CREATE ROLE 'psv_user';
יצירת הטבלה והוספת נתונים
נכנסים לדף Cloud SQL במסוף Google Cloud .
בוחרים מכונה של Cloud SQL ל-MySQL מהרשימה.
בתפריט הניווט, לוחצים על Cloud SQL Studio.
נכנסים ל-Studio באמצעות אימות מסד נתונים.
לוחצים על New tab כדי לפתוח כרטיסייה חדשה של עורך SQL.
יוצרים את הטבלאות ומזינים נתונים:
CREATE TABLE store_db.checked_items ( bag_id INT, timestamp TIMESTAMP, loc_code CHAR(3), scan_type CHAR(1), location TEXT, customer_id INT ); INSERT INTO store_db.checked_items (bag_id, timestamp, loc_code, scan_type, location, customer_id) VALUES (101, '2023-10-26 10:00:00', 'ABC', 'I', 'Warehouse A', 123), (102, '2023-10-26 10:15:30', 'DEF', 'O', 'Loading Dock B', 456), (103, '2023-10-26 10:30:45', 'GHI', 'I', 'Conveyor Belt 1', 789), (104, '2023-10-26 11:00:00', 'JKL', 'O', 'Shipping Area C', 101), (105, '2023-10-26 11:45:15', 'MNO', 'I', 'Sorting Station D', 202), (106, '2023-10-26 12:00:00', 'PQR', 'O', 'Truck Bay E', 303);
יצירת תצוגות מאובטחות עם פרמטרים והגדרת הרשאות גישה
כדי ליצור תצוגות מאובטחות עם פרמטרים:
נכנסים לדף Cloud SQL במסוף Google Cloud .
בוחרים מכונה מהרשימה.
בתפריט הניווט, לוחצים על Cloud SQL Studio.
נכנסים ל-Studio ומתחברים למסד הנתונים של
store_dbבאמצעות חשבון המשתמש עם הרשאת האדמין, כמוrootאוADMIN_USER, שבו השתמשתם בקטע הקודם.לוחצים על אימות. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
לוחצים על New SQL editor tab או על New tab כדי לפתוח כרטיסייה חדשה.
כדי לספק גישה מוגבלת לתצוגה, יוצרים תצוגה עם פרמטרים:
CREATE VIEW store_db.secure_checked_items AS SELECT bag_id, timestamp, location FROM store_db.checked_items t WHERE customer_id = @app_end_userid;נותנים גישת SELECT לתצוגה עם הפרמטרים לתפקיד
psv_user:GRANT SELECT ON store_db.secure_checked_items TO 'psv_user';מעניקים הרשאת הפעלה לפרוצדורה המובנית של המערכת שמשמשת להרצת שאילתות שמכילות פרמטרים באופן בטוח:
GRANT EXECUTE ON PROCEDURE mysql.execute_parameterized_query TO 'psv_user';זה שינוי אופציונלי. מבטלים באופן מפורש את כל ההרשאות הישירות במסד הנתונים הטבלאי מ-
psv_userכדי לוודא שהמשתמשים לא יכולים לעקוף את התצוגה המאובטחת:REVOKE ALL PRIVILEGES ON store_db.checked_items FROM 'psv_user';מוודאים ש-
IAM_USER_EMAILנוסף למכונה כמשתמש במסד נתונים ב-IAM, ואז נותנים את התפקידpsv_userלמשתמש במסד הנתונים שאומת ב-IAM או לחשבון ההתחברות לאפליקציה:GRANT 'psv_user' TO 'IAM_USERNAME'@'%'; SET DEFAULT ROLE 'psv_user' TO 'IAM_USERNAME'@'%';מחליפים את
IAM_USERNAMEבשם המשתמש של מסד הנתונים ב-IAM או בחשבון ההתחברות לאפליקציה. בחשבון משתמש ב-IAM, Cloud SQL ל-MySQL מסיר את@ואת שם הדומיין מכתובת האימייל, לכן צריך לציין את הקידומת של כתובת האימייל לפני@, למשלuserבמקוםuser@example.com.
אימות אבטחת המידע
כדי לוודא שאתם יכולים לשלוח שאילתות לתצוגות המאובטחות עם הפרמטרים, בצעו את הפעולות הבאות:
נכנסים ל-Cloud SQL Studio באמצעות כתובת האימייל המוגבלת של IAM או פרטי ההתחברות לאפליקציה.
לוחצים על New tab כדי לפתוח כרטיסייה חדשה של עורך SQL.
שולחים שאילתה למסד הנתונים הטבלאי ומוודאים שהגישה נדחתה.
SELECT * FROM store_db.checked_items;מסד הנתונים מחזיר את השגיאה
ERROR 1142 (42000): SELECT command denied to user 'IAM_USERNAME'@'%' for table 'checked_items'.שולחים שאילתה לתצוגה המאובטחת שמכילה פרמטרים באמצעות הפרוצדורה המאוחסנת המובנית
mysql.execute_parameterized_query.CALL mysql.execute_parameterized_query( 'SELECT * FROM store_db.secure_checked_items', 'app_end_userid=303' );נכנסים ל-Google Cloud CLI בתור
IAM_USER_EMAILעל ידי הפעלתgcloud auth application-default loginכדי ש-gcloud auth application-default print-access-tokenייצור אסימון למשתמש מסד הנתונים המוגבל של IAM, ואז שולחים שאילתה לתצוגות המאובטחות עם הפרמטרים באמצעות השיטהqueryDataעם פרמטרים של PSV:curl -X POST \ "https://geminidataanalytics.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION:queryData" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "prompt": "Show me the checked items.", "context": { "datasource_references": { "cloud_sql_reference": { "database_reference": { "engine": "MYSQL", "project_id": "PROJECT_ID", "region": "REGION", "instance_id": "INSTANCE_ID", "database_id": "DATABASE_ID", "table_ids": [ "secure_checked_items" ] } } }, "parameterized_secure_view_parameters": { "parameters": [ { "key": "app_end_userid", "value": "303" } ] } }, "generation_options": { "generate_query_result": true, "generate_natural_language_answer": true, "generate_explanation": true } }'משתמשים בשדה
table_idsב-database_referenceכדי לוודא ש-QueryDataיוצר SQL רק בתצוגה המאובטחת עם הפרמטרים שלsecure_checked_items. אם משמיטים אתtable_idsולתפקיד במסד הנתונים יש גישתSELECTלמסד הנתונים הטבלאיchecked_items, יכול להיות ש-QueryDataישלח שאילתה ישירות למסד הנתונים הטבלאי, בלי לעבור דרך התצוגה המאובטחת.מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
REGION: האזור שבו נמצא המכונה של Cloud SQL ל-MySQL. -
INSTANCE_ID: המזהה של המכונה של Cloud SQL ל-MySQL. -
DATABASE_ID: המזהה של מסד הנתונים של Cloud SQL ל-MySQL, שהואstore_dbבמדריך הזה.
-
הסרת המשאבים
מחיקת המכונה
כשמוחקים את המכונה שיצרתם בקטע לפני שמתחילים, נמחקים גם כל האובייקטים שיצרתם.
נכנסים לדף Cloud SQL במסוף Google Cloud .
בוחרים מכונה מהרשימה.
לוחצים על Delete.
כדי לאשר שרוצים למחוק את המכונה, מזינים את שם המכונה ולוחצים על Delete.