Вы можете использовать сервисные учетные записи в ваших Соединителях сообщества для централизованного управления доступом к ресурсам. Распространенным вариантом использования было бы делегирование доступа к данным, к которым пользователи не смогут получить доступ, используя свои собственные учетные данные.
Ознакомьтесь с разделом Общие сведения об учетных записях служб , чтобы ознакомиться с этой темой.
Преимущества
- Вы можете объединить счета за доступ к данным.
- Вы можете реализовать свой собственный уровень управления доступом в своем соединителе.
- Вы можете делегировать доступ к данным или ресурсам, к которым учетные данные пользователя не имеют доступа.
Этапы реализации
- Создайте сервисную учетную запись для платформы, с которой вы получаете данные.
- Предоставьте необходимые разрешения учетной записи службы, чтобы она могла получить доступ к необходимым ресурсам.
- Сохраните учетные данные учетной записи службы в свойствах сценария вашего соединителя.
- Во время выполнения соединителя используйте сохраненные учетные данные для получения необходимых данных.
- Необязательно : реализуйте логику управления доступом для фильтрации данных.
Пример. Доступ к BigQuery с помощью расширенных служб Looker Studio и учетной записи службы.
Вы создаете решение, в котором ваши пользователи будут создавать информационные панели на основе таблицы BigQuery. Если ваши пользователи используют коннектор BigQuery Looker Studio, им потребуется доступ для чтения к таблице BigQuery. Им также потребуется платежный аккаунт для Google Cloud Platform (GCP). Следующие шаги показывают, как использовать сервисный аккаунт для консолидации счетов и делегирования доступа к данным BigQuery.
- Создайте сервисную учетную запись в желаемом проекте GCP.
- Убедитесь, что сервисный аккаунт может создавать задания BigQuery и просматривать данные для необходимой таблицы. Подробности см. в разделе «Контроль доступа BigQuery» .
- Создайте ключ для учетной записи службы и сохраните учетные данные в свойствах сценария вашего соединителя.
- Включите библиотеку скриптов приложений OAuth2 в свой проект скриптов приложений.
- Для функции
getData
выполните аутентификацию учетной записи службы и сгенерируйте токен доступа. Установите область OAuth2https://www.googleapis.com/auth/bigquery.readonly
. - Верните токен доступа с другими элементами конфигурации в ответе
getData
.
Ниже приведен полный пример кода разъема:
main.js
var cc = DataStudioApp.createCommunityConnector(); var scriptProperties = PropertiesService.getScriptProperties(); function isAdminUser() { return true; } function getAuthType() { var AuthTypes = cc.AuthType; return cc .newAuthTypeResponse() .setAuthType(AuthTypes.NONE) .build(); } function getConfig(request) { var config = cc.getConfig(); config .newInfo() .setId('generalInfo') .setText('This is an example connector to showcase row level security.'); return config.build(); } function getFields() { var fields = cc.getFields(); var types = cc.FieldType; var aggregations = cc.AggregationType; fields .newDimension() .setId('region') .setName('Region') .setType(types.TEXT); fields .newMetric() .setId('sales') .setName('Sales') .setType(types.NUMBER) .setAggregation(aggregations.SUM); fields .newDimension() .setId('date') .setName('Date') .setType(types.YEAR_MONTH_DAY); return fields; } function getSchema(request) { return {schema: getFields().build()}; } 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']); } var BASE_SQL = 'SELECT d.region, d.sales, d.date ' + 'FROM `datastudio-solutions.row_level_security.data` d ' + 'INNER JOIN `datastudio-solutions.row_level_security.access` a ' + 'ON d.region = a.region ' + 'where a.email=@email'; function getData(request) { var accessToken = getOauthService().getAccessToken(); var serviceAccountCreds = getServiceAccountCreds(); var billingProjectId = serviceAccountCreds[BILLING_PROJECT_ID]; var email = Session.getEffectiveUser().getEmail(); var bqTypes = DataStudioApp.createCommunityConnector().BigQueryParameterType; return cc .newBigQueryConfig() .setAccessToken(accessToken) .setBillingProjectId(billingProjectId) .setUseStandardSql(true) .setQuery(BASE_SQL) .addQueryParameter('email', bqTypes.STRING, email) .build(); }