全部产品
Search
文档中心

DataWorks:Contoh tanggapan aturan identifikasi risiko

更新时间:Nov 20, 2025

DataWorks menyediakan fitur langganan pesan melalui kemampuan OpenEvent-nya. Anda dapat mendaftarkan program layanan sebagai ekstensi DataWorks untuk menangkap dan merespons pesan event yang dilanggan, sehingga memungkinkan penerimaan notifikasi serta pengelolaan proses terkait event tertentu. Topik ini menggunakan event "blokir atau setujui unduhan lebih dari 1.000 catatan data secara real time" sebagai contoh untuk menjelaskan proses pengembangan dan verifikasi aturan identifikasi risiko.

Informasi latar belakang

Pengunduhan data merupakan operasi kritis dalam manajemen risiko perusahaan. Biasanya, hanya pengembang data dan analis perusahaan yang dapat menelusuri serta menggunakan data di platform data; mereka tidak diperbolehkan mengunduh data detail ke komputer lokal untuk dianalisis. Setelah data diekspor ke komputer lokal, operasi yang dilakukan terhadap data tersebut tidak dapat diaudit. Penggunaan data yang tidak tepat atau serangan berbahaya dapat menyebabkan penyalahgunaan dan pelanggaran data, yang berpotensi memicu insiden keamanan serta sentimen publik negatif. Skenario ini menunjukkan cara memblokir ekspor data secara real time.

Tujuan

Ketika pengguna mencoba mengekspor lebih dari 1.000 baris data sekaligus, sistem secara otomatis akan memblokir operasi tersebut atau memicu proses persetujuan.

Prasyarat

  • DataWorks Enterprise Edition telah diaktifkan. Solusi ini didasarkan pada kemampuan Open Platform dari DataWorks Enterprise Edition.

  • EventBridge telah diaktifkan untuk menerima isi pesan event operasi pengguna. Pesan-pesan tersebut kemudian dikonsumsi oleh ekstensi perilaku risiko.

  • Sebuah Instance ECS atau pusat data lokal telah disiapkan untuk men-deploy ekstensi perilaku risiko.

Langkah 1: Aktifkan dan konfigurasi langganan pesan

  1. Aktifkan dan konfigurasi langganan pesan.

    Karena pengunduhan hasil kueri bukan operasi tingkat ruang kerja, kasus penggunaan ini menggunakan bus default untuk menerima pesan event operasi.

  2. Kueri event dengan tipe dataworks:ResourcesDownload:DownloadResources.

  3. Klik Event Details di kolom Actions untuk melihat isi pesan event. Berikut adalah contohnya:

    Penting
    • Isi pesan memberikan konteks untuk penilaian risiko. Misalnya, bidang-bidang kunci dalam tabel berikut dapat digunakan sebagai konteks penilaian risiko dalam skenario serupa lainnya.

    • Untuk menggunakan Pengguna RAM atau Peran RAM guna membaca event dari bus default, Anda harus menyelesaikan Otorisasi RAM.

    {
      "datacontenttype": "application/json;charset=utf-8",
      "aliyunaccountid": "110755000425****",
      "aliyunpublishtime": "2023-12-05T07:25:31.708Z",
      "data": {
        "eventCode": "download-resources",
        "extensionBizId": "audit_4d7ebb42b805428483148295a97a****",
        "extensionBizName": "DataWorks_IDE_Query_20231205152530.csv",
        "requestId": "77cac0c2fc12cecbf1d289128897****@@ac15054317017611303051804e****",
        "appId": ****,
        "tenantId": 52425742456****,
        "blockBusiness": true,
        "eventBody": {
          "sqlText": "SELECT * FROM table_1",
          "queryDwProjectId": "****",
          "moduleType": "develop_query",
          "operatorBaseId": "110755000425****",
          "datasourceId": "1****",
          "queryDwProjectName": "yongxunQA_emr_chen****",
          "dataRowSize": 4577,
          "datasourceName": "odps_source",
          "operatorUid": "110755000425****"
        },
        "operator": "110755000425****"
      },
      "aliyunoriginalaccountid": "110755000425****",
      "specversion": "1.0",
      "aliyuneventbusname": "default",
      "id": "169d171c-d523-4370-a874-bb0fa083****",
      "source": "acs.dataworks",
      "time": "2023-12-05T15:25:31.588Z",
      "aliyunregionid": "cn-chengdu",
      "type": "dataworks:ResourcesDownload:DownloadResources"
    }

    Deskripsi parameter utama:

    Parameter

    Deskripsi

    sqlText

    Kueri SQL.

    queryDwProjectId

    ID ruang kerja yang berisi sumber data yang dikueri.

    moduleType

    Sumber unduhan. Nilai yang valid:

    • develop_query: Kueri di Data Development.

    • sqlx_query: Kueri di DataAnalysis.

    • dw_excel: Buku kerja di DataAnalysis.

    operatorBaseId

    UID operator.

    datasourceId

    ID sumber data yang dikueri.

    queryDwProjectName

    Nama ruang kerja yang berisi sumber data yang dikueri.

    dataRowSize

    Jumlah baris data yang akan diunduh.

    datasourceName

    Nama sumber data yang dikueri.

