Para garantir conformidade com a LGPD ao armazenar CPFs na cloud, é preciso combinar criptografia em repouso com chave gerenciada pelo cliente (CMK), políticas de acesso com menor privilégio, retenção automática via TTL e auditoria contínua de acessos — além de usar a região brasileira do provedor sempre que possível. A CPFHub.io reduz a superfície de exposição: ao consultar GET https://api.cpfhub.io/cpf/{CPF} com x-api-key no momento necessário, você evita armazenar o CPF em texto claro e mantém apenas o log da consulta para fins de auditoria. A ANPD orienta que o princípio da necessidade deve guiar qualquer decisão de armazenamento de dados pessoais.
Introdução
A migração para a nuvem é uma realidade para a maioria das empresas brasileiras, mas quando os dados armazenados incluem CPFs, a conformidade com a LGPD exige atenção a aspectos que vão além da simples infraestrutura. Localização dos dados, controles de acesso, criptografia, auditoria e contratos com provedores de cloud são elementos que devem ser cuidadosamente avaliados.
Responsabilidade compartilhada na cloud
O modelo de responsabilidade compartilhada é fundamental para entender as obrigações de cada parte:
Responsabilidade do provedor de cloud
- Segurança física dos data centers.
- Disponibilidade da infraestrutura.
- Isolamento entre clientes.
- Certificações de segurança (ISO 27001, SOC 2).
Responsabilidade do cliente
- Configuração de segurança dos serviços.
- Controle de acesso aos dados.
- Criptografia de dados de CPF.
- Conformidade com a LGPD.
- Monitoramento e auditoria.
Localização dos dados
A LGPD não proíbe o armazenamento de dados em servidores fora do Brasil, mas a transferência internacional deve seguir as regras do artigo 33. Sempre que possível, utilize regiões brasileiras dos provedores de cloud.
Configuração de região na AWS
import boto3
import json
from datetime import datetime, timezone
# Forçar uso da região de São Paulo
dynamodb = boto3.resource(
"dynamodb",
region_name="sa-east-1" # São Paulo
)
def criar_tabela_cpf_segura():
"""Cria tabela DynamoDB com criptografia e TTL para dados de CPF."""
tabela = dynamodb.create_table(
TableName="dados_cpf_protegidos",
KeySchema=[
{"AttributeName": "cpf_hash", "KeyType": "HASH"},
{"AttributeName": "finalidade", "KeyType": "RANGE"}
],
AttributeDefinitions=[
{"AttributeName": "cpf_hash", "AttributeType": "S"},
{"AttributeName": "finalidade", "AttributeType": "S"}
],
BillingMode="PAY_PER_REQUEST",
SSESpecification={
"Enabled": True,
"SSEType": "KMS",
"KMSMasterKeyId": "alias/chave-cpf-protegido"
},
Tags=[
{"Key": "dados-sensiveis", "Value": "true"},
{"Key": "lgpd-classificacao", "Value": "dados-pessoais"},
{"Key": "retencao", "Value": "365-dias"}
]
)
# Habilitar TTL para expiração automática
client = boto3.client("dynamodb", region_name="sa-east-1")
client.update_time_to_live(
TableName="dados_cpf_protegidos",
TimeToLiveSpecification={
"Enabled": True,
"AttributeName": "expira_em"
}
)
return tabela
Criptografia em múltiplas camadas
Criptografia em trânsito
Todas as comunicações com serviços de cloud devem usar TLS 1.2 ou superior. Isso já é padrão na maioria dos SDKs, mas deve ser verificado.
Criptografia em repouso
Configure criptografia gerenciada pelo cliente (CMK) para dados de CPF:
import boto3
from botocore.exceptions import ClientError
def configurar_bucket_s3_seguro(bucket_name: str):
"""Configura bucket S3 com criptografia e controles para dados de CPF."""
s3 = boto3.client("s3", region_name="sa-east-1")
# Criptografia padrão com chave gerenciada pelo cliente
s3.put_bucket_encryption(
Bucket=bucket_name,
ServerSideEncryptionConfiguration={
"Rules": [{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "aws:kms",
"KMSMasterKeyID": "alias/chave-cpf-protegido"
},
"BucketKeyEnabled": True
}]
}
)
# Bloquear acesso público
s3.put_public_access_block(
Bucket=bucket_name,
PublicAccessBlockConfiguration={
"BlockPublicAcls": True,
"IgnorePublicAcls": True,
"BlockPublicPolicy": True,
"RestrictPublicBuckets": True
}
)
# Habilitar versionamento para auditoria
s3.put_bucket_versioning(
Bucket=bucket_name,
VersioningConfiguration={"Status": "Enabled"}
)
# Configurar ciclo de vida para expiração automática
s3.put_bucket_lifecycle_configuration(
Bucket=bucket_name,
LifecycleConfiguration={
"Rules": [{
"ID": "expiracao-dados-cpf",
"Status": "Enabled",
"Filter": {"Prefix": "dados-cpf/"},
"Expiration": {"Days": 365},
"NoncurrentVersionExpiration": {"NoncurrentDays": 30}
}]
}
)
print(f"[OK] Bucket {bucket_name} configurado com segurança LGPD")
Controle de acesso granular
Política IAM para acesso a dados de CPF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AcessoDadosCPF",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:Query"
],
"Resource": "arn:aws:dynamodb:sa-east-1:123456789:table/dados_cpf_protegidos",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "sa-east-1"
},
"Bool": {
"aws:SecureTransport": "true"
}
}
},
{
"Sid": "NegarExportacaoEmMassa",
"Effect": "Deny",
"Action": [
"dynamodb:Scan",
"dynamodb:ExportTableToPointInTime"
],
"Resource": "arn:aws:dynamodb:sa-east-1:123456789:table/dados_cpf_protegidos"
}
]
}
Integração segura com a API do CPFHub.io
Ao consultar a API do CPFHub.io, armazene a chave de API no gerenciador de segredos do seu provedor de cloud — nunca em variáveis de ambiente em texto claro ou no código-fonte.
# Armazenar API key no AWS Secrets Manager
aws secretsmanager create-secret \
--name "cpfhub/api-key" \
--secret-string "SUA_API_KEY" \
--region sa-east-1
import requests
import boto3
def obter_api_key():
"""Recupera API key do Secrets Manager."""
client = boto3.client("secretsmanager", region_name="sa-east-1")
response = client.get_secret_value(SecretId="cpfhub/api-key")
return response["SecretString"]
def consultar_cpf_cloud(cpf: str) -> dict:
"""Consulta CPF usando credenciais armazenadas de forma segura."""
api_key = obter_api_key()
try:
response = requests.get(
f"https://api.cpfhub.io/cpf/{cpf}",
headers={
"x-api-key": api_key,
"Accept": "application/json"
},
timeout=30
)
if response.status_code == 200:
return response.json()
except requests.exceptions.Timeout:
print("[ERROR] Timeout na consulta")
return {}
Teste direto via cURL:
curl -X GET "https://api.cpfhub.io/cpf/12345678901" \
-H "x-api-key: SUA_API_KEY" \
-H "Accept: application/json" \
--max-time 30
Monitoramento e auditoria na cloud
CloudTrail para rastreamento de acessos
Habilite o AWS CloudTrail para registrar todas as chamadas de API que envolvem recursos com dados de CPF. Configure alertas no CloudWatch para acessos anômalos.
Métricas de conformidade
Monitore continuamente:
- Número de acessos a tabelas/buckets com dados de CPF.
- Tentativas de acesso negadas.
- Alterações em políticas de IAM relacionadas a dados de CPF.
- Status da criptografia em todos os recursos.
- Dados que se aproximam do prazo de retenção.
Checklist de conformidade para cloud
- Dados de CPF armazenados em região brasileira (sa-east-1) ou com base legal para transferência internacional.
- Criptografia em repouso com chave gerenciada pelo cliente (CMK).
- Criptografia em trânsito (TLS 1.2+) obrigatória.
- Acesso público bloqueado em todos os recursos.
- Políticas IAM com princípio do menor privilégio.
- Exportação em massa bloqueada por política.
- TTL/ciclo de vida configurado para expiração automática.
- CloudTrail habilitado com alertas para acessos anômalos.
- Backups criptografados e com mesma política de retenção.
- Contrato com provedor de cloud incluindo cláusulas de proteção de dados.
Contratos com provedores de cloud
Verifique se o contrato com seu provedor de cloud inclui:
- Cláusulas de proteção de dados conforme a LGPD.
- Compromisso de notificação de incidentes.
- Direito de auditoria pelo controlador.
- Eliminação de dados ao término do contrato.
- Restrições sobre subcontratação.
Perguntas frequentes
O que é necessário para implementar validação de CPF neste contexto?
A validação de CPF exige uma chamada à API com o número do documento e a chave de autenticação. A CPFHub.io retorna o status do CPF, nome do titular e data de nascimento em ~900ms, permitindo a verificação em tempo real durante o cadastro ou transação. Combinada com armazenamento seguro na cloud, elimina a necessidade de manter o CPF em texto claro.
A API CPFHub.io funciona para todos os volumes de consulta?
Sim. O plano gratuito oferece 50 consultas por mês sem cartão de crédito — ideal para testes e projetos pequenos. Para volumes maiores, o plano Pro inclui 1.000 consultas mensais por R$149. Se o limite for ultrapassado, a API não bloqueia: cobra R$0,15 por consulta adicional.
Como garantir conformidade com a LGPD ao usar uma API de CPF?
Use o CPF apenas para a finalidade declarada ao titular, armazene apenas o necessário (não guarde o CPF cru se um token bastar), implemente controle de acesso aos logs de consulta e documente a base legal para o tratamento. A ANPD orienta que dados de identificação devem ser tratados com o princípio da necessidade.
Quanto tempo leva para integrar a API CPFHub.io?
A integração básica leva menos de 30 minutos: crie uma conta em cpfhub.io, gere a API key no painel e faça uma chamada GET para https://api.cpfhub.io/cpf/{CPF} com o header x-api-key. A documentação inclui exemplos em Python, Node.js, PHP, Java e outras linguagens.
Conclusão
Armazenar dados de CPF na cloud é seguro e eficiente quando as configurações corretas são aplicadas. Criptografia em múltiplas camadas, controle de acesso granular, retenção automática e monitoramento contínuo são os pilares de uma estratégia de cloud em conformidade com a LGPD. O investimento em configuração adequada desde o início é significativamente menor do que o custo de uma sanção ou vazamento.
Cadastre-se em cpfhub.io — 50 consultas mensais gratuitas, sem cartão de crédito — e comece hoje mesmo.
CPFHub.io
Pronto para integrar a API?
50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.
Sobre a redação
Redação CPFHub.io
Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.



