Bảo mật cấp hàng của BigQuery với Dịch vụ nâng cao

Ví dụ: giả sử bạn đang cố gắng tạo ra một giải pháp cho hoạt động bán hàng của mình tổ chức. Tổ chức bán hàng được chia thành nhiều khu vực, trong đó mỗi khu vực có Người quản lý khu vực riêng. Tập dữ liệu bán hàng trong BigQuery có dữ liệu doanh số số tiền theo khu vực và theo ngày.

Giải pháp được đề xuất sẽ có một trang tổng quan duy nhất nơi Nhà quản lý theo khu vực chỉ có thể xem dữ liệu bán hàng cho khu vực của riêng họ.

Yêu cầu

  • Người xem trang tổng quan sẽ được đăng nhập bằng Tài khoản Google.
  • Có mối liên kết giữa email của người dùng và dữ liệu/hàng mà họ có truy cập vào.
  • Một tài khoản dịch vụ sẽ được dùng để truy cập vào dữ liệu BigQuery. Do đó, việc thanh toán sẽ được nhà cung cấp trang tổng quan tập trung và quản lý.

Các điểm hạn chế

  • Trang tổng quan này yêu cầu mỗi người xem cho phép một lần vào chế độ xem.
  • Người xem không thể chỉnh sửa trang tổng quan hoặc chia sẻ với người khác.
  • Nếu bạn là khách hàng của Workspace và quản trị viên của bạn đã tắt tính năng chia sẻ Chuyển tệp tới “Bất kỳ ai có liên kết” trên Drive, hoặc xóa tùy chọn chia sẻ hạn chế hoặc phát triển giải pháp trên tài khoản Gmail.com.

Giải pháp

Hãy hoàn tất tất cả các bước sau để triển khai giải pháp này.

Tạo Trình kết nối cộng đồng mới

Xem Cách hoạt động của trình kết nối dành cho cộng đồng rồi hoàn tất Trình kết nối cộng đồng Lớp học lập trình này để bắt đầu. Sử dụng Công cụ dành cho nhà phát triển để tạo trình kết nối cho giúp quá trình phát triển nhanh hơn và dễ dàng hơn.

Viết mã trình kết nối

  1. getAuthType() sẽ trả về NONE.
  2. getConfig() cần trả về một cấu hình trống.
    • Không bắt buộc: Nếu cần có dữ liệu đầu vào cụ thể để định cấu hình trang tổng quan, bạn nên có thể yêu cầu người dùng nhập thông tin tại đây.
  3. getSchema() sẽ trả về giản đồ cho truy vấn của bạn.
    • Không bắt buộc: Bạn có thể thêm các trường tuỳ chỉnh và phép tính trong SQL hoặc sử dụng các trường đã tính như một phần của giản đồ.
  4. getData() sẽ được hoàn tất ở bước sau.

Cập nhật tệp kê khai

Xem Tài liệu tham khảo về tệp kê khai và hoàn tất tệp kê khai với tất cả thông tin bắt buộc bao gồm:

  1. đặt dataStudio.forceViewersCredentials thành true.
  2. đặt dataStudio.advancedServices.data thành true.
  3. Đối với oauthScopes, hãy thêm https://www.googleapis.com/auth/userinfo.emailhttps://www.googleapis.com/auth/script.external_request. Xem phần Uỷ quyền Phạm vi cho Apps Script để biết thêm thông tin.
    • Có điều kiện: Thêm tất cả phạm vi có liên quan cho các dịch vụ được sử dụng trong trình kết nối.

Tệp kê khai sẽ có dạng như sau:

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

Triển khai tài khoản dịch vụ

  1. Tạo một tài khoản dịch vụ trong dự án trên Google Cloud. Đây sẽ là dự án thanh toán của bạn.
  2. Đảm bảo tài khoản dịch vụ này có quyền truy cập vào BigQuery trong dự án trên đám mây.
    • Các vai trò quản lý danh tính và quyền truy cập (IAM) bắt buộc: BigQuery Data Viewer, BigQuery Job User
  3. Tải tệp JSON xuống để lấy khoá tài khoản dịch vụ. Lưu trữ khoá trong thuộc tính tập lệnh của dự án trình kết nối.
  4. Đưa thư viện OAuth2 cho Apps Script vào dự án Apps Script.
  5. Triển khai mã OAuth2 bắt buộc cho tài khoản dịch vụ:
    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']);
    }
    

Triển khai getData()

  1. Tạo truy vấn BigQuery.
    • Sử dụng email để tìm mối liên kết giữa email và dữ liệu.
    • Sử dụng mệnh đề THAM GIA và/hoặc WHERE để lọc dữ liệu.
  2. Lấy email của người dùng có hiệu lực (tệp tham chiếu danh tính người dùng).
  3. Sử dụng Các dịch vụ nâng cao của Looker Studio để trả về cấu hình truy vấn qua getData.
    • Truyền truy vấn đã tạo, dự án thanh toán và Tài khoản dịch vụ Mã thông báo OAuth.
    • Có điều kiện: Nếu bạn đang lấy hoạt động đầu vào của người dùng thông qua trình kết nối getConfig, bạn nên kết hợp dữ liệu đầu vào dưới dạng tham số BigQuery.

Tạo trang tổng quan

  1. Hiểu cách hoạt động của bản triển khai và phiên bản cho trình kết nối.
  2. Tạo quá trình triển khai chính thức cho trình kết nối.
  3. Sử dụng quy trình triển khai Phiên bản chính thức để tạo nguồn dữ liệu và một báo cáo mới trong Looker Studio.
  4. Thêm tất cả bảng và biểu đồ trong báo cáo.
  5. Giờ đây, bạn đã có thể chia sẻ trang tổng quan với người dùng.

Cung cấp trang tổng quan cho người dùng

  1. Chia sẻ tập lệnh trình kết nối với những người dùng đã chọn hoặc với “Bất kỳ ai có đường liên kết".
  2. Chia sẻ trang tổng quan với những người dùng được chọn hoặc với “Bất kỳ ai có liên kết”.
  3. Không bắt buộc: Sử dụng dịch vụ rút ngắn URL để tạo đường liên kết ngắn cho URL của trang tổng quan. Chia sẻ URL rút gọn với người dùng. Điều này giúp thay thế URL trang tổng quan sau nếu cần.
  4. Không bắt buộc: Đo lường mức sử dụng trang tổng quan bằng cách thiết lập Google Analytics cho báo cáo của bạn.

Mã ví dụ