גישה מאובטחת לנתוני האפליקציה ושליטה בהם

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

במדריך הזה מוסבר איך מגדירים תצוגות מאובטחות עם פרמטרים ב-Cloud SQL, איך מגדירים תפקידים והרשאות במסד הנתונים כדי להגביל את הגישה לטבלאות הבסיסיות ואיך מאמתים את אבטחת הנתונים. הדוגמאות שמפורטות במסמך הזה הן להמחשה בלבד.

מהן תצוגות מאובטחות עם פרמטרים?

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

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

לשימוש בתצוגות מאובטחות עם פרמטרים יש שני יתרונות עיקריים:

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

מטרות

  • יצירה של תצוגות מאובטחות עם פרמטרים, עם פרמטרים בעלי שם.
  • יוצרים את תפקיד מסד הנתונים שבו האפליקציה משתמשת כדי להתחבר למסד הנתונים ולגשת לתצוגות מאובטחות עם פרמטרים.
  • נותנים לתפקיד החדש הרשאות לתצוגות המאובטחות עם הפרמטרים ומבטלים את הגישה לטבלאות הבסיס.
  • מתחברים באמצעות התפקיד החדש ומוודאים שאי אפשר לגשת לטבלאות המוגבלות.
  • מריצים שאילתות בתצוגות המאובטחות עם הפרמטרים באמצעות הפונקציה execute_parameterized_query() או באמצעות QueryData API.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

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

משתמשים חדשים ב- Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

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

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

הפעלת החיוב וממשקי ה-API הנדרשים

  1. במסוף Google Cloud , בוחרים פרויקט.

    כניסה לדף לבחירת הפרויקט

  2. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  3. מפעילים את ממשקי Cloud API שנדרשים כדי ליצור חיבור ל-Cloud SQL.

    1. הפעלת ה-API

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

    3. בשלב Enable APIs (הפעלת ממשקי API), לוחצים על Enable (הפעלה) כדי להפעיל את ממשקי ה-API הבאים:

      • Cloud SQL for PostgreSQL API
      • Knowledge Catalog API

יצירה של מסד נתונים וחיבור אליו

  1. יצירת מופע
  2. מתחברים למופע ויוצרים מסד נתונים.

הכנת הסביבה

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

הפעלת הדגל של מסד הנתונים

מפעילים את דגל מסד הנתונים cloudsql.enable_parameterized_views, שמאפשר לטעון את ספריות התוספים הנדרשות. מידע נוסף זמין במאמר בנושא הגדרת דגלים של מסד נתונים במופע.

הגדרת מסד הנתונים

  • יוצרים מסד נתונים בשם database לנתוני האפליקציה ולתצוגות מאובטחות עם פרמטרים. מידע נוסף זמין במאמר יצירת מסד נתונים.

יצירה של תפקידים במסד הנתונים, התוסף וסכימת האפליקציה

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

    מעבר אל Cloud SQL

  2. בוחרים מופע מהרשימה.

  3. בתפריט הניווט, לוחצים על Cloud SQL Studio.

  4. נכנסים ל-Studio באמצעות אימות postgres.

  5. לוחצים על אימות. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.

  6. לוחצים על New SQL editor tab או על New tab כדי לפתוח כרטיסייה חדשה.

  7. כדי להשתמש בתצוגות עם פרמטרים, צריך ליצור את התוסף parameterized_views במסד הנתונים:

    -- Requires parameterized_views.enabled set to true
    CREATE EXTENSION parameterized_views;
    

    כשיוצרים את התוסף, מסד הנתונים יוצר גם סכימה בשם parameterized_views, כדי שממשקי ה-API ייכללו במרחב השמות של הסכימה הזו, וכדי שממשקי ה-API האלה לא יתנגשו עם ממשקי API קיימים.

  8. נכנסים לחשבון בתור משתמש עם הרשאות סופר-משתמש, כמו משתמש postgres המובנה.

  9. יוצרים תפקיד חדש במסד הנתונים להרצת שאילתות על תצוגות מאובטחות עם פרמטרים. זהו תפקיד ב-Cloud SQL שהאפליקציה משתמשת בו כדי להתחבר למסד הנתונים ולהיכנס אליו כדי להריץ שאילתות עם גישה מוגבלת לפונקציות או לאובייקטים ציבוריים, לסט המינימלי הנדרש.

    CREATE ROLE psv_user WITH LOGIN PASSWORD '...';
    

    מידע נוסף זמין במאמר CREATE USER.

  10. מתחברים בתור משתמש עם הרשאות אדמין.

    SET role TO postgres;
    
  11. יוצרים את הסכימה שמכילה את הטבלאות.

    CREATE SCHEMA store;
    
  12. יוצרים את הטבלאות ומזינים נתונים.

    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);
    

