ביקורת ב-PostgreSQL באמצעות pgAudit

בדף הזה מוסבר על ביקורת במסד נתונים באמצעות התוסף pgAudit, שעוזר להגדיר הרבה מהיומנים שנדרשים לעיתים קרובות כדי לעמוד בדרישות של אישורים ממשלתיים, פיננסיים ושל ISO.

מידע כללי על תוספים של PostgreSQL ב-Cloud SQL זמין במאמר בנושא תוספים של PostgreSQL.

סקירה כללית

אפשר לבצע ביקורת על מסד נתונים ב-Cloud SQL ל-PostgreSQL באמצעות התוסף pgAudit בקוד פתוח.

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

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

מידע נוסף על יומני ביקורת ב-Cloud SQL זמין בדף יומני ביקורת.

הגדרת ביקורת מסד נתונים ב-Cloud SQL

השלבים לרישום ביומן הביקורת באמצעות התוסף pgAudit כוללים:

  1. הפעלת הדגל cloudsql.enable_pgaudit ב-Cloud SQL.
  2. הפעלת פקודה ליצירת התוסף pgAudit.
  3. הגדרת ערכים לדגל pgaudit.log.

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

הגדרת ביקורת

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

הסימון הראשוני להפעלת ביקורת

ב-Cloud SQL, משתמשים בדגלים של מסד הנתונים להרבה פעולות, כולל התאמת פרמטרים של PostgreSQL והגדרת מכונה. הדגל cloudsql.enable_pgaudit מאפשר ביקורת עבור מופע מסוים של מסד נתונים. אפשר לשנות את הערך של הדגל cloudsql.enable_pgaudit באמצעות המסוף Google Cloud או באמצעות הפקודה gcloud.

כדי להפעיל את הדגל cloudsql.enable_pgaudit, מגדירים את הערך שלו ל-on באמצעות ההוראות הרגילות לשימוש בדגלים. לדוגמה, כדי להשתמש בפקודה gcloud, מציינים את הפרטים הבאים ומחליפים את שם המופע ב-[INSTANCE_NAME]:

gcloud sql instances patch [INSTANCE_NAME] --database-flags cloudsql.enable_pgaudit=on

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

מריצים את הפקודה כדי ליצור את התוסף pgAudit

אחרי שמפעילים את הדגל לניהול מסד נתונים, מריצים את הפקודה CREATE EXTENSION באמצעות לקוח psql תואם. הפקודה הבאה יוצרת את התוסף pgAudit לכל מסדי הנתונים במכונת Cloud SQL:

CREATE EXTENSION pgaudit;

הגדרת ערכים לדגל pgaudit.log

כדי להגדיר ערכים לדגל pgaudit.log, צריך להשתמש בהוראות הרגילות להגדרת דגלים.

לדוגמה, כדי להפעיל את הביקורת לכל פעולות מסד הנתונים במופע, אפשר להשתמש בפקודה gcloud הבאה:

  gcloud sql instances patch [INSTANCE_NAME] --database-flags \
  cloudsql.enable_pgaudit=on,pgaudit.log=all

הגדרת הגדרות אחרות למסד הנתונים

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

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

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

באפליקציית Logs Explorer, אפשר לראות את יומני pgAudit על ידי בחירה במסנן היומנים cloudaudit.googleapis.com/data_access.

לחלופין, אפשר להשתמש בשאילתה הבאה כדי להציג את כל יומני pgAudit של פרויקט Cloud SQL נתון:

resource.type="cloudsql_database"
logName="projects/<your-project-name>/logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry"

פורמט היומן של pgAudit

לכל רשומה ביומן pgAudit ביומני הביקורת Data Access יש שדות שמייצגים את המידע שנאסף לגבי שאילתה.

לדוגמה:

{
  protoPayload: {
    @type: "type.googleapis.com/google.cloud.audit.AuditLog"
    methodName: "cloudsql.instances.query"
    request: {
      @type: "type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry"
      auditClass: "READ"
      auditType: "SESSION"
      chunkCount: "1"
      chunkIndex: "1"
      command: "SELECT"
      database: "finance"
      databaseSessionId: 2209692
      parameter: "[not logged]"
      statement: "SELECT * FROM revenue"
      statementId: 2
      substatementId: 1
      user: "alice"
    }
  }
}

