Criar ações personalizadas

Compatível com:

Na sua primeira integração personalizada, você definiu os parâmetros e criou uma ação Ping para testar a conexão. Este documento mostra como criar duas novas ações para sua integração personalizada:

  • Receber detalhes do domínio: recupera informações do domínio e apresenta o resultado no formato JSON.
  • Aprimorar entidades: aprimora entidades com detalhes do domínio.

Criar uma ação personalizada

Para criar uma ação personalizada, siga estas etapas:

  1. Acesse o ambiente de desenvolvimento integrado (IDE) e clique em Adicionar para adicionar um novo item de IDE.
  2. Selecione o botão de opção Ação.
  3. Nomeie a ação Get Domain Details e selecione a integração.
  4. Clique em Criar. O ambiente de desenvolvimento integrado gera um novo modelo com comentários e explicações de código integrados.

Configurar parâmetros de ação

Com base na documentação da API XML WHOIS, a ação Receber detalhes do domínio exige dois parâmetros: Check Availability e Domain Name. Para configurar esses parâmetros, siga estas etapas:

  1. No módulo do ambiente de desenvolvimento integrado, clique em Adicionar.
  2. Crie o primeiro parâmetro: preencha os campos em Verificar disponibilidade e clique em Salvar. Esse parâmetro indica se o domínio está disponível ou não, e o resultado será usado na automação que você criar mais tarde.
  3. Crie o segundo parâmetro: preencha os campos de Nome do domínio e clique em Salvar. Use esse campo para inserir o domínio que você quer que a ação verifique.

Editar a ação "Extrair detalhes do domínio"

Para editar a ação Receber detalhes do domínio, siga estas etapas:

  1. Copie o código fornecido para Get Domain Details e cole no IDE. Revise o código. O objeto precisa usar o método end da classe para retornar uma mensagem de saída e um valor de resultado. Por exemplo:
    siemplify.end(msg, None)
  2. Extrair parâmetros de integração e ação: os parâmetros de integração, como a chave de API, são extraídos usando a função siemplify.extract_configuration_param. Da mesma forma, os parâmetros de ação configurados, incluindo Domain Name e Check availability, são extraídos com a função siemplify.extract_action_param.
    
        api_key =
        siemplify.extract_configuration_param(provider_name=INTEGRATION_NAME,
        param_name="API Key") 
    url = f"https://www.whoisxmlapi.com/whoisserver/WhoisService?apiKey={api_key}&outputFormat=json" 
        domain = siemplify.extract_action_param(param_name="Domain Name",
        print_value=True) availability_check =
        siemplify.extract_action_param(param_name="Check availability",
        is_mandatory=False, print_value=True)
      
  3. Crie a solicitação e processe o resultado:
    1. Depois de extrair os parâmetros de integração e ação, você pode criar o URL de solicitação. O URL é criado com base no valor booleano do parâmetro availability_check.
    2. Quando o URL estiver pronto, envie uma solicitação ao site WHOIS.
    3. Analise a resposta do site e adicione os dados relevantes ao resultado da ação.
    4. Defina a mensagem de saída que será apresentada ao usuário e inclua o resultado JSON.
      
        # Add domain to scan
            url = f"{url}&domainName={domain}"
            # Determine availability check
            if availability_check.lower() == 'true':
                availability_check_qs = 1
            else:
                availability_check_qs = 0
            url = f"{url}&da={availability_check_qs}"
            response = requests.get(url)
            response.raise_for_status()
            # Add a Json result that can be used in the next steps of the playbook.
            siemplify.result.add_result_json(response.json())
            # Add the Json to the action result presented in the context details.
            siemplify.result.add_json("WhoisDetails", response.json())
            msg = f"Fetched data for {domain}"
            siemplify.end(msg, None)
        if __name__ == "__main__":
            main()
        

Adicionar um resultado JSON à ação

Como parte da ação Receber detalhes do domínio, clique em Receber detalhes do domínio para adicionar um exemplo em JSON. Use o exemplo JSON no designer de playbook no procedimento "Criar sua primeira automação" para extrair um campo específico no JSON.

  1. Copie o JSON: copie o JSON do exemplo de JSON do site WHOIS.
  2. Ative o ícone JSON: na guia Detalhes da IDE, ative a opção Incluir resultado JSON para que o ícone JSON fique visível na parte de cima da IDE.
  3. Importe o JSON: clique em file_json Gerenciar exemplo de JSON > login Importar exemplo de JSON.

Testar a ação

Para testar a ação criada, siga estas etapas:

  1. Acesse a guia Testes.
  2. Em Escopo, selecione seu Caso de teste e Instância de integração.
  3. Clique em apresentação de slides Reproduzir no ambiente de desenvolvimento integrado.
  4. Confira o resultado da ação na guia Teste. Você também pode revisar os registros e impressões na guia Saída de depuração após a conclusão do teste.

Criar um caso de teste

Se você não tiver casos de teste no seu ambiente, acesse Casos > Inserir alerta como caso de teste para criar um. Essa ação cria um caso de teste que aparece com o rótulo Teste na fila de casos. Depois de criar o caso de teste, volte ao ambiente de desenvolvimento integrado e escolha o caso de teste na lista.

