<h2>Introdução ao GuardDuty e Macie</h2>
<p>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.</p>
<p>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.</p>
<h2>Configuração Prática do GuardDuty</h2>
<h3>Ativação e Primeiros Passos</h3>
<p>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:</p>
<pre><code class="language-python">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']}")</code></pre>
<p>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.</p>
<h3>Interpretando Findings do GuardDuty</h3>
<p>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:</p>
<pre><code class="language-python"># 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")</code></pre>
<h2>Descoberta e Classificação de Dados Sensíveis com Macie</h2>
<h3>Ativação e Jobs de Descoberta</h3>
<p>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:</p>
<pre><code class="language-python">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}")</code></pre>
<h3>Analisando Descobertas de Macie</h3>
<p>Uma vez que o job execute, Macie gera findings detalhados sobre quais dados sensíveis foram encontrados e onde. Você pode consultar isto programaticamente:</p>
<pre><code class="language-python"># 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")</code></pre>
<h2>Orquestração e Resposta Automática</h2>
<h3>Integrando com EventBridge e Lambda</h3>
<p>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:</p>
<pre><code class="language-python">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'}</code></pre>
<p>Para conectar isso, crie uma regra EventBridge simples em Terraform ou CloudFormation que dispare quando GuardDuty publicar findings com severidade ≥ 7.</p>
<h2>Conclusão</h2>
<p>Dominar GuardDuty e Macie significa três coisas: <strong>primeiro</strong>, entender que detecção é contínua e deve ser automatizada — não é um relatório mensal, é um sistema vivo; <strong>segundo</strong>, que proteção de dados requer descoberta antes da proteção — Macie oferece visibilidade que a maioria das organizações não possui; e <strong>terceiro</strong>, que a detecção sem resposta é inútil — integre com EventBridge e Lambda para fechar o ciclo.</p>
<p>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.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://docs.aws.amazon.com/guardduty/" target="_blank" rel="noopener noreferrer">AWS GuardDuty - Documentação Oficial</a></li>
<li><a href="https://docs.aws.amazon.com/macie/latest/user/" target="_blank" rel="noopener noreferrer">Amazon Macie - User Guide</a></li>
<li><a href="https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings_cloudwatch_events.html" target="_blank" rel="noopener noreferrer">EventBridge Integration with GuardDuty</a></li>
<li><a href="https://aws.amazon.com/architecture/security-identity-compliance/" target="_blank" rel="noopener noreferrer">AWS Security Best Practices</a></li>
<li><a href="https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/guardduty.html" target="_blank" rel="noopener noreferrer">Boto3 GuardDuty Client Reference</a></li>
</ul>