Sécurité au niveau des lignes de BigQuery avec les services avancés

Par exemple, supposons que vous essayiez de créer une solution pour vos ventes organisation. L'organisation commerciale est divisée en plusieurs régions, où chacune dispose de son propre responsable régional. Dans BigQuery, le jeu de données sur les ventes par région et par date.

La solution proposée comportera un tableau de bord unique dans lequel les responsables régionaux peuvent uniquement consulter les données sur les ventes pour leurs propres régions.

Conditions requises

  • Les lecteurs du tableau de bord seront connectés avec un compte Google.
  • Un mappage est disponible entre l'adresse e-mail de l'utilisateur et les données/lignes qu'il possède. y accéder.
  • Un compte de service sera utilisé pour accéder aux données BigQuery. Ainsi, le système de facturation seront centralisées et gérées par le fournisseur du tableau de bord.

Limites

  • Le tableau de bord nécessite une autorisation unique de la part de chaque utilisateur vue.
  • Les lecteurs ne peuvent pas modifier le tableau de bord ni le partager avec d'autres utilisateurs.
  • Si vous êtes un client Workspace et que votre administrateur a désactivé le partage les fichiers Drive vers "Tous les utilisateurs disposant du lien", supprimez le partage restriction ou développer la solution sur un compte Gmail.com.

Solution

Suivez toutes les étapes ci-dessous pour implémenter la solution.

Créer un connecteur de communauté

Passez en revue le fonctionnement des connecteurs de communauté et complétez le connecteur de communauté. l'atelier de programmation pour commencer. Utilisez l'outil pour les développeurs permettant de créer des connecteurs pour une plus rapide et plus simple.

Écrire le code du connecteur

  1. getAuthType() doit renvoyer NONE.
  2. getConfig() doit renvoyer une configuration vide.
    • Facultatif:Si vous avez besoin d'entrées spécifiques pour configurer le tableau de bord, peut demander une entrée utilisateur ici.
  3. getSchema() doit renvoyer le schéma de votre requête.
    • Facultatif:Vous pouvez ajouter des champs et des calculs personnalisés dans la requête SQL ou en utilisant des champs calculés dans le schéma.
  4. La tâche getData() sera réalisée ultérieurement.

Mettre à jour le fichier manifeste

Consultez la documentation de référence sur les fichiers manifestes et ajoutez-y toutes les informations notamment:

  1. définissez dataStudio.forceViewersCredentials sur true.
  2. définissez dataStudio.advancedServices.data sur true.
  3. Pour oauthScopes, ajoutez https://www.googleapis.com/auth/userinfo.email et https://www.googleapis.com/auth/script.external_request Consultez la section Autorisation Champs d'application pour Apps Script. <ph type="x-smartling-placeholder">
      </ph>
    • Conditional:ajoutez tous les champs d'application pertinents pour les services utilisés dans le connecteur.

Le fichier manifeste doit se présenter comme suit:

{
  ...
  "dataStudio": {
    "forceViewersCredentials": true,
    "advancedServices": {
       "data": true
    },
    ...
  }
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/userinfo.email"
    ],
  ...
}

Implémenter un compte de service

  1. Créez un compte de service dans votre projet Google Cloud. Ce sera votre projet de facturation.
  2. Assurez-vous que ce compte de service dispose d'un accès BigQuery dans le projet Cloud.
    • Rôles IAM (Identity and Access Management) requis: BigQuery Data Viewer, BigQuery Job User
  3. Téléchargez le fichier JSON pour obtenir les clés de comptes de service. Stockez les clés dans les propriétés de script de votre projet de connecteur.
  4. Incluez la bibliothèque OAuth2 for Apps Script dans votre projet Apps Script.
  5. Implémentez le code OAuth2 requis pour le compte de service:
    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']);
    }
    

Implémenter getData()

  1. Créez votre requête BigQuery.
    • À l'aide de l'adresse e-mail, recherchez le mappage entre l'e-mail et les données.
    • Utilisez une clause JOIN et/ou WHERE pour filtrer les données.
  2. Récupérez l'adresse e-mail de l'utilisateur effectif (documentation de référence sur l'identité de l'utilisateur).
  3. Utilisez les services avancés de Looker Studio pour renvoyer la configuration de la requête. à partir de getData.
    • Transmettre la requête créée, le projet de facturation et le compte de service Jeton OAuth
    • Conditionnel:si vous enregistrez les entrées utilisateur via le connecteur getConfig, vous devez intégrer l'entrée en tant que paramètres BigQuery.

Créer le tableau de bord

  1. Découvrez le fonctionnement des déploiements et versions des connecteurs.
  2. Créez un déploiement de production pour le connecteur.
  3. Utilisez le déploiement en production pour créer une source de données et un rapport dans Looker Studio.
  4. Ajoutez tous les tableaux et graphiques du rapport.
  5. Vous pouvez maintenant partager le tableau de bord avec vos utilisateurs.

Mettre le tableau de bord à la disposition des utilisateurs

  1. Partagez le script du connecteur avec les utilisateurs sélectionnés ou avec "Tout le monde". avec le lien".
  2. Partagez le tableau de bord avec les utilisateurs sélectionnés ou avec "Tout utilisateur de .
  3. Facultatif:Utilisez un service de raccourcissement d'URL afin de créer un lien court pour le URL du tableau de bord. Partagez l'URL abrégée avec vos utilisateurs. Cela permet de remplacer l'URL du tableau de bord, si nécessaire.
  4. Facultatif:Mesurez l'utilisation du tableau de bord en configurant Google Analytics pour votre rapport.

Exemple de code