삽입된 뷰어의 행 수준 보안

예를 들어 개발자 X가 클라이언트용 웹 애플리케이션을 보유하고 있다고 가정해 보겠습니다. 클라이언트는 자신의 사용자 인증 정보를 사용하여 앱에 로그인하고 여러 매장의 판매 데이터를 볼 수 있습니다. 각 클라이언트는 서로 다른 매장 목록에 액세스할 수 있습니다. 개발자는 클라이언트가 로그인할 때 액세스할 수 있는 매장의 판매 데이터만 볼 수 있도록 애플리케이션에 Looker Studio 대시보드를 삽입하려고 합니다. 이 프로세스가 작동하려면 클라이언트가 Google 계정에 로그인하지 않아도 됩니다.

제안된 솔루션을 사용하려면 개발자가 커뮤니티 커넥터를 만들고 삽입 URL을 통해 토큰을 전달한 다음 토큰을 기반으로 데이터를 필터링해야 합니다.

요구사항

  • 대시보드 뷰어는 서드 파티 애플리케이션에 로그인합니다.
  • 애플리케이션은 삽입 URL을 통해 고유 토큰을 Looker Studio 대시보드에 전달해야 합니다. 토큰은 필터 정보를 조회하거나 필터 정보를 암호화하는 데 사용할 수 있습니다.
  • 커뮤니티 커넥터는 토큰을 필터 값으로 변환할 수 있어야 합니다.

제한사항

  • G Suite 고객이고 관리자가 '링크가 있는 모든 사용자'와의 드라이브 파일 공유를 사용 중지한 경우 조직 외부의 사용자와 보고서를 공유할 수 없습니다.

해결 방법

솔루션을 구현하려면 다음 단계를 모두 완료하세요.

웹 앱에서 사용자 토큰 생성

웹 애플리케이션에서 로그인한 각 사용자의 고유한 토큰을 생성합니다.이후 단계에서 이 토큰을 삽입된 대시보드에 전달합니다.

토큰을 사용하여 관련 데이터를 필터링해야 합니다. 옵션은 다음과 같습니다.

  • 특정 토큰에 대해 필터링된 데이터 또는 사용자 정보를 반환하는 API 엔드포인트를 만듭니다.
  • 나중에 커넥터에서 복호화할 수 있도록 토큰의 사용자 정보를 암호화합니다.

새 커뮤니티 커넥터 만들기

커뮤니티 커넥터 작동 방식을 검토하고 커뮤니티 커넥터 Codelab을 완료하여 시작하세요. 커넥터 생성을 위한 로컬 개발 도구를 사용하면 개발 프로세스를 더 빠르고 쉽게 수행할 수 있습니다.

커넥터 코드 작성

  1. getConfig()는 구성 항목을 하나 이상 반환해야 합니다. 이 매개변수는 삽입 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

권장사항

  • 단기 토큰을 만들어야 합니다.
  • 대시보드가 잘못된 토큰으로 조회된 정보를 유출하지 않는지 확인합니다.