אלה תיאורים של השדות ביומני הביקורת Data Access:

  • auditClass. סוג ההצהרה שנרשמת ביומן. הערכים האפשריים הם READ,‏ WRITE,‏ FUNCTION,‏ ROLE,‏ DDL,‏ MISC ו-MISC_SET.
  • auditType. ‫SESSION או OBJECT.
  • chunkCount. פיצול יכול להתרחש בנתונים שסופקו בשדות parameter ו-statement. בשדה chunkCount מצוין המספר הכולל של חלקי המידע. כדאי לעיין גם בתיאור של השדה chunkIndex.
  • chunkIndex. מציין את מספר האינדקס של חלקי הנתונים בשדות parameter ו-statement (במאגר request הנוכחי). המספר הראשוני הוא 1. כדאי לעיין גם בתיאור של השדה chunkCount.
  • Command. לדוגמה, ALTER TABLE או SELECT.
  • פרמטר. התוכן של השדה הזה נקבע לפי השדה chunkIndex. אפשר לעיין בתיאור של השדה chunkIndex. אם הערך של pgaudit.log_parameter מוגדר, השדה parameter יכול להכיל את פרמטרים של ההצהרה כנתוני CSV עם מרכאות. אם אין פרמטרים, השדה הזה מכיל [none]. אחרת, השדה הזה מכיל את הערך [not logged].
  • statement. ההצהרה שהופעלה בקצה העורפי. התוכן של השדה statement יכול להיקבע לפי השדה chunkIndex. אפשר לעיין בתיאור של השדה chunkIndex.
  • statementId. מזהה ייחודי של הדוח עבור הסשן הזה. כל מזהה של דף פירוט מייצג קריאה לשרת הקצה העורפי. מזהי הדוחות הם עוקבים, גם אם חלק מהדוחות לא מתועדים.
  • substatementId. מזהה רציף לכל תת-דוח בתוך הדוח הראשי.

חלק מהשדות האלה מתוארים גם במסמכי התיעוד של pgAudit.

השבתת הביקורת

כדי להשבית את ביקורת מסד הנתונים, מגדירים את הערך של האפשרות cloudsql.enable_pgaudit ל-off. אפשר לשנות את הערך דרך מסוף Google Cloud או דרך הפקודה gcloud. כדי להשבית את הדגל cloudsql.enable_pgaudit, פועלים לפי ההוראות הרגילות להשבתת דגלים.

בנוסף, מריצים את הפקודה DROP EXTENSION באמצעות לקוח psql תואם, כדי להסיר את מצב התוסף:

DROP EXTENSION pgaudit;

התאמה אישית של רישום ביומן ביקורת של מסד נתונים ב-Cloud SQL

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

למידע נוסף על היכולות של התוסף, אפשר לעיין במסמכי התיעוד של pgAudit.

דרישה להרשאות של משתמש-על

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

הגדרת ביקורת לכל פעולות מסד הנתונים במופע

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

  gcloud sql instances patch [INSTANCE_NAME] --database-flags \
  cloudsql.enable_pgaudit=on,pgaudit.log=all

הגדרת פעולות ספציפיות בכל מסדי הנתונים של המופע

כדי לבצע ביקורת בכל מסדי הנתונים של המופע, אפשר להשתמש במסוףGoogle Cloud או בפקודה gcloud. לדוגמה, כדי להפעיל את הביקורת רק לפעולות קריאה וכתיבה במופע, אפשר להשתמש בפקודה gcloud הבאה. בדוגמה הזו נעשה שימוש בתחביר מבוסס-רשימה כדי לציין כמה ערכים:

  gcloud sql instances patch [INSTANCE_NAME] \
  --database-flags ^:^cloudsql.enable_pgaudit=on:pgaudit.log=read,write

הפקודה מחליפה את הדגלים הקיימים במסד הנתונים.

, ראו הגדרת דגל לניהול מסד נתונים.

הגדרת ביקורת למסד נתונים ספציפי

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

finance=> ALTER DATABASE finance SET pgaudit.log = 'read,write';

הגדרת ביקורת ליחס

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

כשמבצעים ביקורת על קשר, מוקצית הרשאת מבקר ייחודית לפרמטר pgaudit.role. כל אובייקט או קשר שמוענקים לתפקיד הזה מתועדים ביומן.

לדוגמה, כדי להגדיר ביקורת לכל השאילתות SELECT בקשר salary במסד הנתונים employee, אפשר להשתמש בפקודות הבאות:

employee=> CREATE ROLE auditor WITH NOLOGIN;
employee=> ALTER DATABASE employee SET pgaudit.role = 'auditor';
employee=> GRANT SELECT ON salary TO auditor;

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

לדוגמה, הפקודה הבאה מגדירה שיומני הביקורת יתעדכנו רק כשמתבצעת גישה לעמודות income ו-tax_status מהקשר salary:

employee=> GRANT SELECT(income, tax_status) ON salary TO auditor;

הגדרת ביקורת למשתמש במסד נתונים

אפשר להפעיל את האודיט עבור משתמש ספציפי על ידי הגדרת הפרמטר pgaudit.log ברמה של ROLE.

לדוגמה, פקודת ה-SQL הבאה מגדירה ביקורת לכל פעולות מסד הנתונים שמבוצעות על ידי המשתמש Alice:

finance=> ALTER ROLE alice SET pgaudit.log = 'all';

הסתרת נתונים רגישים ביומני ביקורת

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

יתרונות

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

איך זה עובד

