Coletar registros do MuleSoft Anypoint
Este documento explica como ingerir eventos de trilha de auditoria dos registros da plataforma MuleSoft Anypoint no Google Security Operations usando o AWS S3.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Instância do Google SecOps
- Acesso privilegiado ao MuleSoft
- Acesso privilegiado à AWS
Encontrar o ID da organização do MuleSoft
- Faça login na plataforma Anypoint.
- Acesse Menu > Gerenciamento de acesso.
- Na tabela Grupos empresariais, clique no nome da sua organização.
- Copie o ID da organização (por exemplo,
0a12b3c4-d5e6-789f-1021-1a2b34cd5e6f
).
- Ou acesse Grupos empresariais do MuleSoft e copie o ID do URL.
Configurar o bucket do AWS S3 e o IAM para o Google SecOps
- Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket.
- Salve o Nome e a Região do bucket para referência futura (por exemplo,
mulesoft-audit-logs
). - Crie um usuário seguindo este guia: Como criar um usuário do IAM.
- Selecione o usuário criado.
- Selecione a guia Credenciais de segurança.
- Clique em Criar chave de acesso na seção Chaves de acesso.
- Selecione Serviço de terceiros como Caso de uso.
- Clique em Próxima.
- Opcional: adicione uma tag de descrição.
- Clique em Criar chave de acesso.
- Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione a guia Permissões.
- Clique em Adicionar permissões na seção Políticas de permissões.
- Selecione Adicionar permissões.
- Selecione Anexar políticas diretamente.
- Pesquise e selecione a política AmazonS3FullAccess.
- Clique em Próxima.
- Clique em Adicionar permissões
Criar o app conectado do MuleSoft
- Faça login na plataforma Anypoint.
- Acesse Gerenciamento de acesso > Apps conectados > Criar app.
- Informe os seguintes detalhes de configuração:
- Nome do app: insira um nome exclusivo (por exemplo,
Google SecOps export
). - Selecione O app age em seu próprio nome (credenciais do cliente).
- Clique em Adicionar escopos → Leitor de registros de auditoria → Próxima.
- Selecione todos os grupos de empresas cujos registros você precisa.
- Clique em Próxima > Adicionar escopos.
- Nome do app: insira um nome exclusivo (por exemplo,
- Clique em Salvar e copie o ID do cliente e a chave secreta do cliente.
Configurar a política e o papel do IAM para uploads do S3
JSON da política (substitua
mulesoft-audit-logs
pelo nome do seu bucket):{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutAuditObjects", "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": "arn:aws:s3:::mulesoft-audit-logs/*" } ] }
Acesse Console da AWS > IAM > Políticas > Criar política > guia JSON.
Copie e cole a política.
Clique em Próxima > Criar política.
Acesse IAM > Funções > Criar função > Serviço da AWS > Lambda.
Anexe a política recém-criada.
Nomeie a função como
WriteMulesoftToS3Role
e clique em Criar função.
Criar a função Lambda
Configuração | Valor |
---|---|
Nome | mulesoft_audit_to_s3 |
Ambiente de execução | Python 3.13 |
Arquitetura | x86_64 |
Função de execução | Usar > WriteMulesoftToS3Role |
Depois que a função for criada, abra a guia Código, exclua o stub e insira o seguinte código (
mulesoft_audit_to_s3.py
).#!/usr/bin/env python3 import os, json, gzip, io, uuid, datetime as dt, urllib.request, urllib.error, urllib.parse import boto3 ORG_ID = os.environ["MULE_ORG_ID"] CLIENT_ID = os.environ["CLIENT_ID"] CLIENT_SECRET = os.environ["CLIENT_SECRET"] S3_BUCKET = os.environ["S3_BUCKET_NAME"] TOKEN_URL = "https://anypoint.mulesoft.com/accounts/api/v2/oauth2/token" QUERY_URL = f"https://anypoint.mulesoft.com/audit/v2/organizations/{ORG_ID}/query" def http_post(url, data, headers=None): raw = json.dumps(data).encode() if headers else urllib.parse.urlencode(data).encode() req = urllib.request.Request(url, raw, headers or {}) try: with urllib.request.urlopen(req, timeout=30) as r: return json.loads(r.read()) except urllib.error.HTTPError as e: print("MuleSoft error body →", e.read().decode()) raise def get_token(): return http_post(TOKEN_URL, { "grant_type": "client_credentials", "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET })["access_token"] def fetch_audit(token, start, end): headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } body = { "startDate": f"{start.isoformat(timespec='milliseconds')}Z", "endDate": f"{end.isoformat(timespec='milliseconds')}Z", "limit": 200, "offset": 0, "ascending": False } while True: data = http_post(QUERY_URL, body, headers) if not data.get("data"): break yield from data["data"] body["offset"] += body["limit"] def upload(events, ts): key = f"{ts:%Y/%m/%d}/mulesoft-audit-{uuid.uuid4()}.json.gz" buf = io.BytesIO() with gzip.GzipFile(fileobj=buf, mode="w") as gz: for ev in events: gz.write((json.dumps(ev) + "\n").encode()) buf.seek(0) boto3.client("s3").upload_fileobj(buf, S3_BUCKET, key) def lambda_handler(event=None, context=None): now = dt.datetime.utcnow().replace(microsecond=0) start = now - dt.timedelta(days=1) token = get_token() events = list(fetch_audit(token, start, now)) if events: upload(events, start) print(f"Uploaded {len(events)} events") else: print("No events in the last 24 h") # For local testing if __name__ == "__main__": lambda_handler()
Acesse Configuração > Variáveis de ambiente > Editar > Adicionar nova variável de ambiente.
Insira as variáveis de ambiente a seguir, substituindo pelo seu valor.
Chave Valor de exemplo MULE_ORG_ID
your_org_id
CLIENT_ID
your_client_id
CLIENT_SECRET
your_client_secret
S3_BUCKET_NAME
mulesoft-audit-logs
Programar a função do Lambda (EventBridge Scheduler)
- Acesse Configuração > Gatilhos > Adicionar gatilho > EventBridge Scheduler > Criar regra.
- Informe os seguintes detalhes de configuração:
- Nome:
daily-mulesoft-audit export
. - Padrão de programação: expressão cron.
- Expressão:
0 2 * * *
(executado diariamente às 02:00 UTC).
- Nome:
- Deixe o restante como padrão e clique em Criar.
Configurar um feed no Google SecOps para ingerir os registros do MuleSoft
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
MuleSoft Logs
). - Selecione Amazon S3 V2 como o Tipo de origem.
- Selecione Mulesoft como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
- URI do S3: o URI do bucket
s3://mulesoft-audit-logs/
- Substitua
mulesoft-audit-logs
pelo nome real do bucket.
- Substitua
Opções de exclusão de fontes: selecione a opção de exclusão de acordo com sua preferência.
Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
ID da chave de acesso: chave de acesso do usuário com acesso ao bucket do S3.
Chave de acesso secreta: chave secreta do usuário com acesso ao bucket do S3.
Namespace do recurso: o namespace do recurso.
Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.
- URI do S3: o URI do bucket
Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.