Pular para o conteúdo

apps/security/valet-key

151 · Segurança & Auditoria · ≈ 6 min de estudo

Valet Key

Em vez de o arquivo passar pela API, o serviço que tem as credenciais reais do storage assina uma URL temporária para um objeto, um método e um prazo — e o cliente fala direto com o storage. A API não gasta banda nem memória com os bytes, e a credencial nunca sai do servidor. Use para upload de documentos e download de extratos e relatórios.

passos
6
arquivos
4
testes
0
tecnologias
5
Infraestrutura realTypeScriptBunElysiaMinIODocker
Baixar cartão

Cenário

O cliente envia o documento de identidade do KYC e baixa o extrato do mês direto do storage do banco. A API só assina as URLs, e só para a conta do próprio cliente. O storage recusa (403) a URL usada para outro objeto, para outro método ou depois do prazo. Como a assinatura do PUT não trava tipo nem tamanho, a API confere o objeto depois do upload e apaga o que não for um PDF de até 5 MB.

Planta

Sequência
8/8
POST /accounts/0001-7700880/kyc/upload-url1conta do cliente? assina PUT kyc/.../identity.pdf por 120 s2URL pré-assinada3PUT do PDF direto na URL42005POST /accounts/0001-7700880/kyc/confirm6stat: tipo e tamanho7aceito, ou apagado se não for PDF até 5 MB8App do clienteAPI (valet)MinIO (S3)
8

8 passos — reproduza para seguir o fluxo

Como funciona

6 passos

URL assinada com acesso temporário.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    A API confere que a conta da rota é a do cliente autenticado; senão, 403 sem assinar nada

  2. 02

    uploadUrlIssue assina PUT para kyc/<conta>/identity.pdf com TTL de 120 s; downloadUrlIssue assina GET com TTL de 60 s e Content-Disposition

  3. 03

    A assinatura é HMAC local com a credencial real: a API confere antes que o extrato existe, porque presign assinaria qualquer chave

  4. 04

    O cliente fala direto com o MinIO, que valida assinatura, método, objeto e expiração

  5. 05

    uploadVerify faz stat do objeto enviado e apaga o que não for application/pdf até 5 MB

  6. 06

    O log registra operação, chave e TTL — nunca a URL, que é uma credencial temporária

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • Os bytes não passam pela API: sem gargalo de banda e memória

  • A credencial real nunca chega ao cliente

  • Escopo por objeto e método, aplicado pelo próprio storage

  • Sem sessão: a permissão está toda na URL

Custos

  • A URL não pode ser revogada antes do TTL

  • URL vazada em log ou histórico vale até expirar — TTL curto é a mitigação

  • A assinatura do PUT não trava tipo nem tamanho: exige conferência depois

  • O cliente precisa falar com o storage, que fica exposto a ele

apps/security/valet-key

4 arquivos

src/

  • valet_key.tsChaves por conta, assinatura de PUT e GET com TTL e verificação do upload
  • api_valet.tsEmissão só para a própria conta, confirmação do upload e extrato existente
  • config_valet.tsConfiguração validada do ambiente, com credenciais explícitas
  • demo.tsdemoUpload do KYC, download do extrato e as recusas do storage

Executar · com Docker

  1. ./docker.sh up# sobe MinIO
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário
  5. bun run test# integração contra o serviço real
Requisitos
BunDocker
Sobe junto
MinIO

Por que se relacionam

Teste rápido

Qual destes combina com Valet Key?

Próximo projeto · Segurança & AuditoriaCriptografia Ponta a Ponta (E2EE)
Esc

↑ ↓ navegarEnter abrir191 resultados