Top Announcements of AWS re:Invent 2025

🚀 Introdução O AWS re:Invent 2025 aconteceu em Las Vegas e trouxe uma série de anúncios revolucionários que vão transformar como trabalhamos com cloud computing. Como especialista em AWS, vou compartilhar os principais lançamentos e seu impacto prático. Este evento é sempre um marco para a comunidade tech, e este ano não foi diferente. Vamos explorar os anúncios mais importantes e como eles podem beneficiar seus projetos. 📊 Analytics AWS Clean Rooms - Geração de Datasets com Privacidade Treine modelos de ML em dados colaborativos sensíveis gerando datasets sintéticos que preservam padrões estatísticos enquanto protegem a privacidade individual através de níveis configuráveis de ruído e proteção contra re-identificação. ...

December 16, 2025 · 8 min · 1587 words · Matheus Costa

Segurança Avançada no Amazon S3: Prevenindo Vazamentos de Dados

Introdução O Amazon S3 é um dos serviços mais utilizados da AWS, armazenando trilhões de objetos globalmente. Com essa popularidade, vem a responsabilidade de implementar segurança robusta para proteger dados sensíveis contra vazamentos e acessos não autorizados. Principais Ameaças ao S3 1. Configurações Inseguras Buckets públicos não intencionais Políticas de acesso permissivas Falta de criptografia Logs de acesso desabilitados 2. Ataques Comuns Data Exfiltration - Extração não autorizada de dados Privilege Escalation - Elevação de privilégios Insider Threats - Ameaças internas Credential Compromise - Credenciais comprometidas Arquitetura de Segurança em Camadas Camada 1: Controle de Acesso IAM Policies Granulares { "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictToSpecificBucket", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::secure-data-bucket/*", "Condition": { "StringEquals": { "s3:x-amz-server-side-encryption": "aws:kms" }, "StringLike": { "s3:x-amz-server-side-encryption-context:project": "sensitive-project" } } }, { "Sid": "DenyUnencryptedUploads", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::secure-data-bucket/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } } ] } Bucket Policies com Condições Restritivas { "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictToVPCEndpoint", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::secure-data-bucket", "arn:aws:s3:::secure-data-bucket/*" ], "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1234567890abcdef0" } } }, { "Sid": "RequireSSLRequestsOnly", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::secure-data-bucket", "arn:aws:s3:::secure-data-bucket/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } } } ] } Camada 2: Criptografia Server-Side Encryption com KMS # Criar chave KMS dedicada aws kms create-key \ --description "S3 encryption key for sensitive data" \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT # Configurar criptografia padrão no bucket aws s3api put-bucket-encryption \ --bucket secure-data-bucket \ --server-side-encryption-configuration '{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "arn:aws:kms:region:account:key/key-id" }, "BucketKeyEnabled": true } ] }' Client-Side Encryption import boto3 from botocore.client import Config import io # Configurar cliente S3 com criptografia s3_client = boto3.client( 's3', config=Config( signature_version='s3v4', s3={ 'addressing_style': 'virtual' } ) ) def upload_encrypted_object(bucket, key, data, kms_key_id): """Upload objeto com criptografia KMS""" response = s3_client.put_object( Bucket=bucket, Key=key, Body=data, ServerSideEncryption='aws:kms', SSEKMSKeyId=kms_key_id, Metadata={ 'classification': 'confidential', 'encrypted': 'true' } ) return response # Exemplo de uso upload_encrypted_object( bucket='secure-data-bucket', key='sensitive/document.pdf', data=open('document.pdf', 'rb'), kms_key_id='arn:aws:kms:region:account:key/key-id' ) Camada 3: Monitoramento e Auditoria CloudTrail para S3 Data Events { "Trail": { "Name": "S3DataEventsTrail", "S3BucketName": "audit-logs-bucket", "EventSelectors": [ { "ReadWriteType": "All", "IncludeManagementEvents": false, "DataResources": [ { "Type": "AWS::S3::Object", "Values": [ "arn:aws:s3:::secure-data-bucket/*" ] } ] } ] } } S3 Access Logging # Habilitar access logging aws s3api put-bucket-logging \ --bucket secure-data-bucket \ --bucket-logging-status '{ "LoggingEnabled": { "TargetBucket": "access-logs-bucket", "TargetPrefix": "secure-data-bucket-logs/" } }' Implementação de Controles Avançados 1. S3 Object Lock Configuração de Retenção Legal # Habilitar Object Lock no bucket aws s3api create-bucket \ --bucket immutable-data-bucket \ --object-lock-enabled-for-bucket # Configurar retenção padrão aws s3api put-object-lock-configuration \ --bucket immutable-data-bucket \ --object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "GOVERNANCE", "Years": 7 } } }' Upload com Retenção Específica def upload_with_retention(bucket, key, data, retention_days): """Upload objeto com retenção específica""" from datetime import datetime, timedelta retention_date = datetime.utcnow() + timedelta(days=retention_days) response = s3_client.put_object( Bucket=bucket, Key=key, Body=data, ObjectLockMode='GOVERNANCE', ObjectLockRetainUntilDate=retention_date, Metadata={ 'retention-period': str(retention_days), 'legal-hold': 'active' } ) return response 2. S3 Intelligent Tiering Configuração Automática de Classes de Armazenamento { "Id": "IntelligentTieringConfig", "Status": "Enabled", "Filter": { "Prefix": "sensitive-data/" }, "Tierings": [ { "Days": 90, "AccessTier": "ARCHIVE_ACCESS" }, { "Days": 180, "AccessTier": "DEEP_ARCHIVE_ACCESS" } ] } 3. Cross-Region Replication para DR Configuração de Replicação Segura { "Role": "arn:aws:iam::account:role/replication-role", "Rules": [ { "ID": "SecureReplication", "Status": "Enabled", "Filter": { "Prefix": "critical-data/" }, "Destination": { "Bucket": "arn:aws:s3:::backup-bucket-dr", "StorageClass": "STANDARD_IA", "EncryptionConfiguration": { "ReplicaKmsKeyID": "arn:aws:kms:region:account:key/backup-key-id" } } } ] } Detecção de Anomalias 1. CloudWatch Metrics Customizadas import boto3 import json from datetime import datetime, timedelta def analyze_s3_access_patterns(): """Analisar padrões de acesso suspeitos""" cloudwatch = boto3.client('cloudwatch') s3 = boto3.client('s3') # Métricas de acesso por hora end_time = datetime.utcnow() start_time = end_time - timedelta(hours=24) # Buscar métricas de requests response = cloudwatch.get_metric_statistics( Namespace='AWS/S3', MetricName='NumberOfObjects', Dimensions=[ { 'Name': 'BucketName', 'Value': 'secure-data-bucket' } ], StartTime=start_time, EndTime=end_time, Period=3600, Statistics=['Sum'] ) # Detectar picos anômalos values = [point['Sum'] for point in response['Datapoints']] avg = sum(values) / len(values) for point in response['Datapoints']: if point['Sum'] > avg * 3: # 3x acima da média send_alert(f"Anomalous S3 access detected: {point['Sum']} requests at {point['Timestamp']}") def send_alert(message): """Enviar alerta via SNS""" sns = boto3.client('sns') sns.publish( TopicArn='arn:aws:sns:region:account:security-alerts', Message=message, Subject='S3 Security Alert' ) 2. GuardDuty para S3 Configuração de Proteção S3 # Habilitar proteção S3 no GuardDuty aws guardduty create-s3-protection \ --detector-id detector-id \ --enable Resposta Automatizada a Findings def handle_guardduty_s3_finding(event, context): """Responder automaticamente a findings do GuardDuty""" finding = json.loads(event['Records'][0]['Sns']['Message']) if 'S3' in finding['type']: bucket_name = finding['service']['resourceRole']['bucketName'] # Ações baseadas no tipo de finding if 'Exfiltration' in finding['type']: # Bloquear acesso público imediatamente block_public_access(bucket_name) elif 'Persistence' in finding['type']: # Revisar políticas de bucket audit_bucket_policies(bucket_name) # Notificar equipe de segurança notify_security_team(finding) def block_public_access(bucket_name): """Bloquear acesso público ao bucket""" s3 = boto3.client('s3') s3.put_public_access_block( Bucket=bucket_name, PublicAccessBlockConfiguration={ 'BlockPublicAcls': True, 'IgnorePublicAcls': True, 'BlockPublicPolicy': True, 'RestrictPublicBuckets': True } ) Compliance e Governança 1. AWS Config Rules Regra para Criptografia Obrigatória { "ConfigRuleName": "s3-bucket-server-side-encryption-enabled", "Source": { "Owner": "AWS", "SourceIdentifier": "S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED" }, "Scope": { "ComplianceResourceTypes": [ "AWS::S3::Bucket" ] } } Regra para Bloqueio de Acesso Público { "ConfigRuleName": "s3-bucket-public-access-prohibited", "Source": { "Owner": "AWS", "SourceIdentifier": "S3_BUCKET_PUBLIC_ACCESS_PROHIBITED" }, "Scope": { "ComplianceResourceTypes": [ "AWS::S3::Bucket" ] } } 2. Automação de Remediation def auto_remediate_s3_compliance(event, context): """Remediar automaticamente problemas de compliance""" config_item = event['configurationItem'] bucket_name = config_item['resourceName'] if config_item['resourceType'] == 'AWS::S3::Bucket': # Verificar se bucket está público if is_bucket_public(bucket_name): block_public_access(bucket_name) # Verificar criptografia if not is_bucket_encrypted(bucket_name): enable_bucket_encryption(bucket_name) # Verificar logging if not is_logging_enabled(bucket_name): enable_access_logging(bucket_name) def is_bucket_public(bucket_name): """Verificar se bucket tem acesso público""" s3 = boto3.client('s3') try: response = s3.get_public_access_block(Bucket=bucket_name) config = response['PublicAccessBlockConfiguration'] return not all([ config.get('BlockPublicAcls', False), config.get('IgnorePublicAcls', False), config.get('BlockPublicPolicy', False), config.get('RestrictPublicBuckets', False) ]) except: return True # Assume público se não conseguir verificar Melhores Práticas de Implementação 1. Princípios de Segurança Defense in Depth # Exemplo de stack CloudFormation com múltiplas camadas Resources: SecureBucket: Type: AWS::S3::Bucket Properties: BucketName: !Sub "${AWS::StackName}-secure-data" BucketEncryption: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: aws:kms KMSMasterKeyID: !Ref S3KMSKey PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true LoggingConfiguration: DestinationBucketName: !Ref AccessLogsBucket LogFilePrefix: access-logs/ NotificationConfiguration: CloudWatchConfigurations: - Event: s3:ObjectCreated:* CloudWatchConfiguration: LogGroupName: !Ref S3LogGroup 2. Monitoramento Contínuo Dashboard de Segurança S3 { "widgets": [ { "type": "metric", "properties": { "metrics": [ ["AWS/S3", "BucketRequests", "BucketName", "secure-data-bucket", "FilterId", "EntireBucket"], ["AWS/S3", "AllRequests", "BucketName", "secure-data-bucket", "FilterId", "EntireBucket"] ], "period": 300, "stat": "Sum", "region": "us-east-1", "title": "S3 Request Volume" } }, { "type": "log", "properties": { "query": "SOURCE '/aws/s3/access-logs' | fields @timestamp, remote_ip, request_uri, http_status\n| filter http_status >= 400\n| stats count() by remote_ip\n| sort count desc\n| limit 10", "region": "us-east-1", "title": "Top Error Sources" } } ] } Custos e Otimização Análise de Custo-Benefício Controle de Segurança Custo Mensal Benefício ROI KMS Encryption $1-10 Alto 1000%+ CloudTrail Data Events $10-50 Médio 500% GuardDuty S3 Protection $5-25 Alto 800% Config Rules $2-10 Médio 300% Cross-Region Replication $20-100 Alto 400% Otimização de Custos def optimize_s3_security_costs(): """Otimizar custos de segurança S3""" # 1. Usar Intelligent Tiering para dados menos acessados # 2. Configurar lifecycle policies # 3. Comprimir dados antes do upload # 4. Usar S3 Transfer Acceleration apenas quando necessário # 5. Monitorar uso de KMS keys lifecycle_config = { 'Rules': [ { 'ID': 'SecurityOptimization', 'Status': 'Enabled', 'Filter': {'Prefix': 'logs/'}, 'Transitions': [ { 'Days': 30, 'StorageClass': 'STANDARD_IA' }, { 'Days': 90, 'StorageClass': 'GLACIER' } ] } ] } return lifecycle_config Conclusão A segurança do Amazon S3 requer uma abordagem holística que combine: ...

July 16, 2025 · 6 min · 1273 words · Matheus Costa

Introdução ao AWS Lambda: Computação Serverless

O que é AWS Lambda? AWS Lambda é um serviço de computação serverless que permite executar código sem provisionar ou gerenciar servidores. Você paga apenas pelo tempo de computação que consome. Principais Características 1. Serverless Sem gerenciamento de infraestrutura Escalabilidade automática Alta disponibilidade integrada 2. Modelo de Preços Pay-per-use Cobrança por milissegundo 1 milhão de requests gratuitos por mês 3. Linguagens Suportadas Python Node.js Java C# Go Ruby Exemplo Prático Aqui está um exemplo simples de uma função Lambda em Python: ...

July 16, 2025 · 1 min · 207 words · Matheus Costa

Amazon Q Developer na Prática: Revolucionando o Desenvolvimento com IA

O Amazon Q Developer representa uma revolução na forma como desenvolvemos e operamos aplicações na AWS. Este assistente de IA generativa não apenas acelera o desenvolvimento, mas também otimiza operações e resolve problemas complexos em tempo real. 🚀 O que é Amazon Q Developer? Amazon Q Developer é um assistente de IA generativa especializado em desenvolvimento de software e operações AWS. Ele combina: Geração de código inteligente e contextual Análise e otimização de infraestrutura AWS Resolução automática de problemas operacionais Integração nativa com ferramentas de desenvolvimento Principais Capacidades 🤖 Code Generation: Gera código em múltiplas linguagens 🔍 Code Analysis: Analisa e otimiza código existente 🛠️ Infrastructure as Code: Cria e otimiza templates Terraform/CloudFormation 🔧 Troubleshooting: Identifica e resolve problemas automaticamente 📊 Cost Optimization: Sugere melhorias de custos AWS 🛠️ Configuração e Primeiros Passos 1. Instalação no VS Code # Instalar extensão Amazon Q code --install-extension amazonwebservices.amazon-q-vscode 2. Configuração de Credenciais AWS # Configurar AWS CLI aws configure # Ou usar AWS SSO aws configure sso 3. Ativação do Amazon Q Abra VS Code Pressione Ctrl+Shift+P (ou Cmd+Shift+P no Mac) Digite “Amazon Q: Sign In” Siga o processo de autenticação 💻 Casos de Uso Práticos 1. Geração de Código AWS Prompt: “Crie uma função Lambda em Python que processa mensagens SQS e salva no DynamoDB” ...

December 10, 2024 · 7 min · 1382 words · Matheus Costa