Artigo

Como partilhar ficheiros do S3 sem tornar o bucket público

Partilha segura de ficheiros do S3 com um bucket privado: URLs pré-assinados, URLs assinados do CloudFront ou links com palavra-passe, expiração e limite.

Pode partilhar ficheiros do Amazon S3 sem nunca tornar o bucket público. Mantenha-o privado, deixe o Block Public Access ativado e dê às pessoas acesso assinado a objetos concretos: um URL pré-assinado para um ficheiro pontual, URLs assinados do CloudFront quando já tem uma CDN à frente do bucket, ou um link de partilha que acrescenta palavra-passe, data de expiração e limite de transferências. As três opções funcionam da mesma forma em fornecedores compatíveis com S3, como o Cloudflare R2, o DigitalOcean Spaces, o Wasabi e o Backblaze B2 (o CloudFront é exclusivo da AWS).

Opções de partilha segura no S3 num relance

MétodoIdeal paraPalavra-passeLimite de transferênciasRevogar um linkPastas inteirasCódigo necessário
Objeto ou bucket públicoRecursos realmente públicos (um site)NãoNãoNãoSimNão
URL pré-assinadoUm ficheiro, uma vez, a partir da CLI ou da sua appNãoNãoNãoNãoCLI ou SDK
URL assinado do CloudFrontAplicações que já autenticam utilizadoresNãoNãoNãoCom cookies assinadosSim
Link de partilha do NubboPartilha recorrente com pessoas de foraSimSimSimSim, com ZIPNão

Porque não tornar simplesmente o ficheiro público

A forma mais rápida de partilhar um ficheiro do S3 é torná-lo público e enviar o URL do objeto. É também a mais arriscada: qualquer coisa pública pode ser obtida por quem encontre ou adivinhe o endereço, sem palavra-passe, sem expiração e sem registo de quem a levou. Os buckets públicos esquecidos são uma fonte clássica de fugas de dados e expõem tanto os nomes dos ficheiros como o conteúdo.

A AWS indica que os buckets, pontos de acesso e objetos novos não permitem acesso público por predefinição. Além disso, o S3 Block Public Access tem quatro definições (BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy e RestrictPublicBuckets) que se sobrepõem a qualquer política ou ACL que viesse a abrir o bucket mais tarde. Podem ser definidas por bucket, por conta ou para toda uma AWS Organization, e o S3 aplica a combinação mais restritiva. A AWS recomenda ativar as quatro ao nível da conta, a não ser que aloje mesmo conteúdo público, como um site estático.

Mantenha esse interruptor ligado. Tudo o que se segue funciona com ele ativado.

Opção 1: URLs pré-assinados

Um URL pré-assinado é um URL de objeto com uma assinatura na query string. Concede uma operação (normalmente uma transferência) sobre um objeto até expirar, e o S3 verifica a assinatura em cada pedido.

aws s3 presign s3://my-bucket/reports/q3.pdf --expires-in 86400

Esse URL funciona durante 24 horas. A predefinição da CLI é uma hora e o máximo é de 604.800 segundos (7 dias) quando assina com chaves de utilizador IAM. Se assinar com credenciais temporárias, como uma função assumida, o URL morre quando essas credenciais expiram.

O que ganha:

  • Nenhuma alteração no bucket nem nas suas políticas.
  • Controlo preciso: um objeto, um método, uma expiração.
  • Funciona em qualquer fornecedor que suporte pré-assinatura SigV4.

O que não ganha:

  • Sem palavra-passe. Quem tiver o URL pode usá-lo, quantas vezes quiser, até expirar.
  • Sem limite de transferências nem revogação por link. Só pode matar um URL antes do tempo revogando as chaves que o assinaram.
  • Sem pastas. Assina objeto a objeto, por isso partilhar uma pasta com 300 ficheiros significa 300 URLs.
  • Nomes à vista. O URL mostra o nome do seu bucket, a chave do objeto e o ID da sua chave de acesso.

Para conhecer o mecanismo a fundo, incluindo carregamentos, cada parâmetro X-Amz-* e código de SDK, consulte os URLs pré-assinados do S3 explicados.

