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

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

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

المتطلّبات

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

القيود

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

الحلّ

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

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

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

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

  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" لتقريرك.

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