Para criar um caso de teste, siga estas etapas:

  1. Acesse a página Casos e selecione um caso.
  2. Ingira o alerta como um caso de teste. Isso cria um novo caso com o rótulo Teste na fila de casos.

Depois de criar um caso de teste, volte ao ambiente de desenvolvimento integrado e selecione-o na lista.

Criar uma ação de enriquecimento

Esta parte do procedimento se concentra na criação de uma ação de enriquecimento para adicionar novos dados às entidades. Os dados enriquecidos podem ser visualizados no Explorador de entidades. Para criar uma ação de enriquecimento, siga estas etapas:

  1. No ambiente de desenvolvimento integrado, crie uma ação e nomeie-a como Enrich Entities.
  2. Copie e cole o seguinte código na ação:
    
      from SiemplifyAction import SiemplifyAction 
      from SiemplifyUtils import output_handler 
      from SiemplifyDataModel import EntityTypes
      
      import requests
      
      # Example Consts: 
      INTEGRATION_NAME = "My first Integration - Whois XML API" 
    
      SCRIPT_NAME = "WHOIS XML API EnrichEntities"
      
      @output_handler 
      def main():    
          siemplify = SiemplifyAction()    
          siemplify.script_name = SCRIPT_NAME    
          siemplify.LOGGER.info("================= Main - Param Init =================")     
    
          api_key =
          siemplify.extract_configuration_param(provider_name=INTEGRATION_NAME,
          param_name="API Key") url =
          f"https://www.whoisxmlapi.com/whoisserver/WhoisService?apiKey={api_key}&outputFormat=json"
          
          
          siemplify.LOGGER.info("----------------- Main - Started -----------------")
          output_message = "output message :" # human readable message, showed in UI
          as the action result successful_entities = [] # In case this actions
          contains entity based logic, collect successful entity.identifiers 
          
        for entity in siemplify.target_entities:        
        siemplify.LOGGER.info(f"processing entity {entity.identifier}")
          if (entity.entity_type == EntityTypes.HOSTNAME and not entity.is_internal)
          or entity.entity_type == EntityTypes.URL: entity_to_scan = entity.identifier
          
                scan_url = f"{url}&domainName={entity_to_scan}"              response = requests.get(scan_url)            
                response.raise_for_status()            
                register_details = response.json().get("WhoisRecord", {}).get("registrant", {})            if register_details:                
            entity.additional_properties.update(register_details)        successful_entities.append(entity) 
    
          if successful_entities:        
            output_message += "\n Successfully processed entities:\n {}".format("\n
            ".join([x.identifier for x in successful_entities]))
            siemplify.update_entities(successful_entities) # This is the actual
            enrichment (this function sends the data back to the server) 
        else:        
            output_message += "\n No entities where processed."      
      result_value = len(successful_entities) 
    
          siemplify.LOGGER.info("----------------- Main - Finished -----------------")    
          siemplify.end(output_message, result_value) 
    
      if __name__ == "__main__":    
          main()
      
  3. Extraia parâmetros. O script extrai a chave de API da configuração da integração. Essa chave é necessária para autenticar solicitações à API WHOIS XML.
  4. Identifique as entidades de destino. O script identifica quais entidades processar. Ele itera por todas as entidades e se concentra apenas em dois tipos:
    • Nomes de host não internos
    • URLs
    • 
        for entity in siemplify.target_entities:        
              siemplify.LOGGER.info(f"processing entity {entity.identifier}") if
              (entity.entity_type == EntityTypes.HOSTNAME and not entity.is_internal) or
              entity.entity_type == EntityTypes.URL: entity_to_scan = entity.identifier
        
  5. Analise o domínio e defina a etapa de enriquecimento da ação e da mensagem de saída. Essa ação é executada em um escopo de entidade e, portanto, não exige que você configure parâmetros específicos. Isso já está incorporado ao código:
    
      scan_url = f"{url}&domainName={entity_to_scan}"
    
                  response = requests.get(scan_url) response.raise_for_status()
                  register_details = response.json().get("WhoisRecord",
                  {}).get("registrant", {}) if register_details:
                      entity.additional_properties.update(register_details)
                      successful_entities.append(entity)
    
    
          if successful_entities:
              output_message += "\n Successfully processed entities:\n {}".format("\n
              ".join([x.identifier for x in successful_entities]))
              siemplify.update_entities(successful_entities) # This is the actual
              enrichment (this function sends the data back to the server)
          else:
              output_message += "\n No entities where processed."
    
    
          result_value = len(successful_entities) 
      
  6. Ative a ação e clique em Salvar. Agora você criou uma integração personalizada com três ações personalizadas:
    • Uma ação de ping para testar a conexão com o produto da API XML do WHOIS.
    • Uma ação Get Domain Details para extrair dados sobre um domínio e apresentá-los como um resultado JSON.
    • Uma ação Enriquecer entidades para adicionar mais dados às entidades de destino, que podem ser vistos no módulo Explorador de entidades.

    Agora você já pode criar sua primeira automação usando as ações personalizadas.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.