Opção 2: URLs assinados e cookies assinados do CloudFront

Se já serve o bucket através do Amazon CloudFront, pode exigir URLs assinados ou cookies assinados num comportamento de cache. O bucket continua privado por trás do origin access control (OAC), que a AWS recomenda em vez do antigo origin access identity: uma política do bucket só deixa a sua distribuição ler os objetos. Regista chaves públicas num trusted key group e assina com a chave privada correspondente.

  • Os URLs assinados servem para ficheiros individuais. Com uma política personalizada, também pode definir uma hora de início e um intervalo de IP, e reutilizar uma política para muitos ficheiros com wildcards. Podem durar pouco tempo ou anos.
  • Os cookies assinados servem para muitos ficheiros de uma vez, como todos os segmentos de um vídeo, sem alterar os seus URLs.

É a ferramenta certa quando tem uma aplicação que já autentica utilizadores e serve conteúdo em grande escala. Para entregar alguns ficheiros a pessoas de fora da sua equipa, implica configurar uma distribuição, gerir chaves e escrever código que assine cada pedido.

Restringir uma política do bucket a um intervalo de IP fixo é outra opção nativa, mas só ajuda quando conhece as redes de quem recebe, o que raramente acontece com pessoas de fora da sua organização.

O Nubbo liga-se ao seu bucket e dá-lhe links de partilha com os controlos que faltam aos URLs pré-assinados, sem escrever código. Por baixo continua a usar URLs pré-assinados: o Nubbo verifica primeiro as regras do link e só depois emite um URL de curta duração, por isso os ficheiros individuais viajam diretamente do seu bucket para o navegador de quem os recebe.

Passo 1: Ligue o seu bucket

Registe-se gratuitamente, confirme o seu email, abra Buckets e carregue em Ligar bucket. O assistente pede o seu fornecedor (Amazon S3, Cloudflare R2, DigitalOcean Spaces, Wasabi, Backblaze B2 ou um endpoint personalizado compatível com S3), a forma de ligar (uma configuração automática com uma chave de acesso total ou uma chave limitada a um bucket), a sua chave e o seu bucket. Verifica a chave e o bucket e termina testando o CORS com um carregamento real a partir do seu navegador. O bucket continua privado e as suas chaves são guardadas encriptadas com AES-256-GCM. O plano Grátis inclui 2 ligações.

Passo 2: Escolha o ficheiro ou a pasta

Encontre o item no explorador e escolha Partilhar. Também pode ir à página Partilhados, carregar em Novo link e escolher aí o bucket e o ficheiro ou a pasta.

Passo 3: Defina a proteção

Os três controlos são opcionais e estão disponíveis em todos os planos:

ControloComo funciona
Palavra-passeDe 4 a 50 caracteres. Após 10 tentativas erradas, o link bloqueia durante 15 minutos.
Data de expiraçãoDesativada por predefinição: o link fica ativo enquanto o ficheiro ou a pasta existir no seu armazenamento.
Downloads máximosVazio significa ilimitado. Quando se atinge o número, o link deixa de servir o ficheiro.

Carregue em Criar link, copie-o e envie-o por email, chat ou o que usar. Quem o recebe abre uma página de transferência limpa e não precisa de conta. Um link de pasta permite navegar na pasta, transferir ficheiros individuais ou levar tudo num ZIP, que o navegador de quem recebe monta ao transferir cada ficheiro diretamente do seu bucket.

Passo 5: Envie a palavra-passe à parte

Enviar a palavra-passe na mesma mensagem que o link anula o objetivo. Se o link tiver palavra-passe, Enviar palavra-passe por email entrega-a como um link de revelação única: a palavra-passe é mostrada uma vez, o link de revelação expira ao fim de 24 horas, 3 dias ou 7 dias, e pode acrescentar uma nota curta. Recebe uma notificação quando é aberto.

Passo 6: Acompanhe e revogue

A página Partilhados lista cada link com o seu estado e o número de transferências. Pode editar a palavra-passe, a expiração ou o limite, desativar um link (deixa de emitir novos URLs de transferência de imediato) e reabri-lo mais tarde com o mesmo endereço.

