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
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.
Kueri event dengan tipe
dataworks:ResourcesDownload:DownloadResources.Klik Event Details di kolom Actions untuk melihat isi pesan event. Berikut adalah contohnya:
PentingIsi 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
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.
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:
PentingEkstensi contoh ini menggunakan bidang
dataRowSizedalam 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
WARNdaricallbackExtensionRequest.setCheckResult()ketika mendeteksi perilaku pengguna berisiko. Jika Anda ingin memblokir aksi tersebut,callbackExtensionRequest.setCheckResult()harus mengembalikanFAIL.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
Buka halaman Security Center.
Masuk ke Konsol DataWorks. Di bilah navigasi atas, pilih wilayah yang diinginkan. Di panel navigasi kiri, pilih . Pada halaman yang muncul, klik Go to Security Center.
Di panel navigasi kiri, klik .
Konfigurasi proses persetujuan untuk ekstensi yang telah dipublikasikan. Untuk informasi selengkapnya, lihat Konfigurasi tanggapan risiko.

Langkah 4: Aktifkan aturan identifikasi risiko
Nyalakan sakelar Enable untuk mengaktifkan ekstensi seperti yang diminta.
Langkah 5: Verifikasi hasil
Buka halaman Data Download.
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.