Todos os produtos
Search
Central de documentação

DataWorks:Exemplo de resposta a uma regra de identificação de risco

Última atualização: Jun 27, 2026

O DataWorks oferece um recurso de assinatura de mensagens por meio da capacidade OpenEvent. Registre um programa de serviço como extensão do DataWorks para capturar e responder a mensagens de eventos assinadas. Assim, você recebe notificações e gerencia processos para eventos específicos. Este tópico usa o evento "bloquear ou aprovar downloads de mais de 1.000 registros de dados em tempo real" como exemplo para descrever o processo de desenvolvimento e verificação de uma regra de identificação de risco.

Informações básicas

O download de dados é uma operação crítica na gestão de riscos corporativos. Normalmente, apenas desenvolvedores e analistas de dados da empresa podem navegar e usar dados na plataforma. Eles não têm permissão para baixar dados detalhados em um computador local para análise. Após a exportação dos dados para um computador local, as operações realizadas neles não podem ser auditadas. O uso inadequado de dados ou ataques maliciosos podem resultar em mau uso e violações, causando incidentes de segurança de dados e repercussão pública negativa. Este cenário demonstra como bloquear a exportação de dados em tempo real.

Objetivo

Quando um usuário tenta exportar mais de 1.000 linhas de dados de uma só vez, o sistema bloqueia automaticamente a operação ou aciona um processo de aprovação.

Pré-requisitos

  • A solução baseia-se nas capacidades da Open Platform do DataWorks Enterprise Edition. Certifique-se de que o DataWorks esteja ativado.

  • O EventBridge deve estar ativado para receber os corpos das mensagens de eventos de operação do usuário. A extensão de comportamento de risco consome essas mensagens posteriormente.

  • Crie uma instância ECS ou prepare um data center on-premises para implantar a extensão de comportamento de risco.

Etapa 1: Ativar e configurar a assinatura de mensagens

  1. Ative e configure a assinatura de mensagens.

    Como o download de resultados de consulta não é uma operação no nível do workspace, este caso de uso utiliza o barramento padrão para receber mensagens de eventos de operação.

  2. Consulte eventos com o tipo dataworks:ResourcesDownload:DownloadResources.

  3. Clique em Event Details na coluna Actions para visualizar o corpo da mensagem do evento. Veja um exemplo abaixo:

    Importante
    • O conteúdo do corpo da mensagem fornece contexto para a avaliação de risco. Utilize os campos-chave da tabela a seguir como contexto para avaliação de risco em outros cenários semelhantes.

    • Para ler eventos do barramento padrão com um usuário RAM ou função RAM, conclua a autorização 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"
    }

    Descrição dos parâmetros principais:

    Parâmetro

    Descrição

    sqlText

    A consulta SQL.

    queryDwProjectId

    O ID do workspace que contém a fonte de dados consultada.

    moduleType

    A origem do download. Valores válidos:

    • develop_query: Consulta no Data Studio.

    • sqlx_query: Consulta no DataAnalysis.

    • dw_excel: Pasta de trabalho no DataAnalysis.

    operatorBaseId

    O UID do operador.

    datasourceId

    O ID da fonte de dados consultada.

    queryDwProjectName

    O nome do workspace que contém a fonte de dados consultada.

    dataRowSize

    O número de linhas de dados a serem baixadas.

    datasourceName

    O nome da fonte de dados consultada.