Langkah 2: Kembangkan dan deploy ekstensi

  1. Persiapan:

    Aktifkan langganan pesan, daftarkan ekstensi, dan ambil informasi yang diperlukan untuk mengembangkan ekstensi. Untuk informasi selengkapnya, lihat Kembangkan dan deploy ekstensi: Layanan yang Dikelola Sendiri.

  2. Kembangkan dan deploy ekstensi.

    Kembangkan dan deploy ekstensi sebagai layanan aplikasi berdasarkan informasi yang telah Anda ambil. Untuk informasi selengkapnya, lihat Kembangkan dan deploy ekstensi: Function Compute. Pengaturan parameter utama dan contoh kode disediakan di bawah ini:

    • Saat mendaftarkan ekstensi, untuk Processing Extension Point, pilih Pre-event for Data Download.

    • Kode berikut menyediakan contoh pengembangan ekstensi:

      Penting
      • Ekstensi contoh ini menggunakan bidang dataRowSize dalam isi pesan event dari Langkah 1 untuk memeriksa risiko berdasarkan jumlah baris yang akan diunduh.

      • Saat mengonfigurasi tanggapan, jika Anda ingin memicu proses persetujuan, pastikan ekstensi mengembalikan WARN dari callbackExtensionRequest.setCheckResult() ketika mendeteksi perilaku pengguna berisiko. Jika Anda ingin memblokir aksi tersebut, callbackExtensionRequest.setCheckResult() harus mengembalikan FAIL.

      • Kode ekstensi dalam topik ini menggunakan unduhan 1.000 catatan data sebagai contoh. Jika Anda ingin jumlah unduhan yang berbeda memicu alur persetujuan yang berbeda, Anda dapat mengonfigurasi beberapa ekstensi. Untuk informasi selengkapnya, lihat Langkah 3: Konfigurasi aturan identifikasi risiko. Misalnya:

        • Ekstensi pertama hanya dipicu untuk unduhan 0 hingga 2.000 catatan dan sesuai dengan alur persetujuan 1.

        • Ekstensi kedua hanya dipicu untuk unduhan 2.001 catatan atau lebih dan sesuai dengan alur persetujuan 2.

      package com.aliyun.dataworks.demo;
      
      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.dataworks.config.Constants;
      import com.aliyun.dataworks.config.EventCheckEnum;
      import com.aliyun.dataworks.config.ExtensionParamProperties;
      import com.aliyun.dataworks.services.DataWorksOpenApiClient;
      import com.aliyun.dataworks_public20200518.Client;
      import com.aliyun.dataworks_public20200518.models.CallbackExtensionRequest;
      import com.aliyun.dataworks_public20200518.models.CallbackExtensionResponse;
      import com.aliyun.dataworks_public20200518.models.GetOptionValueForProjectRequest;
      import com.aliyun.dataworks_public20200518.models.GetOptionValueForProjectResponse;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.web.bind.annotation.PostMapping;
      import org.springframework.web.bind.annotation.RequestBody;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      /**
       * @author dataworks demo
       */
      @RestController
      @RequestMapping("/extensions")
      public class ExtensionsController {
      
          @Autowired(required = false)
          private DataWorksOpenApiClient dataWorksOpenApiClient;
      
          @Autowired
          private ExtensionParamProperties extensionParamProperties;
      
          /**
           * Menerima pesan yang didorong dari EventBridge.
           *
           * @param jsonParam
           */
          @PostMapping("/consumer")
          public void consumerEventBridge(@RequestBody String jsonParam) {
              JSONObject jsonObj = JSON.parseObject(jsonParam);
              String eventCode = jsonObj.getString(Constants.EVENT_CODE_FILED);
              if (Constants.COMMIT_FILE_EVENT_CODE.equals(eventCode) || Constants.DEPLOY_FILE_EVENT_CODE.equals(eventCode)) {
                  // Inisialisasi klien.
                  Client client = dataWorksOpenApiClient.createClient();
                  try {
                      // Informasi tentang parameter untuk event saat ini.
                      String messageId = jsonObj.getString("id");
                      JSONObject data = jsonObj.getObject("data", JSONObject.class);
                      // Long projectId = data.getLong("appId");
      
                      // Inisialisasi callback event.
                      CallbackExtensionRequest callbackExtensionRequest = new CallbackExtensionRequest();
                      callbackExtensionRequest.setMessageId(messageId);
                      callbackExtensionRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
                      JSONObject eventBody = data.getJSONObject("eventBody");
                      Long dataRowSize = eventBody.getLong("dataRowSize");
                      // Mendapatkan konfigurasi opsi ekstensi dalam proyek.
                      GetOptionValueForProjectRequest getOptionValueForProjectRequest = new GetOptionValueForProjectRequest();
                      // ID proyek default untuk informasi konfigurasi event titik ekstensi global adalah -1.
                      getOptionValueForProjectRequest.setProjectId("-1");
                      getOptionValueForProjectRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
                      GetOptionValueForProjectResponse getOptionValueForProjectResponse = client.getOptionValueForProject(getOptionValueForProjectRequest);
                      JSONObject jsonObject = JSON.parseObject(getOptionValueForProjectResponse.getBody().getOptionValue());
                      // Catatan: Anda harus mengonfigurasi parameter ini sesuai format yang ditetapkan di DataWorks.
                      Long maxDataRowSize = jsonObject.getLong("dataRowSize");
                      // Periksa apakah kode berisi fungsi terbatas.
                      if (dataRowSize > 1000) {
                          callbackExtensionRequest.setCheckResult(EventCheckEnum.FAIL.getCode());
                          callbackExtensionRequest.setCheckMessage("Jumlah baris yang akan diunduh melebihi batas.");
                      } else { // Callback berhasil.
                          callbackExtensionRequest.setCheckResult(EventCheckEnum.OK.getCode());
                      }
                      // Callback ke DataWorks.
                      CallbackExtensionResponse acsResponse = client.callbackExtension(callbackExtensionRequest);
                      // ID unik permintaan, digunakan untuk pemecahan masalah selanjutnya.
                      System.out.println("acsResponse:" + acsResponse.getBody().getRequestId());
                  } catch (Exception e) {
                      // Deskripsi kesalahan.
                      System.out.println("ErrMsg:" + e.getMessage());
                  }
              } else {
                  System.out.println("Gagal memfilter event lainnya. Periksa langkah-langkah konfigurasi.");
              }
          }
      }

