Introdução ao GuardDuty e Macie
O AWS GuardDuty e o Amazon Macie são serviços de segurança gerenciados que funcionam como seus "olhos" na nuvem. GuardDuty detecta atividades maliciosas e não autorizadas em sua infraestrutura AWS, analisando fluxos de rede, logs de DNS e eventos de API. Macie, por sua vez, é especializado em descobrir e proteger dados sensíveis como informações de identificação pessoal (PII), dados de cartão de crédito e segredos de negócio usando aprendizado de máquina.
Para profissionais que gerenciam ambientes AWS em produção, estes serviços são não-negociáveis. Não se trata apenas de compliance — trata-se de reduzir drasticamente o tempo entre detecção e resposta a incidentes. Enquanto você dorme, eles trabalham 24/7 analisando bilhões de eventos.
Configuração Prática do GuardDuty
Ativação e Primeiros Passos
Ativar GuardDuty é simples, mas sua configuração estratégica é onde reside o valor. Você pode ativá-lo via AWS Management Console ou programaticamente com Boto3:
import boto3
guardduty_client = boto3.client('guardduty', region_name='us-east-1')
# Criar um detector
response = guardduty_client.create_detector(
Enable=True,
FindingPublishingFrequency='FIFTEEN_MINUTES'
)
detector_id = response['DetectorId']
print(f"GuardDuty detector criado: {detector_id}")
# Listar detectors
detectors = guardduty_client.list_detectors()
print(f"Detectors ativos: {detectors['DetectorIds']}")
Comece com frequência de publicação de 15 minutos em desenvolvimento — isso oferece um bom balanço entre latência e volume de dados. Em produção, ajuste conforme sua capacidade de resposta.
Interpretando Findings do GuardDuty
GuardDuty classifica ameaças por severidade e tipo. Cada finding contém contexto crucial: qual recurso, quando, como e por quê. Aqui está como recuperar e filtrar findings:
# Obter findings com severidade Alta
findings_response = guardduty_client.list_findings(
DetectorId=detector_id,
FindingCriteria={
'Criterion': {
'severity': {
'Gte': 7
},
'updatedAt': {
'Gte': 1609459200000 # timestamp em ms
}
}
}
)
finding_ids = findings_response['FindingIds']
# Detalhar cada finding
if finding_ids:
details = guardduty_client.get_findings(
DetectorId=detector_id,
FindingIds=finding_ids[:10] # primeiros 10
)
for finding in details['Findings']:
print(f"Tipo: {finding['Type']}")
print(f"Severidade: {finding['Severity']}")
print(f"Recurso: {finding['Resource']}")
print(f"Descrição: {finding['Description']}\n")
Descoberta e Classificação de Dados Sensíveis com Macie
Ativação e Jobs de Descoberta
Macie requer que você execute jobs que scannem seus buckets S3. Diferente de GuardDuty (que é sempre ativo), Macie trabalha com jobs sob demanda ou agendados. A granularidade aqui importa: você pode direcionar buckets específicos e definir critérios de inclusão/exclusão:
import boto3
from datetime import datetime
macie_client = boto3.client('macie2', region_name='us-east-1')
# Ativar Macie (one-time)
macie_client.enable_macie()
print("Macie ativado")
# Criar job de descoberta
job_response = macie_client.create_classification_job(
jobType='ONE_TIME',
name=f'scan-sensitive-data-{datetime.now().strftime("%Y%m%d")}',
description='Descobrir PII e dados de cartão de crédito',
s3JobDefinition={
'bucketDefinitions': [
{
'accountId': '123456789012',
'buckets': ['meu-bucket-producao']
}
],
'scoping': {
'includes': {
'and': [
{
'simpleScopeTerm': {
'comparator': 'EQ',
'key': 'OBJECT_EXTENSION',
'values': ['csv', 'json', 'xlsx', 'txt']
}
}
]
}
}
},
samplingPercentage=100
)
job_id = job_response['jobId']
print(f"Job criado: {job_id}")
Analisando Descobertas de Macie
Uma vez que o job execute, Macie gera findings detalhados sobre quais dados sensíveis foram encontrados e onde. Você pode consultar isto programaticamente:
# Aguardar conclusão e recuperar findings (em produção, use eventos SNS)
findings = macie_client.list_findings(
findingCriteria={
'criterion': {
'type': {
'eq': ['SensitiveData:S3Object/Personal']
},
'classificationDetails.result.sensitiveData.category': {
'eq': ['FINANCIAL_INFORMATION', 'PERSONAL_INFORMATION']
}
}
},
sortCriteria={
'attributeName': 'severity',
'orderBy': 'DESC'
}
)
for finding_summary in findings['findings']:
finding_id = finding_summary['id']
# Detalhar cada finding
detail = macie_client.get_finding(findingId=finding_id)
print(f"S3 Object: {detail['s3Object']['bucket']['name']}/{detail['s3Object']['key']}")
print(f"Dados Sensíveis: {detail['classificationDetails']['result']['sensitiveData']}")
print(f"Severity: {detail['severity']['score']}\n")
Orquestração e Resposta Automática
Integrando com EventBridge e Lambda
Detectar ameaças é apenas metade da batalha. A verdadeira maturidade está em responder automaticamente. Use AWS EventBridge para disparar ações quando achados críticos surgem:
import json
import boto3
# Esta função Lambda é acionada por GuardDuty findings via EventBridge
def lambda_handler(event, context):
"""
Exemplo: isolar instância EC2 comprometida automaticamente
"""
detail = event['detail']
# Filtrar apenas findings de severidade crítica
if detail['severity'] < 7:
return {'statusCode': 200, 'body': 'Severidade baixa, ignorando'}
# Extrair informações
finding_type = detail['type']
resource_type = detail['resource']['resourceType']
if resource_type == 'Instance':
instance_id = detail['resource']['instanceDetails']['instanceId']
region = detail['region']
# Isolar a instância com SG restritivo
ec2 = boto3.client('ec2', region_name=region)
try:
ec2.modify_instance_attribute(
InstanceId=instance_id,
Groups=['sg-isolation'] # SG sem saída
)
print(f"Instância {instance_id} isolada com sucesso")
# Notificar time de segurança
sns = boto3.client('sns')
sns.publish(
TopicArn='arn:aws:sns:region:account:security-alerts',
Subject=f'CRÍTICO: {finding_type}',
Message=f'Instância {instance_id} isolada devido a {finding_type}'
)
except Exception as e:
print(f"Erro ao isolar instância: {e}")
return {'statusCode': 500, 'body': str(e)}
return {'statusCode': 200, 'body': 'Ação executada'}
Para conectar isso, crie uma regra EventBridge simples em Terraform ou CloudFormation que dispare quando GuardDuty publicar findings com severidade ≥ 7.
Conclusão
Dominar GuardDuty e Macie significa três coisas: primeiro, entender que detecção é contínua e deve ser automatizada — não é um relatório mensal, é um sistema vivo; segundo, que proteção de dados requer descoberta antes da proteção — Macie oferece visibilidade que a maioria das organizações não possui; e terceiro, que a detecção sem resposta é inútil — integre com EventBridge e Lambda para fechar o ciclo.
Comece pequeno: ative GuardDuty hoje, explore seus findings por uma semana, depois adicione Macie para um bucket crítico. A segurança é iterativa, e estes serviços crescem com sua maturidade.