30 de setembro de 2026 · 5 min de leitura
Como compartilhar arquivos privados do S3 e R2 com URLs pré-assinadas
Nem todo arquivo deveria ficar em um bucket público. Contratos, notas fiscais ou builds ainda não lançados podem continuar privados e mesmo assim ser compartilhados, com um link que só funciona por um tempo limitado.
Como as URLs pré-assinadas funcionam
A URL contém tudo o que o S3 precisa para verificar a requisição: a chave com que foi assinada, quando foi assinada, por quanto tempo é válida e uma assinatura. Ela tem esta cara:
https://your-bucket.s3.eu-central-1.amazonaws.com/contract.pdf
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIA…/20260930/eu-central-1/s3/aws4_request
&X-Amz-Date=20260930T120000Z
&X-Amz-Expires=3600
&X-Amz-SignedHeaders=host
&X-Amz-Signature=…
A assinatura é feita no seu computador. Nada é enviado ao provedor até alguém abrir o link, e alterar qualquer parte dele invalida a assinatura.
Crie uma com o AWS CLI
aws s3 presign s3://your-bucket/contract.pdf --expires-in 86400
Esse link funciona por 24 horas. Para o Cloudflare R2 ou outro serviço compatível com S3, aponte o CLI para o endpoint dele:
aws s3 presign s3://your-bucket/contract.pdf --expires-in 86400 \
--endpoint-url https://<ACCOUNT_ID>.r2.cloudflarestorage.comLimites que você precisa conhecer
- No máximo 7 dias. A Signature Version 4 permite até 604.800 segundos, tanto no S3 quanto no R2.
- Credenciais temporárias acabam antes. Uma URL assinada com uma sessão STS ou SSO para de funcionar quando essa sessão expira, mesmo que você tenha pedido mais tempo.
- O R2 exige o domínio da API. URLs pré-assinadas no R2 funcionam com
<ACCOUNT_ID>.r2.cloudflarestorage.com, não com um domínio personalizado. - Qualquer pessoa com o link pode usá-lo. Trate-o como uma senha até ele expirar.
- Não dá para revogar um link específico. Para cortar um link antes da hora, exclua ou renomeie o objeto, ou desative a access key que o assinou.
URL pré-assinada ou bucket público?
Use um bucket público para arquivos que são feitos para serem vistos e devem continuar funcionando: capturas de tela em documentação, imagens em um README. Use URLs pré-assinadas para tudo o que é sensível ou de curta duração. Muita gente mantém um bucket de cada tipo e escolhe arquivo por arquivo.
Perguntas frequentes
Uma URL pré-assinada pode durar mais de 7 dias?
Não com a Signature Version 4, que é a usada pelo S3 e pelo R2. Para acesso mais longo, deixe o arquivo público ou gere um novo link quando o antigo expirar.
Por que minha URL pré-assinada retorna SignatureDoesNotMatch?
Normalmente a URL foi alterada depois de assinada, por exemplo por um cliente de e-mail ou pela troca do host por um domínio personalizado. As configurações de região e endpoint também precisam corresponder às do bucket.
URLs pré-assinadas funcionam com Backblaze B2 e MinIO?
Sim. Os dois aceitam URLs pré-assinadas com Signature Version 4 pelas suas APIs compatíveis com S3.