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.com

Limites 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.