Arquivo público ou privado: como controlar quem acessa seus arquivos

Um arquivo público abre para quem tiver a URL. Um privado só abre por um link autorizado, como uma URL assinada ou um link de compartilhamento revogável.

Atualizado em 6 min de leitura

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

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.

O arquivo é o mesmopara todos?simnãoPúblicoqualquer umcom a URL baixa;cache na CDNPrivadosem autorizaçãoresponde 403PontualURL assinada,expira sozinhaRevogávellink decompartilhamento
Igual para todos? Público, com CDN. Se não, privado, aberto por URL assinada ou por link revogável.

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:

bash
curl -I "https://meu-bucket.s3.amazonaws.com/faturas/2026-10.pdf"

Um arquivo privado responde algo como:

HTTP/1.1 403 Forbidden

Um 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:

python
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

Saiba mais

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.

Próximo artigoTaxas de saída (egress): o custo escondido do armazenamentoTaxa de saída (egress) é o valor cobrado por GB que sai do seu storage para a internet. Veja como a conta funciona, exemplos e como evitar surpresas.