Безопасность на уровне строк BigQuery с расширенными службами

Например, предположим, что вы пытаетесь создать решение для своей торговой организации. Организация продаж разделена на несколько регионов, в каждом регионе есть свой региональный менеджер. Набор данных о продажах в BigQuery содержит объем продаж по регионам и датам.

Предлагаемое решение будет иметь единую панель управления, где региональные менеджеры смогут просматривать данные о продажах только для своих регионов.

Требования

  • Зрители информационной панели войдут в систему с помощью учетной записи Google.
  • Доступно сопоставление между электронной почтой пользователя и данными/строками, к которым у него есть доступ.
  • Сервисный аккаунт будет использоваться для доступа к данным BigQuery. Таким образом, выставление счетов будет централизованным и управляться поставщиком информационной панели.

Ограничения

  • Панель управления требует однократной авторизации от каждого зрителя при первом просмотре.
  • Зрители не могут редактировать панель мониторинга или делиться ею с другими.
  • Если вы являетесь клиентом Workspace и ваш администратор отключил общий доступ к файлам Диска для всех, у кого есть ссылка, либо снимите ограничение на общий доступ, либо разработайте решение для учетной записи 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 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 Studio, чтобы вернуть конфигурацию запроса из getData.
    • Передайте созданный запрос, проект выставления счетов и токен OAuth сервисного аккаунта.
    • Условно: если вы получаете пользовательский ввод через коннектор getConfig , вам следует включить этот ввод в качестве параметров BigQuery .

Создайте панель мониторинга

  1. Узнайте, как развертывания и версии работают для соединителей.
  2. Создайте производственное развертывание для соединителя.
  3. Используйте производственное развертывание, чтобы создать источник данных и новый отчет в Looker Studio.
  4. Добавьте все таблицы и диаграммы в отчет.
  5. Теперь панель мониторинга готова к совместному использованию с вашими пользователями.

Сделайте панель управления доступной для пользователей

  1. Поделитесь сценарием соединителя с выбранными пользователями или с «Всем, у кого есть ссылка».
  2. Поделитесь панелью управления с выбранными пользователями или с «Всем, у кого есть ссылка».
  3. Необязательно: используйте службу сокращения URL-адресов, чтобы создать короткую ссылку для URL-адреса панели мониторинга. Поделитесь сокращенным URL-адресом со своими пользователями. Это поможет позже заменить URL-адрес панели мониторинга, если это необходимо.
  4. Необязательно: Измерьте использование информационной панели , настроив Google Analytics для своего отчета.

Пример кода