고급 서비스를 사용한 BigQuery 행 수준 보안

예를 들어 영업을 위한 솔루션을 만든다고 가정해 보겠습니다. 되었습니다. 영업 조직은 여러 지역으로 나뉘며 각 지역이 에는 자체 지역 관리자가 있습니다. BigQuery의 영업 데이터 세트에는 판매가 있습니다. 확인할 수 있습니다.

제안된 솔루션에는 단일 대시보드가 있으며, 여기에서 지역 관리자가 은(는) 해당 지역의 판매 데이터만 볼 수 있습니다.

요구사항

  • 대시보드 뷰어는 Google 계정으로 로그인됩니다.
  • 사용자의 이메일과 보유한 데이터/행 간에 매핑을 사용할 수 있음 액세스할 수 있습니다
  • BigQuery 데이터에 액세스하는 데 서비스 계정이 사용됩니다. 따라서 결제는 대시보드 제공업체가 중앙 집중화하고 관리합니다

제한사항

  • 대시보드에서는 처음에는 각 뷰어의 일회성 승인이 필요합니다. 합니다.
  • 뷰어는 대시보드를 수정하거나 다른 사용자와 공유할 수 없습니다.
  • Workspace 고객이며 관리자가 공유를 사용 중지한 경우 Drive 파일을 '링크가 있는 모든 사용자'에 추가하려면 공유를 중지하세요. Gmail.com 계정에서 솔루션을 개발할 수 있습니다.

솔루션

다음 단계를 모두 완료하여 솔루션을 구현합니다.

새 커뮤니티 커넥터 만들기

커뮤니티 커넥터 작동 방식을 검토하고 커뮤니티 커넥터 Codelab을 참고하세요. 개발자 도구를 사용하여 커넥터 생성 개발 프로세스가 더 빠르고 간편해집니다.

커넥터 코드 작성

  1. getAuthType()NONE를 반환해야 합니다.
  2. getConfig()는 빈 구성을 반환해야 합니다.
    • 선택사항: 대시보드 구성을 위해 특정 입력이 필요한 경우 사용자 입력을 요청할 수 있습니다
  3. getSchema()는 쿼리의 스키마를 반환해야 합니다.
    • 선택사항: SQL 또는 BigQuery API 중 하나에서 맞춤 필드와 계산을 추가할 수 있습니다. 계산된 필드를 스키마의 일부로 사용할 수 있습니다.
  4. getData() 작업은 이후 단계에서 완료됩니다.

매니페스트 업데이트

매니페스트 참조를 확인하고 필요한 모든 항목을 포함하여 매니페스트를 작성합니다. 다음과 같은 정보를 포함합니다.

  1. dataStudio.forceViewersCredentialstrue로 설정합니다.
  2. dataStudio.advancedServices.datatrue로 설정합니다.
  3. oauthScopeshttps://www.googleapis.com/auth/userinfo.email 추가 및 https://www.googleapis.com/auth/script.external_request입니다. 승인을 참조하세요. Apps Script 범위를 참조하세요. <ph type="x-smartling-placeholder">
      </ph>
    • 조건부: 커넥터가 있습니다.

매니페스트는 다음과 같이 표시됩니다.

{
  ...
  "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 액세스 권한이 있는지 확인하세요.
    • 필요한 Identity and Access Management (IAM) 역할: BigQuery Data Viewer, BigQuery Job User
  3. JSON 파일을 다운로드하여 서비스 계정 키를 가져옵니다. 키를 커넥터 프로젝트의 스크립트 속성을 따라야 합니다.
  4. Apps Script 프로젝트에 Apps Script용 OAuth2 라이브러리를 포함합니다.
  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. 유효 사용자의 이메일 (사용자 ID 참조)을 가져옵니다.
  3. Looker Studio 고급 서비스를 사용하여 쿼리 구성을 반환합니다. 할 수 있습니다.
    • 구성된 쿼리, 결제 프로젝트, 서비스 계정 전달 OAuth 토큰입니다.
    • 조건부: getConfig 커넥터를 통해 사용자 입력을 받는 경우 입력을 BigQuery 매개변수로 통합해야 합니다.

대시보드 만들기

  1. 커넥터의 배포 및 버전 작동 방식을 이해합니다.
  2. 커넥터의 프로덕션 배포를 만듭니다.
  3. 프로덕션 배포를 사용하여 Looker Studio로 이동합니다.
  4. 보고서에 모든 표와 차트를 추가합니다.
  5. 이제 대시보드를 사용자와 공유할 준비가 되었습니다.

사용자에게 대시보드 제공

  1. 선택한 사용자 또는 '모든 사용자'와 커넥터 스크립트 공유 링크가 표시됩니다.
  2. 선택한 사용자 또는 '다음이 있는 모든 사용자'와 대시보드 공유 링크'를 클릭하세요.
  3. 선택사항: URL Shortener 서비스를 사용하여 대시보드 URL을 클릭합니다. 단축된 URL을 사용자와 공유합니다. 이렇게 하면 필요한 경우 나중에 대시보드 URL을 변경할 수 있습니다.
  4. 선택사항: 다음에 대해 Google 애널리틱스를 설정하여 대시보드 사용을 측정합니다. 확인할 수 있습니다

예시 코드