אבטחה ברמת השורה ב-BigQuery עם שירותים מתקדמים

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

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

דרישות

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

מגבלות

  • תחילה נדרשת למרכז הבקרה הרשאה חד-פעמית מכל צופה צפייה.
  • הצופים לא יכולים לערוך את מרכז הבקרה או לשתף אותם עם אחרים.
  • אם אתם לקוחות של Workspace והאדמין שלכם השבית את השיתוף קובצי Drive אל 'כל מי שיש לו קישור', מסירים את השיתוף הגבלה או לפתח פתרון בחשבון Gmail.com.

פתרון

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

יצירת מחבר קהילה חדש

קוראים את המאמר איך פועלים מחברים של קהילות והשלימו את מחבר הקהילה Codelab כדי להתחיל. משתמשים בכלי למפתחים ליצירת מחברים כדי תהליך פיתוח מהיר וקל יותר.

כתיבת קוד המחבר

  1. הפונקציה getAuthType() צריכה להחזיר NONE.
  2. getConfig() צריך להחזיר הגדרה ריקה.
    • אופציונלי: אם אתם צריכים פרטי קלט ספציפיים להגדרת מרכז הבקרה, יש אפשרות לבקש כאן קלט ממשתמשים.
  3. getSchema() צריך להחזיר את הסכימה של השאילתה.
    • אופציונלי: אפשר להוסיף שדות וחישובים בהתאמה אישית ב-SQL או להשתמש בשדות מחושבים כחלק מהסכימה.
  4. הבדיקה של getData() תושלם בשלב מאוחר יותר.

עדכון המניפסט

צפייה בהפניה למניפסט והשלמת כל המניפסט הנדרש מידע, כולל:

  1. להגדיר את dataStudio.forceViewersCredentials להיות true.
  2. להגדיר את dataStudio.advancedServices.data להיות true.
  3. עבור oauthScopes מוסיפים את https://www.googleapis.com/auth/userinfo.email וגם https://www.googleapis.com/auth/script.external_request. להרשאות מידע נוסף על היקף ההרשאות ל-Apps Script
    • מותנה: הוספה של כל היקפי ההרשאות הרלוונטיים לשירותים שבהם נעשה שימוש למחבר.

המניפסט אמור להיראות כך:

{
  ...
  "dataStudio": {
    "forceViewersCredentials": true,
    "advancedServices": {
       "data": true
    },
    ...
  }
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/userinfo.email"
    ],
  ...
}

הטמעת חשבון שירות

  1. יצירה של חשבון שירות בפרויקט ב-Google Cloud. זה יהיה של הפרויקט לחיוב.
  2. צריך לוודא שלחשבון השירות הזה יש גישה ל-BigQuery בפרויקט בענן.
    • תפקידי ניהול הזהויות והרשאות הגישה (IAM): BigQuery Data Viewer, BigQuery Job User
  3. מורידים את קובץ ה-JSON כדי לקבל את המפתחות של חשבונות השירות. אחסון המפתחות ב מאפייני הסקריפט של פרויקט המחבר שלכם.
  4. הכללה של ספריית OAuth2 ל-Apps Script בפרויקט Apps Script.
  5. מטמיעים את קוד OAuth2 הנדרש לחשבון השירות:
    var SERVICE_ACCOUNT_CREDS = 'SERVICE_ACCOUNT_CREDS';
    var SERVICE_ACCOUNT_KEY = 'private_key';
    var SERVICE_ACCOUNT_EMAIL = 'client_email';
    var BILLING_PROJECT_ID = 'project_id';
    
    /**
     * Copy the entire credentials JSON file from creating a service account in GCP.
     */
    function getServiceAccountCreds() {
      return JSON.parse(scriptProperties.getProperty(SERVICE_ACCOUNT_CREDS));
    }
    
    function getOauthService() {
      var serviceAccountCreds = getServiceAccountCreds();
      var serviceAccountKey = serviceAccountCreds[SERVICE_ACCOUNT_KEY];
      var serviceAccountEmail = serviceAccountCreds[SERVICE_ACCOUNT_EMAIL];
    
      return OAuth2.createService('RowLevelSecurity')
        .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
        .setTokenUrl('https://accounts.google.com/o/oauth2/token')
        .setPrivateKey(serviceAccountKey)
        .setIssuer(serviceAccountEmail)
        .setPropertyStore(scriptProperties)
        .setCache(CacheService.getScriptCache())
        .setScope(['https://www.googleapis.com/auth/bigquery.readonly']);
    }
    

יישום של getData()

  1. בונים את שאילתת BigQuery.
    • מחפשים את המיפוי בין האימייל לבין הנתונים.
    • כדי לסנן את הנתונים, משתמשים במשפט JOIN ו/או במשפט WHERE.
  2. לקבל את כתובת האימייל של המשתמש בפועל (חומר עזר בנושא זהות המשתמש).
  3. להשתמש ב-Looker Studio Advanced Services כדי להחזיר את הגדרות השאילתה. מ-getData.
    • מעבירים את השאילתה המובנית, את פרויקט החיוב ואת חשבון השירות אסימון OAuth.
    • מותנה: אם אתם מקבלים קלט של משתמשים דרך המחבר getConfig, צריך לשלב את הקלט כפרמטרים של BigQuery.

יצירת מרכז הבקרה

  1. הסבר על האופן שבו פועלות פריסות וגרסאות עבור מחברים.
  2. יוצרים פריסת ייצור עבור המחבר.
  3. שימוש בפריסה בסביבת הייצור כדי ליצור מקור נתונים ודוח חדש ב- Looker Studio.
  4. הוספת כל הטבלאות והתרשימים בדוח.
  5. מרכז הבקרה מוכן עכשיו לשיתוף עם המשתמשים שלך.

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

  1. שיתוף סקריפט המחבר עם המשתמשים שנבחרו או עם האפשרות 'כולם' עם קישור".
  2. שיתוף מרכז הבקרה עם משתמשים נבחרים או עם 'כל מי שיש לו את מרכז הבקרה "link".
  3. אופציונלי: משתמשים בשירות לקיצור כתובות ה-URL כדי ליצור קישור קצר כתובת ה-URL של מרכז הבקרה. משתפים את כתובת ה-URL המקוצרת עם המשתמשים. זה עוזר להחליף את כתובת האתר של מרכז הבקרה מאוחר יותר, אם יהיה צורך.
  4. אופציונלי: למדוד את השימוש במרכז הבקרה על ידי הגדרת Google Analytics עבור לדוח שלך.

קוד לדוגמה