امنیت در سطح ردیف BigQuery با خدمات پیشرفته

به عنوان مثال، فرض کنید شما در حال تلاش برای ایجاد یک راه حل برای سازمان فروش خود هستید. سازمان فروش به چندین منطقه تقسیم می شود که هر منطقه مدیر منطقه ای خود را دارد. مجموعه داده فروش در BigQuery دارای مقدار فروش بر اساس منطقه و تاریخ است.

راه حل پیشنهادی دارای یک داشبورد واحد خواهد بود که در آن مدیران منطقه می توانند داده های فروش را فقط برای مناطق خود مشاهده کنند.

الزامات

  • بینندگان داشبورد با یک حساب Google وارد سیستم خواهند شد.
  • یک نقشه بین ایمیل کاربر و داده ها/ردیف هایی که به آنها دسترسی دارند در دسترس است.
  • یک حساب سرویس برای دسترسی به داده های BigQuery استفاده خواهد شد. بنابراین صورت‌حساب توسط ارائه‌دهنده داشبورد متمرکز و مدیریت می‌شود.

محدودیت ها

  • داشبورد به یک بار مجوز از هر بیننده در اولین نمایش نیاز دارد.
  • بینندگان نمی توانند داشبورد را ویرایش کنند یا با دیگران به اشتراک بگذارند.
  • اگر مشتری Workspace هستید و سرپرست شما اشتراک‌گذاری فایل‌های Drive را با «هر کسی که پیوند دارد» غیرفعال کرده است، یا محدودیت اشتراک‌گذاری را حذف کنید یا راه‌حل را در حساب Gmail.com توسعه دهید.

راه حل

تمام مراحل زیر را برای اجرای راه حل کامل کنید.

یک رابط انجمن جدید ایجاد کنید

نحوه عملکرد اتصال دهنده های انجمن را مرور کنید و برای شروع ، Codelab Connector Community را تکمیل کنید. از ابزار Developer برای ایجاد رابط‌ها برای فرآیند توسعه سریع‌تر و آسان‌تر استفاده کنید.

کد کانکتور را بنویسید

  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 for 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 برای برگرداندن پیکربندی پرس و جو از getData استفاده کنید.
    • پرس و جوی ساخته شده، پروژه صورتحساب و رمز OAuth حساب سرویس را ارسال کنید.
    • شرطی: اگر ورودی کاربر را از طریق کانکتور getConfig دریافت می کنید، باید ورودی را به عنوان پارامترهای BigQuery وارد کنید.

داشبورد را ایجاد کنید

  1. نحوه عملکرد استقرارها و نسخه ها برای اتصال دهنده ها را بدانید.
  2. یک توسعه تولید برای کانکتور ایجاد کنید .
  3. از استقرار Production برای ایجاد یک منبع داده و یک گزارش جدید در Looker Studio استفاده کنید.
  4. همه جداول و نمودارها را در گزارش اضافه کنید.
  5. داشبورد اکنون آماده است تا با کاربران شما به اشتراک گذاشته شود.

داشبورد را در دسترس کاربران قرار دهید

  1. اسکریپت رابط را با کاربران انتخاب شده یا با "هر کسی که پیوند دارد" به اشتراک بگذارید .
  2. داشبورد را با کاربران منتخب یا با «هر کسی که پیوند دارد» به اشتراک بگذارید .
  3. اختیاری: از یک سرویس کوتاه کننده URL برای ایجاد یک پیوند کوتاه برای URL داشبورد استفاده کنید. URL کوتاه شده را با کاربران خود به اشتراک بگذارید. این کمک می کند تا در صورت نیاز، URL داشبورد را بعدا جایگزین کنید.
  4. اختیاری: استفاده از داشبورد را با تنظیم Google Analytics برای گزارش خود اندازه گیری کنید .

کد مثال