الأمان على مستوى صف BigQuery باستخدام "الخدمات المتقدّمة"

على سبيل المثال، لنفترض أنّك تحاول إنشاء حلّ لمبيعاتك. التنظيم. تنقسم مؤسسة المبيعات إلى مناطق متعددة تكون فيها كل للمنطقة لديها مدير إقليمي خاص بها. مجموعة بيانات المبيعات في BigQuery بها مبيعات المبلغ حسب المنطقة والتاريخ.

سيتضمن الحل المقترح لوحة تحكم واحدة يمكن فيها للمديرين الإقليميين يمكنهم عرض بيانات المبيعات لمناطقهم فقط.

المتطلبات

  • سيتم تسجيل دخول مشاهدي لوحة البيانات من خلال حساب Google.
  • يتوفّر ربط بين عنوان البريد الإلكتروني للمستخدم والبيانات/الصفوف المتوفّرة لديه. الوصول إليه.
  • سيتم استخدام حساب خدمة للوصول إلى بيانات BigQuery. ومن هنا يأتي دور الفوترة مركزية وإدارتها من قبل مزود لوحة المعلومات.

القيود

  • تتطلب لوحة البيانات الحصول على تفويض لمرة واحدة من كل مشاهد في البداية مشاهدة.
  • ولا يمكن للمشاهدين تعديل لوحة البيانات أو مشاركتها مع الآخرين.
  • إذا كنت أحد عملاء Workspace وقد أوقف المشرف ميزة المشاركة ملفات Drive إلى "أي شخص لديه رابط"، أو إزالة المشاركة تقييد أو تطوير الحل على حساب Gmail.com.

الحل

أكمِل جميع الخطوات التالية لتنفيذ الحلّ.

إنشاء رابط منتدى جديد

راجِع آلية عمل موصِّلات المنتدى وأكمِل Community Connector. الدرس التطبيقي حول الترميز للبدء. استخدم أداة المطوِّر لإنشاء الموصلات عملية تطوير أسرع وأسهل.

كتابة رمز الموصِّل

  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 مراجعة التفويض نطاقات برمجة التطبيقات لمزيد من المعلومات.
    • مشروط: أضِف جميع النطاقات ذات الصلة للخدمات المستخدَمة في وصلة البيانات.

يجب أن يظهر البيان على النحو التالي:

{
  ...
  "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 لبرمجة التطبيقات في مشروع "برمجة تطبيقات Google"
  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 المتقدمة لعرض إعدادات طلب البحث من getData.
    • تمرير الاستعلام الذي تم إنشاؤه ومشروع الفوترة وحساب الخدمة رمز OAuth المميز.
    • شرطي: إذا كنت تستخدم البيانات التي أدخلها المستخدم من خلال الموصّل getConfig، يجب دمج الإدخال باعتباره مَعلمات BigQuery.

إنشاء لوحة البيانات

  1. تعرَّف على كيفية عمل عمليات النشر والإصدارات مع الموصِّلات.
  2. أنشئ عملية نشر إنتاج للموصِّل.
  3. استخدام عملية نشر قناة الإصدار العلني لإنشاء مصدر بيانات وتقرير جديد في Looker Studio
  4. أضِف جميع الجداول والرسوم البيانية في التقرير.
  5. لوحة البيانات جاهزة الآن لمشاركتها مع المستخدمين.

إتاحة لوحة البيانات للمستخدمين

  1. مشاركة النص البرمجي للموصِّل مع المستخدمين المحددين أو مع "أي شخص" لديه رابط".
  2. شارك لوحة التحكم مع المستخدمين المحددين أو مع "أي شخص لديه .
  3. اختياري: استخدام خدمة تقصير عنوان URL لإنشاء رابط قصير عنوان URL للوحة البيانات. شارِك عنوان URL المختصر مع المستخدمين. يساعد هذا في استبدال عنوان URL للوحة التحكم لاحقًا إذا لزم الأمر.
  4. اختياري: يمكنك قياس استخدام لوحة البيانات عن طريق إعداد "إحصاءات Google" لما يلي: لتقريرك.

مثال التعليمة البرمجية