כשהדגל cloudsql.pgaudit_mask_literals מוגדר לערך on, התוסף pgAudit מעבד את הצהרת ה-SQL לפני שהוא כותב אותה ליומן הביקורת. אם התוסף מזהה ערכים מילוליים בשאילתה, הוא מחליף אותם לפני שהוא רושם את השאילתה ביומן:

  • ההצהרה המקורית:

    INSERT INTO users (id, email) VALUES (123, 'sensitive@example.com');
    
  • הצהרה ביומן הביקורת, כשההסתרה מופעלת:

    INSERT INTO users (id, email) VALUES ($1, $2);
    

שימו לב שהערכים המילוליים של המזהה וכתובת האימייל מוחלפים ביומן הביקורת שמוחזר.

דרישות

  • הסימון cloudsql.pgaudit_mask_literals נתמך ב-Cloud SQL ל-PostgreSQL בגרסה 14 ואילך.
  • הדגל cloudsql.enable_pgaudit מושבת כברירת מחדל, וצריך להגדיר אותו לערך on כדי להשתמש בו.

הפעלת מיסוך

כדי להפעיל מיסוך מילולי, מגדירים את דגל מסד הנתונים cloudsql.pgaudit_mask_literals לערך on. אפשר להגדיר פלאגים של מסד נתונים באמצעות מסוף Google Cloud , ה-CLI של gcloud או Cloud SQL Admin API.

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

gcloud sql instances patch INSTANCE_NAME \
  --database-flags cloudsql.enable_pgaudit=on,cloudsql.pgaudit_mask_literals=on

מחליפים את INSTANCE_NAME בשם המכונה.

השבתת ההסתרה

כדי להשבית את ההסתרה המילולית, מגדירים את הדגל cloudsql.pgaudit_mask_literals לערך off.

gcloud sql instances patch INSTANCE_NAME \
  --database-flags cloudsql.enable_pgaudit=on,cloudsql.pgaudit_mask_literals=off

מחליפים את INSTANCE_NAME בשם המכונה.

טיפים לניהול ביקורת ב-Cloud SQL

כשמתאימים אישית את התנהגות הביקורת, חשוב לזכור את הנקודות הבאות:

  • כשמשביתים את הדגל של מסד הנתונים cloudsql.enable_pgaudit, רישום הביקורת ביומן נפסק באופן מיידי. עם זאת, ההגדרות של pgAudit שהוחלו (לדוגמה, הגדרות הפרמטר pgaudit.log) נשמרות, אלא אם הן מוסרות באופן מפורש.
  • הפעלה מחדש של מופע מסד הנתונים מתבצעת בכל פעם שמשנים את ערך הדגל של מסד הנתונים עבור cloudsql.enable_pgaudit.
  • למשתמשי מסד נתונים שנוצרו באמצעות פקודות CREATE ROLE מפורשות אין הרשאה לשנות את הגדרות הביקורת. רק משתמשי מסד נתונים שנוצרו באמצעות הפקודה gcloud במסוף Google Cloud יכולים לשנות את הגדרות הביקורת.
  • כשמפעילים גם רישום ביומן ביקורת של סשנים וגם רישום ביומן ביקורת של אובייקטים, ההצהרות שקשורות לשניהם מתווספות ליומנים. רישום ביומן של סשנים ורישום ביומן של אובייקטים לא מבטלים או משנים אחד את השני.

מגבלות של התוסף pgAudit ב-Cloud SQL ל-PostgreSQL

יומני ביקורת נכתבים באופן זמני לדיסק של המופע שלהם, ותופסים מקום בדיסק לפני שהיומנים נשלחים ל-Cloud Logging. לכן, לפני שמשתמשים בתכונה הזו, חשוב לעיין בכל המידע הבא:

  • קצב ההטמעה של היומן הוא 4MB לשנייה. אם העומס שנובע מיצירת יומנים חורג מקצב ההטמעה, יכולות לקרות הבעיות הבאות:
    • יכולה להיות צמיחה לא רצויה בשימוש בדיסק.
    • יכול להיות שלא יהיה יותר מקום בכונן.
  • אם הפעלתם את התכונה הזו ואתם מריצים הרבה שאילתות שעומדות בקריטריונים של הביקורת, השימוש בדיסק יכול לגדול מהר מדי.
  • לפני שמשתמשים בתכונה הזו, כדאי לתכנן את הפעולות הבאות:
    • הפעלת הגדלות אוטומטיות של נפח האחסון
    • עוקבים אחרי השימוש הכולל בדיסק. אי אפשר לעקוב בנפרד אחרי העומס שנוצר מהפקת היומנים. משתמשים במדד cloudsql.googleapis.com/database/disk/utilization בMetrics Explorer.
    • במקרה הצורך, אפשר להקטין את השימוש בדיסק על ידי הפעלת פחות שאילתות או צמצום הביקורת.
  • אם לא נשאר יותר מקום בדיסק, יכול להיות שיומני הביקורת של חלק מהשאילתות יאבדו.

המאמרים הבאים