Pular para o conteúdo
Automação e Scripts15 min de leituraAtualizado em Por Equipe GUARDIASEC

Automação de segurança com Python: scripts que poupam tempo

Depois do básico, o salto de valor vem de organizar o código: funções que se reaproveitam, dados em JSON, chamadas a APIs e scripts que aceitam parâmetros.

Um script que conta linhas de log resolve um problema. O salto de valor vem quando você para de escrever scripts descartáveis e começa a montar automações que se reaproveitam, se combinam e rodam sozinhas. Esse é o território do Python intermediário: funções bem definidas, trabalho com dados estruturados como JSON, integração com sistemas via API e scripts que aceitam parâmetros em vez de ter valores fixos no código.

Este é o segundo guia da trilha. O foco continua defensivo: automatizar tarefas de operação e análise que hoje consomem tempo manual. A ideia é transformar aquele script útil, mas engessado, em uma ferramenta flexível que outras pessoas do time também conseguem usar.

Funções que se reaproveitam

A primeira mudança de patamar é organizar o código em funções. Em vez de um bloco corrido que faz tudo, você separa cada tarefa em uma função com um nome claro e uma responsabilidade só. Isso torna o código mais fácil de ler, de testar e de reaproveitar em outro script. Uma função que lê um log e devolve as falhas serve tanto para um relatório quanto para um alerta.

função reutilizável para contar falhas por origem
def contar_falhas_por_origem(caminho):
    contagem = {}
    with open(caminho, encoding="utf-8") as arquivo:
        for linha in arquivo:
            if "Failed password" in linha:
                origem = linha.split("from ")[-1].split()[0]
                contagem[origem] = contagem.get(origem, 0) + 1
    return contagem

for origem, total in contar_falhas_por_origem("auth.log").items():
    print(f"{origem}: {total} falhas")

Repare que a função não imprime nada; ela devolve os dados. Quem chama decide o que fazer com o resultado, se é imprimir, salvar ou disparar um alerta. Essa separação entre calcular e agir é uma das ideias que mais melhoram um código de automação.

Trabalhar com dados estruturados

Boa parte dos dados que circulam em segurança vem em formatos estruturados, e JSON é o mais comum. Respostas de API, configurações e exportações de ferramentas costumam ser JSON. Python lê e escreve JSON de forma nativa, transformando esse texto em dicionários e listas com que você já sabe trabalhar. Dominar isso abre a porta para integrar praticamente qualquer sistema moderno.

ler um inventário de hosts em JSON
import json

with open("hosts.json", encoding="utf-8") as arquivo:
    hosts = json.load(arquivo)

sem_mfa = [h["nome"] for h in hosts if not h.get("mfa")]
print("Hosts sem MFA:", sem_mfa)

Com poucos comandos, você lê um inventário, filtra o que interessa e produz uma lista acionável. O mesmo padrão serve para revisar configurações, cruzar dados de fontes diferentes e gerar relatórios. É o tipo de tarefa que, feita à mão, consome uma tarde e, em Python, roda em segundos.

Integrar sistemas via API

Muitas ferramentas de segurança e serviços de nuvem oferecem uma API. É por ela que você consulta dados, checa status e automatiza ações sem depender de cliques em uma interface. Em Python, a biblioteca requests torna essas chamadas simples. O cuidado central é com autenticação: a chave ou token de acesso deve vir de uma variável de ambiente, nunca do código.

consultar uma API com token de ambiente
import os
import requests

token = os.environ["API_TOKEN"]
resposta = requests.get(
    "https://api.exemplo.com/v1/status",
    headers={"Authorization": f"Bearer {token}"},
    timeout=10,
)
resposta.raise_for_status()
print(resposta.json())

Dois detalhes fazem diferença nesse código. O timeout evita que o script trave para sempre se o serviço não responder. E o raise_for_status faz o script falhar de forma clara quando a API retorna um erro, em vez de seguir com dados inválidos. Automação confiável falha alto e cedo, não em silêncio.

Registrar a execução com logging

Um script que roda sozinho precisa deixar rastro do que fez. Trocar os prints pelo módulo logging da biblioteca padrão dá controle sobre o nível da mensagem, o formato com data e hora e o destino, seja o terminal ou um arquivo. Quando algo der errado às três da manhã, é esse registro que permite entender o que aconteceu sem reproduzir o problema no escuro.

logging simples com data, nível e mensagem
import logging

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s",
)
log = logging.getLogger("checagem")

log.info("Iniciando a checagem de hosts")
log.warning("Host sem MFA encontrado: web-03")

Cuidado com o que entra no log. Nunca registre senhas, tokens ou dados pessoais sensíveis, porque o arquivo de log costuma ser menos protegido do que o segredo original e vira uma fonte de vazamento. Registre o suficiente para investigar, sem transformar o log em um novo problema de privacidade.

Scripts com parâmetros e agendamento

Um script com valores fixos no código serve para um caso só. Aceitar parâmetros, como o caminho de um arquivo ou o nome de um ambiente, transforma o mesmo script em uma ferramenta que atende vários casos. A biblioteca padrão argparse resolve isso e ainda gera uma ajuda automática, o que facilita para outras pessoas usarem o seu script sem ler o código.