יצירת תצוגות מאובטחות עם פרמטרים והגדרת הרשאות גישה

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

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

    מעבר אל Cloud SQL

  2. בוחרים מופע מהרשימה.

  3. בתפריט הניווט, לוחצים על Cloud SQL Studio.

  4. נכנסים ל-Studio ומתחברים ל-database בתור postgres.

  5. לוחצים על אימות. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.

  6. לוחצים על New SQL editor tab או על New tab כדי לפתוח כרטיסייה חדשה.

  7. כדי לספק גישה מוגבלת לתצוגה, יוצרים תצוגה עם פרמטרים:

    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;
    

  8. נותנים גישה לתצוגה.

    GRANT SELECT ON store.secure_checked_items TO psv_user;
    
  9. כדי לגשת לתצוגה, צריך לתת גישה לסכימה.

    GRANT USAGE ON SCHEMA store TO psv_user;
    
  10. ביטול גישה ישירה לטבלת הבסיס.

    REVOKE ALL PRIVILEGES ON store.checked_items FROM psv_user;
    

    הערה: לבעלים של התצוגה עם הפרמטרים צריכות להיות הרשאות SELECT בטבלאות הבסיס. בנוסף, למשתמש בתצוגה המפורטת עם הפרמטרים צריכות להיות הרשאות USAGE בסכימה של התצוגה המפורטת והרשאות SELECT בתצוגה המפורטת. לדוגמה, למשתמש postgres יש בעלות על התצוגה המפורטת עם הפרמטרים, ולכן יש לו הרשאות SELECT בטבלאות הבסיס, בעוד שלמשתמש psv_user צריכות להיות הרשאות USAGE בסכימה store והרשאות SELECT בתצוגה המפורטת.

  11. נכנסים לחשבון בתור אדמין postgres ומעניקים את התפקיד psv_user למשתמש שעבר אימות ב-IAM:

    GRANT psv_user TO "IAM_USER_EMAIL";
    

    מחליפים את IAM_USER_EMAIL בכתובת האימייל של המשתמש ב-IAM.

אימות אבטחת מידע

כדי לוודא שהתצוגות המאובטחות עם הפרמטרים מגבילות את הגישה לתצוגות המיועדות, צריך להיכנס למסד הנתונים כמשתמש שאומת באמצעות IAM. ב-Cloud SQL, משתמשי IAM יורשים את ההרשאות של תפקידי מסד הנתונים שהוקצו להם.

  1. נכנסים למסד הנתונים בתור משתמש שאומת באמצעות IAM.

  2. מוודאים שאי אפשר לגשת לטבלת הבסיס.

    SELECT * FROM store.checked_items;
    ERROR:  permission denied for table checked_items
    
  3. אפשר לגשת לתצוגות מאובטחות עם פרמטרים באמצעות הפונקציה 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']
    );
    
    1. מריצים שאילתה על התצוגות המאובטחות עם פרמטרים באמצעות תחביר 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": {
                "cloud_sql_reference": {
                  "database_reference": {
                    "engine": "POSTGRESQL",
                    "project_id": "PROJECT_ID",
                    "region": "REGION",
                    "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: האזור שבו ממוקם מופע Cloud SQL ל-PostgreSQL.
      • INSTANCE_ID: המזהה של מופע Cloud SQL ל-PostgreSQL.
      • DATABASE_ID: המזהה של מסד הנתונים שלכם ב-Cloud SQL ל-PostgreSQL.

    הסרת המשאבים

    מחיקת האשכול

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

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

      מעבר אל Cloud SQL

    2. בוחרים מופע מהרשימה.

    3. לוחצים על Delete.

    4. כדי לאשר שרוצים למחוק את המופע, מזינים את שם המופע ולוחצים על מחיקה.