Etapa 2: Desenvolver e implantar a extensão

  1. Preparativos:

    Ative a assinatura de mensagens, registre uma extensão e obtenha as informações necessárias para desenvolvê-la. Para mais informações, consulte Desenvolver e implantar uma extensão: Serviço autogerenciado.

  2. Desenvolva e implante a extensão.

    Desenvolva e implante a extensão como um serviço de aplicativo com base nas informações obtidas. Para mais detalhes, veja Desenvolver e implantar uma extensão: Function Compute. As configurações de parâmetros principais e o código de exemplo estão disponíveis abaixo:

    • Ao registrar a extensão, em Processing Extension Point, selecione Pre-event for Resources Download.

    • O código a seguir apresenta um exemplo para o desenvolvimento da extensão:

      Importante
      • Esta extensão de exemplo usa o campo dataRowSize no corpo da mensagem de evento da Etapa 1 para verificar riscos com base no número de linhas a serem baixadas.

      • Ao configurar a resposta, se desejar acionar um processo de aprovação, garanta que a extensão retorne WARN de callbackExtensionRequest.setCheckResult() ao detectar comportamento de risco do usuário. Para bloquear a ação, callbackExtensionRequest.setCheckResult() deve retornar FAIL.

      • O código da extensão neste tópico usa o download de 1.000 registros de dados como exemplo. Se quiser que diferentes quantidades de registros baixados acionem fluxos de aprovação distintos, configure várias extensões. Para mais informações, consulte Etapa 3: Configurar uma regra de identificação de risco. Por exemplo:

        • A primeira extensão é acionada apenas para downloads de 0 a 2.000 registros e corresponde ao fluxo de aprovação 1.

        • A segunda extensão é acionada apenas para downloads de 2.001 ou mais registros e corresponde ao fluxo de aprovação 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;
      
          /**
           * Receives messages pushed from 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)) {
                  // Initialize the client.
                  Client client = dataWorksOpenApiClient.createClient();
                  try {
                      // Information about the parameters for the current event.
                      String messageId = jsonObj.getString("id");
                      JSONObject data = jsonObj.getObject("data", JSONObject.class);
                      // Long projectId = data.getLong("appId");
      
                      // Initialize the event callback.
                      CallbackExtensionRequest callbackExtensionRequest = new CallbackExtensionRequest();
                      callbackExtensionRequest.setMessageId(messageId);
                      callbackExtensionRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
                      JSONObject eventBody = data.getJSONObject("eventBody");
                      Long dataRowSize = eventBody.getLong("dataRowSize");
                      // Obtain the configurations of the extension option in the project.
                      GetOptionValueForProjectRequest getOptionValueForProjectRequest = new GetOptionValueForProjectRequest();
                      // The default project ID for the configuration information of a global extension point event is -1.
                      getOptionValueForProjectRequest.setProjectId("-1");
                      getOptionValueForProjectRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
                      GetOptionValueForProjectResponse getOptionValueForProjectResponse = client.getOptionValueForProject(getOptionValueForProjectRequest);
                      JSONObject jsonObject = JSON.parseObject(getOptionValueForProjectResponse.getBody().getOptionValue());
                      // Note: You must configure this parameter based on the format set in DataWorks.
                      Long maxDataRowSize = jsonObject.getLong("dataRowSize");
                      // Check whether the code contains a restricted function.
                      if (dataRowSize > 1000) {
                          callbackExtensionRequest.setCheckResult(EventCheckEnum.FAIL.getCode());
                          callbackExtensionRequest.setCheckMessage("The number of rows to download exceeds the limit.");
                      } else { // Successful callback.
                          callbackExtensionRequest.setCheckResult(EventCheckEnum.OK.getCode());
                      }
                      // Call back to DataWorks.
                      CallbackExtensionResponse acsResponse = client.callbackExtension(callbackExtensionRequest);
                      // The unique ID of the request, used for subsequent troubleshooting.
                      System.out.println("acsResponse:" + acsResponse.getBody().getRequestId());
                  } catch (Exception e) {
                      // Error description.
                      System.out.println("ErrMsg:" + e.getMessage());
                  }
              } else {
                  System.out.println("Failed to filter other events. Check the configuration steps.");
              }
          }
      }

Etapa 3: Configurar uma regra de identificação de risco

  1. Faça login no console do DataWorks. Na região de destino, clique em Data Governance > Security Center no painel de navegação à esquerda. Na página exibida, clique em Go to Security Center.

  2. No painel de navegação à esquerda, clique em Security Policy > Risk Identification rules.

  3. Configure um processo de aprovação para a extensão publicada. Para mais informações, consulte Configurar respostas a ameaças.image

Etapa 4: Ativar uma regra de identificação de risco

Ative a chave Enable para habilitar a extensão conforme solicitado.image

Etapa 5: Verificar os resultados

  1. Acesse a página Data Download.

  2. Clique em Download na coluna Actions do arquivo especificado.

    • Se a verificação for aprovada, prossiga com o download.

    • Caso a verificação falhe, o download será bloqueado ou você receberá um prompt para enviar uma solicitação.

Outros cenários semelhantes

Utilize outros campos do evento de download, como nome do workspace, detalhes da SQL, nome da fonte de dados e UID do usuário, para outros cenários de controle de risco em tempo real. Por exemplo:

  • Permitir ou negar downloads de dados com base no departamento (workspace) do usuário.

  • Bloquear downloads se a consulta SQL contiver campos sensíveis.

  • Implementar controle de risco escalonado. Por exemplo, exigir aprovação para downloads superiores a 20.000 registros e bloquear downloads acima de 50.000 registros.

  • Definir limites de download baseados em funções do workspace. Por exemplo, permitir que a função Developer baixe N registros e bloquear downloads que excedam esse limite. Também é possível permitir que a função Analyst baixe M registros e bloquear excessos. Isso requer o uso da operação de API ListProjectMembers - Consultar membros do workspace.

  • Estabelecer políticas diferentes de quantidade de download para cenários de desenvolvimento e análise de dados.