Quando o script está pronto e confiável, o passo seguinte é rodá-lo sozinho, de forma agendada, para que a checagem aconteça sem alguém lembrar de executá-la. Aqui vale reforçar os cuidados de segurança: o script agendado precisa dos segredos protegidos, do menor privilégio possível e de um registro do que fez, para que você confie no que roda no automático.

Dar o próximo passo na trilha

Para escrever automações assim, você precisa estar confortável com funções, estruturas de dados e o tratamento de erros da linguagem. É o conteúdo que separa quem copia um exemplo de quem monta a própria ferramenta. Se o básico já está firme e você quer dar esse passo, o Curso de Python Intermediário do Valor Final cobre exatamente essa faixa.

Ele é o segundo curso da trilha gratuita e parte de quem já domina variáveis, condições, laços, listas e funções, para aprofundar em estruturar código de verdade. É a base que sustenta as automações deste guia e prepara o terreno para o próximo, sobre construir ferramentas maiores e mais duráveis.

Checklist prático

  • Separar o código em funções com responsabilidade única
  • Deixar as funções calcularem e devolverem, sem misturar com a ação
  • Ler e escrever dados estruturados em JSON
  • Integrar sistemas via API com a biblioteca requests
  • Sempre usar timeout e verificar erros nas chamadas de API
  • Ler segredos de variáveis de ambiente
  • Aceitar parâmetros com argparse em vez de valores fixos
  • Usar o módulo logging em vez de prints para registrar a execução
  • Nunca registrar senhas, tokens ou dados sensíveis nos logs
  • Registrar o que o script faz quando roda agendado

Boas práticas

  • Separe calcular de agir: funções devolvem, o chamador decide
  • Trate JSON como estrutura, não como texto para recortar
  • Faça a automação falhar alto e cedo, nunca em silêncio
  • Parametrize o script para atender vários casos
  • Proteja segredos e privilégios em scripts agendados

Erros comuns

  • Escrever um bloco corrido que faz tudo

    O código fica difícil de ler, testar e reaproveitar.

  • Chamar uma API sem timeout

    O script trava indefinidamente quando o serviço não responde.

  • Ignorar o código de erro retornado pela API

    A automação segue com dados inválidos e produz resultado errado.

  • Fixar caminhos e ambientes no código

    O script serve a um caso só e precisa ser editado a cada uso.

Quando procurar apoio especializado

Quando as automações passam a coletar dados de segurança, disparar ações e rodar sem supervisão, a arquitetura e os controles em volta importam tanto quanto o código. A GUARDIASEC ajuda a desenhar essas automações de forma segura, com Consultoria em Segurança e apoio de Monitoramento e Resposta, cuidando de privilégios, segredos e rastreabilidade.

Perguntas frequentes

Qual biblioteca usar para chamar APIs em Python?

A biblioteca requests é a escolha mais comum por ser simples e legível. Ela cobre os casos do dia a dia de consultar e enviar dados a APIs. Ao usá-la, sempre defina um timeout para o script não travar e verifique o status da resposta para tratar erros. Para projetos maiores existem alternativas assíncronas, mas requests atende bem a maioria das automações.

Como guardar tokens e senhas usados nos scripts?

Fora do código. O padrão é ler esses valores de variáveis de ambiente ou de um cofre de segredos, de modo que a credencial nunca fique escrita no arquivo nem seja versionada. Isso vale ainda mais para scripts agendados, que rodam sozinhos: um token exposto no código é um dos vazamentos mais fáceis de acontecer e de evitar.

Vale a pena automatizar tarefas de segurança?

Na maioria dos casos, sim, quando a tarefa é repetitiva e bem definida. Automatizar libera tempo para o que exige julgamento humano e reduz o erro de fazer a mesma coisa na mão toda vez. O cuidado é automatizar com responsabilidade: menor privilégio, segredos protegidos, registro do que foi feito e testes antes de apontar para produção.

Preciso do curso intermediário se já sei o básico?

Se você já escreve scripts simples mas sente dificuldade para organizá-los em funções, lidar com JSON e integrar APIs, o intermediário é exatamente esse degrau. O Curso de Python Intermediário do Valor Final parte de quem domina variáveis, condições, laços, listas e funções e ensina a estruturar código de verdade, que é o que este guia coloca em prática.

Como agendo um script Python para rodar sozinho?

Em Linux, o cron é o caminho mais comum para execuções periódicas; em Windows, o Agendador de Tarefas cumpre o mesmo papel. Em nuvem, dá para agendar a execução com serviços gerenciados. Em todos os casos, o script agendado precisa dos segredos protegidos, do menor privilégio necessário e de um registro do que fez, porque ninguém estará olhando na hora em que ele roda.

Qual a diferença entre print e logging?

O print apenas escreve texto na saída padrão. O logging dá controle sobre o nível da mensagem, como informativo, aviso ou erro, sobre o formato com data e hora e sobre o destino, seja o terminal ou um arquivo. Para um teste rápido, print resolve; para um script que roda sozinho e precisa deixar rastro de investigação, o logging é o certo.

Próximo passo

Vamos avaliar os riscos do seu ambiente?

Conte seu cenário e definimos juntos o escopo certo. O objetivo é reduzir caminhos prováveis de ataque e elevar a maturidade de segurança, sem promessas absolutas.