Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Decidir quais arquivos devem ser públicos e quais privados
- Testar com curl se um arquivo está mesmo protegido
- Escolher entre URL assinada e link de compartilhamento para liberar um arquivo privado
Nesta página
- Qual é a diferença entre arquivo público e privado?
- Quais arquivos devem ser públicos e quais privados?
- Como testar se um arquivo está mesmo protegido?
- Como liberar um arquivo privado para alguém?
- Compartilhar um arquivo público protege o arquivo?
- Quais erros evitar?
- Como fazer isso na Square Cloud
- Perguntas frequentes
Todo arquivo que você guarda em um object storage tem uma decisão embutida: quem pode abri-lo. Logotipos, imagens de produto e o JavaScript do seu site precisam ser vistos por todo mundo. Contratos, faturas e fotos de documentos não.
O erro caro é deixar público o que deveria ser privado. O arquivo vaza sem gerar erro nenhum, porque servir arquivos públicos é exatamente o que o storage foi configurado para fazer. Por isso vale decidir a visibilidade antes do upload e conferir depois com um teste simples.
Qual é a diferença entre arquivo público e privado?#
Público: qualquer pessoa com a URL baixa o arquivo, sem login, sem assinatura e sem prazo. A URL é permanente e pode passar por cache de CDN, o que torna a entrega rápida e barata.
Privado: uma requisição sem autorização recebe erro (normalmente 403). O acesso exige uma credencial do dono ou um link gerado por ele, com prazo e, em alguns casos, possibilidade de cancelamento.
A visibilidade não é uma propriedade do arquivo "por natureza": é uma configuração do bucket, da pasta ou do objeto, e você pode mudá-la. O que não muda é o que já saiu: uma URL pública que alguém copiou continua funcionando enquanto o arquivo estiver público.
Quais arquivos devem ser públicos e quais privados?#
Uma regra simples: se o conteúdo pode aparecer em uma página aberta sem login, pode ser público. Se aparece só depois de autenticar, é privado.
| Tipo de arquivo | Visibilidade | Motivo |
|---|---|---|
| Imagens do site, CSS, JS, fontes | Público | Todos veem, cache em CDN ajuda |
| Avatares e imagens de produto | Público | Já aparecem em páginas abertas |
| Faturas, contratos, notas fiscais | Privado | Dado de uma pessoa só |
| Fotos de documentos, exames | Privado | Dado pessoal sensível |
| Exportações e relatórios | Privado | Contêm dados internos |
| Arquivos de mídia de assinantes | Privado | O acesso é parte do produto |
Na dúvida, comece privado. Abrir depois é uma mudança de uma linha; fechar depois não recupera o que já foi copiado.
Como testar se um arquivo está mesmo protegido?#
O teste é pedir a URL direta, sem nenhuma credencial, como um desconhecido faria. Use um terminal ou uma janela anônima:
curl -I "https://meu-bucket.s3.amazonaws.com/faturas/2026-10.pdf"Um arquivo privado responde algo como:
HTTP/1.1 403 ForbiddenUm arquivo público responde HTTP/1.1 200 OK. Se o seu arquivo "privado" devolver 200, ele não é privado, mesmo que a URL pareça impossível de adivinhar. Repita o teste depois de qualquer mudança em políticas ou permissões.
No Amazon S3 (veja o que é armazenamento compatível com S3), a documentação oficial diz que buckets, access points e objetos novos não permitem acesso público por padrão. O recurso Block Public Access tem quatro configurações (BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy e RestrictPublicBuckets) que sobrepõem políticas e ACLs, e a AWS recomenda ligar as quatro. Outros storages têm controles parecidos com outros nomes: procure o equivalente na documentação do seu fornecedor.
Como liberar um arquivo privado para alguém?#
Existem dois mecanismos comuns. A escolha depende de quanto tempo o link precisa durar e de você precisar ou não cancelá-lo antes do fim.
URL assinada (link temporário). Seu backend assina uma URL com prazo curto. Quem abre o link baixa o arquivo, sem conta e sem credencial. Não há como cancelar um link específico antes do prazo. Veja os detalhes em o que é uma URL assinada.
Link de compartilhamento. Um link mais longo, registrado no storage, que o dono pode revogar. Serve para o arquivo que você divulga por dias e talvez queira tirar do ar.
Exemplo em Python com boto3 (pip install boto3), com as credenciais em variáveis de ambiente:
import os
import boto3
from botocore.config import Config
s3 = boto3.client(
"s3",
region_name="us-east-1",
endpoint_url=os.environ.get("S3_ENDPOINT"), # omita no AWS S3
aws_access_key_id=os.environ["S3_ACCESS_KEY"],
aws_secret_access_key=os.environ["S3_SECRET_KEY"],
config=Config(signature_version="s3v4"),
)
url = s3.generate_presigned_url(
ClientMethod="get_object",
Params={"Bucket": "meu-bucket", "Key": "faturas/2026-10.pdf"},
ExpiresIn=600, # 10 minutos
)
print(url)Rode curl -o fatura.pdf "<url>" (com aspas) e o arquivo baixa. A mesma URL sem os parâmetros de assinatura continua devolvendo 403. No Amazon S3, o prazo máximo é de 12 horas pelo console e de 7 dias por SDK ou CLI com credenciais de usuário IAM; com credenciais temporárias, a URL morre junto com elas.
Compartilhar um arquivo público protege o arquivo?#
Não, e este é o engano mais comum. Criar um link de compartilhamento para um arquivo que já é público não restringe nada: a URL pública continua aberta para quem a tiver. Colocar senha no link de compartilhamento também não ajuda, porque o caminho direto não pede senha.
Para que o link de compartilhamento (ou a senha, quando o storage oferece) tenha algum efeito, o arquivo precisa estar privado. Só então o único caminho de acesso é o link autorizado. A ordem certa é fechar o arquivo primeiro e só depois gerar o link.
Quais erros evitar?#
- Confiar em URL longa e aleatória. Ela vaza por logs, histórico e mensagens encaminhadas. Controle de acesso é uma verificação, não um segredo na URL.
- Guardar a URL assinada no banco. Ela expira. Gere uma nova a cada pedido do usuário autenticado.
- Misturar público e privado na mesma pasta. Separe por pasta ou bucket e aplique regras diferentes a cada uma. Um arquivo privado jogado na pasta pública é o vazamento clássico.
- Esquecer o cache. Um arquivo público pode ficar em cache de CDN depois de você fechá-lo. Depois de mudar a visibilidade, teste de novo e, se preciso, limpe o cache.
- Liberar além do necessário. O link só deve alcançar um arquivo, pelo tempo que a tarefa precisa.
Como fazer isso na Square Cloud#
No Blob Storage da Square Cloud, a decisão da tabela acima vira o bucket em que você grava: cada conta tem os buckets fixos public, servido por uma CDN global na edge, e private. Logotipos e imagens de produto vão para o primeiro; faturas, contratos e exportações, para o segundo. A visibilidade também pode ser definida por pasta, junto com expiração, cache, tamanho máximo e extensões permitidas, o que ajuda a evitar o vazamento clássico do arquivo privado esquecido na pasta pública.
Um arquivo privado abre de três formas, com as diferenças que você viu: a URL pré-assinada SigV4 que o seu código gera, de até 7 dias; o link temporário do painel, de até 24 horas e sem revogação; e o link de compartilhamento, de até 30 dias e revogável, com senha e metadados nos planos Pro e Enterprise. Como o link e a senha só protegem arquivos privados, grave no private primeiro e gere o link depois.
O código boto3 acima roda contra o Blob com S3_ENDPOINT=https://s3-blob.squarecloud.app, a região auto no lugar de us-east-1, o bucket private no lugar de meu-bucket e as chaves S3 da aba "Acesso S3" do painel, derivadas de uma API key. Depois do primeiro upload, repita o teste deste artigo: com a assinatura o arquivo baixa, sem ela não deve abrir. Não há taxa de saída nem de entrada, e a cota incluída vai de 5 GB a 250 GB, conforme o plano. Conheça o Blob Storage e compare as cotas em Preços.
Blob Storage
Object storage compatível com S3, sem taxa de saída
Perguntas frequentes
Compartilhar um arquivo público protege o arquivo?
Não. O link de compartilhamento é só mais um caminho de acesso. A URL pública do arquivo continua valendo para qualquer pessoa que a tenha. Para controlar o acesso, o arquivo precisa estar privado.
Uma URL difícil de adivinhar basta para proteger um arquivo?
Não. Segurança por obscuridade falha quando a URL vaza em um log, um histórico de navegador ou uma mensagem encaminhada. Quem tem a URL de um arquivo público acessa, sem nenhuma verificação.
Como saber se um arquivo está público?
Peça a URL direta sem nenhuma credencial, por exemplo com curl -I. Resposta 200 significa que qualquer pessoa abre. Um arquivo privado responde 403 (ou 401, conforme o storage).
No S3, um bucket novo já nasce privado?
Sim. Segundo a documentação da AWS, buckets, access points e objetos novos não permitem acesso público por padrão, e o Block Public Access impede que políticas ou ACLs o liberem por engano.
Mais em Storage
Ver todos os 15 artigos- O que é uma URL assinada (pre-signed URL) e quando usarUma URL assinada (pre-signed URL) é um link temporário para um arquivo privado. Veja como funciona, o que ela não faz e quando usar.
- O que é armazenamento de objetos (object storage)Armazenamento de objetos guarda arquivos como objetos com chave e metadados, acessados por API HTTP. Veja como funciona, para que serve e seus limites.
- O que é S3 e armazenamento compatível com S3S3 é o armazenamento de objetos da Amazon e virou a API padrão do setor. Veja o que significa ser compatível com S3, o que muda e como conectar via boto3.
- Upload de arquivos grandes: multipart e upload retomávelO upload multipart divide um arquivo grande em partes enviadas em paralelo e reenviadas uma a uma. Veja o passo a passo em Python, como retomar e os erros comuns.