Um link funciona para qualquer pessoa que o tenha. Quando quer que só entrem pessoas concretas, a função Partilhar com pessoas do Nubbo (nos planos Personal e Pro) envia um ficheiro ou uma pasta a endereços de email específicos com permissão de visualização ou de transferência, uma expiração opcional e um limite de transferências, e regista cada acesso. As pessoas que recebem precisam de uma conta no Nubbo e encontram o item em Partilhados comigo. O Personal permite 10 pessoas por item e 50 partilhas ativas; o Pro permite 50 e 500.

Os planos pagos oferecem também links encriptados: o navegador cria uma cópia selada do ficheiro e a chave viaja apenas no próprio link, por isso o Nubbo não a consegue ler.

Que opção deve usar?

  • Um ficheiro, uma vez, e tem a AWS CLI configurada: um URL pré-assinado é o caminho mais rápido.
  • Uma aplicação que já autentica utilizadores e serve muito conteúdo: URLs ou cookies assinados do CloudFront.
  • Partilha recorrente com pessoas de fora da sua equipa, pastas inteiras ou qualquer coisa que precise de palavra-passe ou de limite: um link de partilha poupa tempo e erros.

Duas funcionalidades relacionadas cobrem os outros casos comuns. Os Pedidos de ficheiros dão-lhe um link público de carregamento para que as pessoas possam enviar ficheiros para o seu bucket sem verem mais nada lá dentro. As Galerias transformam uma pasta de fotos ou vídeos numa página navegável com layouts, marca de água e palavra-passe própria. No plano Grátis tem 3 de cada e links de partilha ilimitados; o Personal e o Pro eliminam esses limites. Uma nota honesta: as miniaturas são geradas no servidor do Nubbo e guardadas no seu próprio bucket em .nubbo-thumbs/.

Perguntas frequentes

Como partilho um ficheiro do S3 sem o tornar público?

Mantenha o bucket privado e entregue antes acesso assinado: um URL pré-assinado para um objeto (a partir da AWS CLI ou de um SDK), um URL ou cookie assinado do CloudFront se já serve o bucket através do CloudFront, ou um link de partilha de uma ferramenta como o Nubbo, que acrescenta palavra-passe, expiração e limite de transferências por cima dos URLs pré-assinados.

O Amazon S3 é seguro para partilhar ficheiros?

Sim, desde que o bucket continue privado. Os buckets novos não permitem acesso público por predefinição e o S3 Block Public Access impede que alguém os abra mais tarde. O risco vem de tornar objetos públicos ou de divulgar links assinados, que funcionam para qualquer pessoa que os tenha até expirarem.

Os buckets novos do S3 são privados por predefinição?

Sim. A AWS indica que os buckets, pontos de acesso e objetos novos não permitem acesso público por predefinição, e as quatro definições do Block Public Access sobrepõem-se a qualquer política ou ACL que os viesse a abrir mais tarde.

Quem recebe precisa de uma conta da AWS ou do Nubbo?

Não. Um URL pré-assinado, um URL assinado do CloudFront e um link de partilha do Nubbo funcionam em qualquer navegador sem conta. Só Partilhar com pessoas, que envia um item a pessoas concretas, exige que tenham conta no Nubbo.

Quanto tempo pode durar um link partilhado do S3?

Um URL pré-assinado dura no máximo 7 dias quando é assinado com chaves de utilizador IAM, e menos com credenciais temporárias. Os URLs assinados do CloudFront duram o que a sua política indicar. Um link de partilha do Nubbo não expira a não ser que defina uma data, porque emite um URL novo de curta duração em cada transferência.

Os ficheiros passam pelo Nubbo quando alguém transfere um link partilhado?

Não: o navegador transfere os ficheiros individuais diretamente do seu bucket com um URL pré-assinado. As transferências ZIP de vários ficheiros são montadas no navegador, que transfere cada ficheiro diretamente do seu bucket: o Nubbo nunca vê o conteúdo.

Fontes

Os preços e limites vêm das páginas oficiais abaixo. Os fornecedores alteram-nos, por isso confirme antes de se comprometer.