כדי לעזור לכם להשיג מצב אבטחה חזק במשאבים של AlloyDB ל-PostgreSQL, כדאי לפעול לפי השיטות המומלצות שמפורטות בדף הזה.
מניעת פריצה לנתיב החיפוש
כדי למנוע חטיפה של נתיב החיפוש, צריך להגדיר את הפרמטר search_path לערך pg_catalog למשתמשים עם הרשאות גבוהות. ההגדרה הזו מאבטחת את נתיב החיפוש, כך שסכימות לא מהימנות כמו public נעקפות.
כדי להגדיר את הפרמטר הזה באופן קבוע למשתמש, מריצים את הפקודה הבאה:
ALTER ROLE USER_NAME SET search_path = pg_catalog,pg_temp;
כדי להגדיר את הפרמטר הזה רק לסשן הנוכחי, מריצים את הפקודה הבאה:
SET search_path TO pg_catalog,pg_temp;
כדי להגדיר את הפרמטר הזה לכל המשתמשים כשהם מחוברים למסד נתונים, מריצים את הפקודה הבאה:
ALTER DATABASE DB_NAME SET search_path TO schema1, schema2, public;
למידע נוסף על אבטחת הסכימה public, קראו את המאמר של PostgreSQL בנושא שימוש מאובטח בסכימה ואת המדריך בנושא CVE-2018-1058.
גישה מאובטחת לנתונים ב-BigQuery באמצעות wrapper של נתונים זרים
כשמשתמשים ב-wrapper של נתונים זרים (FDW) ב-BigQuery, כל השאילתות מ-AlloyDB ל-BigQuery מאומתות באמצעות חשבון השירות של אשכול AlloyDB. מכיוון שלחשבון השירות הזה יכולה להיות גישה למספר מערכי נתונים רגישים ב-BigQuery, חשוב מאוד למנוע ממשתמשים רגילים של מסד הנתונים למפות טבלאות לא מורשות.
כדי לאכוף גישה עם הרשאות מינימליות, הגבילו את ההרשאות של USAGE בשרת החיצוני כך שמשתמשים שאינם אדמינים לא יוכלו להריץ הצהרות CREATE FOREIGN TABLE:
הגבלת
USAGEבשרת הזר: מניעת הרשאותUSAGEמתפקידים שאינם אדמינים, וביטולUSAGEמ-PUBLICבמקרה הצורך.ריכוז יצירת הטבלאות: מאפשרים רק למנהלי מסדי נתונים, כמו משתמשים עם התפקיד
alloydbsuperuser, ליצור טבלאות חיצוניות.מתן גישה סלקטיבית: ניהול גישת קריאה באמצעות
GRANT SELECTבטבלאות חיצוניות ספציפיות.
דוגמה: הגדרת גישה עם הרשאות מינימליות
תהליך העבודה הבא מדגים איך אדמין יכול לתת למשתמש רגיל (bob) גישה מאובטחת לטבלה ספציפית ב-BigQuery, בלי לאפשר לו למפות מערכי נתונים שרירותיים:
כאדמינים, אתם יכולים ליצור את השרת החיצוני ולבטל את ההרשאות של
USAGEמ-PUBLICכדי למנוע יצירת טבלאות לא מורשות:CREATE EXTENSION IF NOT EXISTS bigquery_fdw; CREATE SERVER bq_server FOREIGN DATA WRAPPER bigquery_fdw; -- Explicitly revoke USAGE from all users to prevent unauthorized table creation REVOKE ALL ON FOREIGN SERVER bq_server FROM PUBLIC;כאדמינים, אתם צריכים ליצור מיפוי משתמשים למשתמש הרגיל:
CREATE USER MAPPING FOR bob SERVER bq_server;כאדמינים, יוצרים את הטבלה החיצונית:
-- Because 'bob' does not have USAGE on bq_server, only the administrator can run this. CREATE FOREIGN TABLE example_table ( id INT, state VARCHAR ) SERVER bq_server OPTIONS ( project 'BIGQUERY_PROJECT_ID', dataset 'BIGQUERY_DATASET_NAME', table 'example_table' );כאדמינים, אתם יכולים לתת למשתמש הרגיל גישת קריאה סלקטיבית לטבלה החיצונית הספציפית:
GRANT SELECT ON public.example_table TO bob;