במדריך הזה מוסבר איך להשתמש בתצוגות מאובטחות עם פרמטרים ב-AlloyDB ל-PostgreSQL כדי להגביל את גישת המשתמשים לטבלאות במסד הנתונים. במדריך הזה, תגדירו תצוגות מאובטחות עם פרמטרים, תקבעו הרשאות ותפקידים במסד הנתונים כדי להגביל את הגישה לטבלאות הבסיסיות, ותאמתו את אבטחת הנתונים. תצוגות מאובטחות עם פרמטרים עוזרות לאבטח אפליקציות שמשתמשות בשאילתות בשפה טבעית שנוצרות באמצעות QueryData API.
הדוגמאות שמופיעות כאן נועדו להמחשה בלבד, כדי להציג את היכולות של תצוגות מאובטחות עם פרמטרים.
מהן תצוגות מאובטחות עם פרמטרים?
כשיטה מומלצת כללית, האפליקציה שלכם צריכה לפעול באמצעות חשבון שירות עם גישה מינימלית נדרשת למסד הנתונים. לדוגמה, אם האפליקציה לא אמורה לכתוב למסד הנתונים, היא צריכה להשתמש בתפקיד עם גישה לקריאה בלבד. את אמצעי בקרת הגישה האלה צריך להגדיר ברמת מסד הנתונים.
עם זאת, יש מקרים שבהם האפליקציה שלכם צריכה אמצעי אבטחה מפורטים יותר מאלה שמותרים בגישה רגילה ברמת מסד הנתונים. תצוגות מאובטחות עם פרמטרים מספקות אבטחת מידע של אפליקציות ובקרת גישה לשורות באמצעות תצוגות SQL. הן עוזרות לוודא שמשתמשי האפליקציה יכולים לראות רק את הנתונים שיש להם הרשאה לגשת אליהם.
תצוגות מאובטחות עם פרמטרים מצמצמות את הסיכונים הביטחוניים בטיפול בשאילתות אד-הוק או בשאילתות בשפה טבעית שנוצרו על ידי מודלים גדולים של שפה (LLM). הן עושות זאת על ידי הוספת פרמטרים לתצוגות עם מזהים של משתמשי קצה, כדי להבטיח שהמשתמשים יוכלו לגשת רק לנתונים שהם מורשים לגשת אליהם, בלי קשר לניסוח השאילתה. הגישה הזו גם מפשטת את ניהול המשתמשים, כי היא מאפשרת לתפקיד יחיד במסד הנתונים לשרת את כל משתמשי האפליקציה בצורה מאובטחת, בלי צורך ליצור תפקידים נפרדים במסד הנתונים לכל משתמש כדי לאכוף אבטחה ברמת השורה.
מטרות
- יצירה של תצוגות פרמטריות מאובטחות עם פרמטרים בעלי שם.
- יוצרים את תפקיד מסד הנתונים שבו האפליקציה משתמשת כדי להתחבר למסד הנתונים ולגשת לתצוגות מאובטחות עם פרמטרים.
- נותנים לתפקיד החדש הרשאות לתצוגות המאובטחות ומבטלים את הגישה לטבלאות הבסיס.
- מתחברים באמצעות התפקיד החדש ומוודאים שאי אפשר לגשת לטבלאות המוגבלות.
- מריצים שאילתות בתצוגה המאובטחת עם הפרמטרים באמצעות הפונקציה
execute_parameterized_queryאו באמצעות QueryData API.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
משתמשים חדשים ב- Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.
כדי להימנע מחיובים נוספים, מוחקים את המשאבים שיצרתם כשמסיימים את המשימות שמתוארות במסמך הזה. מידע נוסף זמין במאמר בנושא הסרת המשאבים.
לפני שמתחילים
לפני שיוצרים קבוצת הקשרים, צריך לוודא שמתקיימות הדרישות המוקדמות הבאות.
הפעלת החיוב וממשקי ה-API הנדרשים
במסוף Google Cloud , בוחרים פרויקט.
מפעילים את Cloud APIs שנדרשים כדי ליצור מכונת AlloyDB ל-PostgreSQL ולהתחבר אליה.
- בשלב אישור הפרויקט, לוחצים על הבא כדי לאשר את שם הפרויקט שרוצים לבצע בו שינויים.
בשלב Enable APIs (הפעלת ממשקי API), לוחצים על Enable (הפעלה) כדי להפעיל את ממשקי ה-API הבאים:
- AlloyDB ל-PostgreSQL API
- Knowledge Catalog API
יצירה של מסד נתונים וחיבור אליו
הכנת הסביבה
כדי להתכונן להרצת שאילתות בתצוגה מאובטחת עם פרמטרים, צריך להגדיר את מסד הנתונים, את התפקידים במסד הנתונים, את התוסף parameterized_view ואת סכימת האפליקציה.
הפעלת התוסף הנדרש
מפעילים את דגל מסד הנתוניםparameterized_views.enabled, שטוען את ספריות התוספים הנדרשות. מידע נוסף מופיע במאמר בנושא הגדרת דגלים של מסד נתונים במופע.
הגדרת מסד הנתונים
- יוצרים מסד נתונים בשם
databaseלנתוני האפליקציה ולתצוגות עם פרמטרים. מידע נוסף זמין במאמר יצירת מסד נתונים.
יצירה של תפקידים במסד הנתונים, התוסף וסכימת האפליקציה
נכנסים לדף AlloyDB במסוף Google Cloud .
בוחרים אשכול מהרשימה.
בתפריט הניווט, לוחצים על AlloyDB Studio.
נכנסים ל-Studio באמצעות אימות postgres.
לוחצים על אימות. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
לוחצים על New SQL editor tab או על New tab כדי לפתוח כרטיסייה חדשה.
יוצרים את התוסף
parameterized_viewsבמסד הנתונים.-- Requires parameterized_views.enabled set to true CREATE EXTENSION parameterized_views;כשיוצרים את התוסף, המערכת יוצרת גם סכימה בשם
parameterized_viewsכדי שממשקי ה-API ייכללו במרחב השמות של הסכימה הזו, וכדי שממשקי ה-API האלה לא יתנגשו עם ממשקי API קיימים.נכנסים כמשתמש עם הרשאות סופר-משתמש, כמו משתמש postgres המובנה. אם רוצים ליצור משתמש על חדש, למשל
admin_user, מריצים את הפקודות הבאות:CREATE ROLE admin_user WITH LOGIN PASSWORD '...'; GRANT ALL PRIVILEGES ON DATABASE database TO admin_user;מידע נוסף זמין במאמר
CREATE USER.יוצרים תפקיד חדש במסד הנתונים להרצת שאילתות מול תצוגות מאובטחות עם פרמטרים. זהו תפקיד ב-AlloyDB שהאפליקציה משתמשת בו כדי להתחבר למסד הנתונים ולהיכנס אליו כדי להריץ שאילתות עם גישה מוגבלת לפונקציות או לאובייקטים ציבוריים, לסט המינימלי הנדרש.
CREATE ROLE psv_user WITH LOGIN PASSWORD '...';מידע נוסף זמין במאמר
CREATE USER.מתחברים בתור משתמש עם הרשאות אדמין.
SET role TO admin_user;יוצרים את הסכימה שמכילה את הטבלאות.
CREATE SCHEMA schema;יוצרים את הטבלאות ומזינים נתונים.
CREATE TABLE store.checked_items(bag_id INT,timestamp TIMESTAMP, loc_code CHAR(3), scan_type CHAR(1), location TEXT, customer_id INT); INSERT INTO store.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);
יצירת תצוגות מאובטחות עם פרמטרים והגדרת הרשאות גישה
כדי ליצור תצוגות פרמטריות מאובטחות ולהגדיר הרשאות גישה מתאימות לטבלת הבסיס ולתצוגות, פועלים לפי השלבים הבאים:
נכנסים לדף AlloyDB במסוף Google Cloud .
בוחרים אשכול מהרשימה.
בתפריט הניווט, לוחצים על AlloyDB Studio.
נכנסים ל-Studio ומתחברים ל-
databaseבתורadmin_user.לוחצים על אימות. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
לוחצים על New SQL editor tab או על New tab כדי לפתוח כרטיסייה חדשה.
כדי לספק גישה מוגבלת לתצוגה, יוצרים תצוגה מאובטחת עם פרמטרים:
CREATE VIEW store.secure_checked_items WITH (security_barrier) AS SELECT bag_id, timestamp, location FROM store.checked_items t WHERE customer_id = $@app_end_userid;נותנים גישה לתצוגה.
GRANT SELECT ON store.secure_checked_items TO psv_user;כדי לגשת לתצוגה, צריך לתת גישה לסכימה.
GRANT USAGE ON SCHEMA store TO psv_user;ביטול גישה ישירה לטבלת הבסיס.
REVOKE ALL PRIVILEGES ON store.checked_items FROM psv_user;נכנסים בתור אדמין
admin_userומעניקים את התפקידpsv_userלמשתמש שאומת באמצעות IAMGRANT psv_user TO "IAM_USER_EMAIL";מחליפים את
IAM_USER_EMAILבכתובת האימייל של המשתמש ב-IAM.
אימות אבטחת מידע
כדי לוודא שהתצוגות המאובטחות עם הפרמטרים מגבילות את הגישה לתצוגות המיועדות, צריך להיכנס למסד הנתונים בתור המשתמש שאומת באמצעות IAM. ב-AlloyDB, משתמשי IAM מקבלים בירושה את ההרשאות של תפקידי מסד הנתונים שהוקצו להם.
נכנסים למסד הנתונים בתור משתמש שאומת באמצעות IAM.
מוודאים שאי אפשר לגשת לטבלת הבסיס.
SELECT * FROM store.checked_items; ERROR: permission denied for table checked_itemsאפשר לגשת לתצוגה מאובטחת עם פרמטרים באמצעות הפונקציה
execute_parameterized_query:SELECT * FROM parameterized_views.execute_parameterized_query( query => 'SELECT * from store.secure_checked_items', param_names => ARRAY ['app_end_userid'], param_values => ARRAY ['303'] );מריצים שאילתה על התצוגה המאובטחת עם פרמטרים באמצעות תחביר SQL ובקשת
QueryDataעם פרמטרים של PSV.
curl -X POST \
"https://geminidataanalytics.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION:queryData" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{
"prompt": "Show me the checked items.",
"context": {
"datasource_references": {
"alloydb": {
"database_reference": {
"project_id": "PROJECT_ID",
"region": "REGION",
"cluster_id": "CLUSTER_ID",
"instance_id": "INSTANCE_ID",
"database_id": "DATABASE_ID"
}
}
},
"parameterized_secure_view_parameters": {
"parameters": {
"app_end_userid": "303"
}
}
},
"generation_options": {
"generate_query_result": true,
"generate_natural_language_answer": true,
"generate_explanation": true
}
}'מחליפים את הערכים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
REGION: האזור שבו נמצאת מכונת AlloyDB ל-PostgreSQL. -
CLUSTER_ID: מזהה אשכול AlloyDB ל-PostgreSQL. -
INSTANCE_ID: המזהה של מכונת AlloyDB ל-PostgreSQL. -
DATABASE_ID: המזהה של מסד הנתונים שלכם ב-AlloyDB ל-PostgreSQL.
הסרת המשאבים
מחיקת האשכול
כשמוחקים את האשכול שיצרתם בקטע לפני שמתחילים, נמחקים גם כל האובייקטים שיצרתם.
נכנסים לדף AlloyDB במסוף Google Cloud .
בוחרים אשכול מהרשימה.
לוחצים על מחיקת האשכול.
בקטע Delete cluster (מחיקת אשכול), מזינים את שם האשכול כדי לאשר שרוצים למחוק אותו.
המאמרים הבאים
- מידע נוסף על תצוגות מאובטחות עם פרמטרים
- כך מנהלים את אבטחת נתוני האפליקציות באמצעות תצוגות מאובטחות עם פרמטרים.