埋め込みビューアの行レベルのセキュリティ

たとえば、デベロッパー X がクライアント用のウェブ アプリケーションを提供しているとします。 クライアントは自身の認証情報を使用してアプリにログインし、さまざまな店舗の売上データを表示できます。クライアントがアクセスできる店舗のリストは、一人ひとり異なります。デベロッパーは、Looker Studio ダッシュボードをアプリケーションに埋め込んで、クライアントがログインしたときに、アクセス権のある店舗の販売データのみが表示されるようにしたいと考えています。このプロセスは、クライアントが Google アカウントにログインしていなくても機能します。

下記の解決方法では、デベロッパーはコミュニティ コネクタを作成し、埋め込み URL を介してトークンを渡し、そのトークンに基づいてデータをフィルタします。

要件

  • ダッシュボードの閲覧者は、サードパーティ製アプリにログインする必要があります。
  • アプリケーションは、埋め込み URL を介して一意のトークンを Looker Studio ダッシュボードに渡す必要があります。トークンは、フィルタ情報のルックアップに使用することも、フィルタ情報を暗号化することもできます。
  • コミュニティ コネクタは、トークンをフィルタ値に変換できなければなりません。

制限事項

  • G Suite のお客様で、管理者が [リンクを知っている全員] によるドライブ ファイルの共有を無効にしている場合、組織外のユーザーとレポートを共有することはできません。

解決策

この解決方法を実装するには、以下のすべての手順を行ってください。

ウェブアプリでユーザー トークンを生成する

ウェブ アプリケーションのログイン ユーザーごとに一意のトークンを生成します。このトークンは、後のステップで埋め込みダッシュボードに渡します。

トークンは、関連データのフィルタリングに使用されます。指定できるオプションは次のとおりです。

  • 特定のトークンのフィルタされたデータまたはユーザー情報を返す API エンドポイントを作成します。
  • 後でコネクタで復号できるように、トークン内のユーザー情報を暗号化します。

新しいコミュニティ コネクタを作成する

コミュニティ コネクタの仕組みを確認し、コミュニティ コネクタ Codelab を完了します。コネクタを作成するためのローカル開発ツールを使用して、開発プロセスをより迅速かつ簡単にします。

コネクタコードを記述する

  1. getConfig() は、少なくとも 1 つの設定項目を返します。このメソッドを使用して、埋め込み URL のパラメータからトークンを取得します。

    function getConfig(request) {
      var cc = DataStudioApp.createCommunityConnector();
      var config = cc.getConfig();
    
      config
          .newTextInput()
          .setId('token')
          .setName('Enter user token');
    
      // TODO: Add additional config values if applicable for your connector
    
      config.setDateRangeRequired(false);
      config.setIsSteppedConfig(false);
    
      return config.build();
    }
    
  2. getData() は、request.configParams オブジェクトを介してトークンにアクセスできます。トークンを使用して、フィルタされたデータを取得するか、取得された既存のデータをフィルタします。
    上記の例の場合、トークンは request.configParams.token になります。getData() では、トークンが REST API エンドポイントに渡され、店舗 ID のリストが取得されます。次に、これらの店舗 ID を使用して、販売データを取得する SQL クエリを作成します。

    var STORE_ID_API = 'https://www.example.com/api/storeid';
    var QUERY_STRING_PREFIX = "SELECT StoreName, Sales from stores"
    
    function getData(request) {
      var token = request.configParams.token;
    
      var storeIds = getStoreIdList(token);
      var queryString = constructQueryString(storeIds);
      var fetchedData = fetchData(queryString);
    
      // rest of getData() implementation
    }
    
    function getStoreIdList(token) {
      var url = STORE_ID_API;
      var response = UrlFetchApp.fetch(url);
      var parsedResponse = JSON.parse(response);
      return parsedResponse.storeIds;
    }
    
    function constructQueryString(storeIds) {
      var storeIdString = storeIds.join(',');
      var queryString = QUERY_STRING_PREFIX
                        + ' WHERE storeId in ('
                        + storeIdString
                        + ')';
      return queryString;
    }
    

ダッシュボードを作成する

  1. コネクタのデプロイとバージョンの仕組みを理解します。
  2. コネクタの本番環境デプロイを作成します。
  3. 本番環境のデプロイリンクを使用して、Looker Studio でデータソースとレポートを作成します。
  4. token 構成パラメータで、レポート閲覧者がパラメータ値を変更できるようにします
  5. 選択したユーザーまたは「リンクを知っている全員」にダッシュボードを共有します。
  6. レポートの埋め込みを有効にします。

ダッシュボードをプラットフォームに埋め込む

  1. レポートの URL パラメータの仕組みを確認します。
  2. URL パラメータを使用して、動的に生成されたトークン値を埋め込み Looker Studio レポートに渡します。
    埋め込み URL は次のようになります。
    `https://lookerstudio.google.com/embed/reporting/REPORT_ID/page/PAGE_ID?config=%7B%22ds0%22%3A%7B%22token%22%3A%22TOKEN_VALUE%22%7D%7D

推奨事項

  • トークンの有効期間は短くしてください。
  • 無効なトークンを使用して表示された情報がダッシュボードから漏洩していないことを確認します。