Langkah 3: Konfigurasi aturan identifikasi risiko

  1. Buka halaman Security Center.

    Masuk ke Konsol DataWorks. Di bilah navigasi atas, pilih wilayah yang diinginkan. Di panel navigasi kiri, pilih Data Governance > Security Center. Pada halaman yang muncul, klik Go to Security Center.

  2. Di panel navigasi kiri, klik Security Policies > Risk Identification Rules.

  3. Konfigurasi proses persetujuan untuk ekstensi yang telah dipublikasikan. Untuk informasi selengkapnya, lihat Konfigurasi tanggapan risiko.image

Langkah 4: Aktifkan aturan identifikasi risiko

Nyalakan sakelar Enable untuk mengaktifkan ekstensi seperti yang diminta.image

Langkah 5: Verifikasi hasil

  1. Buka halaman Data Download.

  2. Klik Download di kolom Actions untuk file yang ditentukan.

    • Jika pemeriksaan berhasil, Anda dapat melanjutkan pengunduhan.

    • Jika pemeriksaan gagal, pengunduhan diblokir atau Anda diminta untuk mengirim permintaan.

Skenario serupa lainnya

Anda dapat menggunakan bidang lain dari event unduhan, seperti nama ruang kerja, detail SQL, nama sumber data, dan UID pengguna, untuk skenario pengendalian risiko real time lainnya. Misalnya:

  • Mengizinkan atau menolak unduhan data berdasarkan departemen pengguna (ruang kerja).

  • Memblokir unduhan jika kueri SQL mengandung bidang sensitif.

  • Menerapkan pengendalian risiko bertingkat. Misalnya, memerlukan persetujuan untuk unduhan lebih dari 20.000 catatan dan memblokir unduhan lebih dari 50.000 catatan.

  • Menentukan batas unduhan berdasarkan peran ruang kerja. Misalnya, mengizinkan peran Developer mengunduh N catatan dan memblokir unduhan yang melebihi batas ini. Anda juga dapat mengizinkan peran Analyst mengunduh M catatan dan memblokir unduhan yang melebihi batas ini. Hal ini memerlukan penggunaan operasi API ListProjectMembers - Query workspace members.

  • Menetapkan kebijakan jumlah unduhan yang berbeda untuk skenario pengembangan data dan analisis data.