Aura Logo
aurabasedocumentos
documentos›Edge Functions›Security model

Modelo de segurança Edge Functions

As regras que mantêm suas funções, seu código e seus segredos privados, e os locais onde você permanece responsável.

7 min lido·Nível intermediário·Revisado em 12 de out. de 2026
Este texto em inglês foi gerado automaticamente a partir do original em francês e ainda não foi revisado.
A fonte em inglês mudou desde esta tradução. Algumas informações podem estar desatualizadas.
Esta página foi traduzida automaticamente. A versão em inglês é oficial.
#
Funções

1. Chaves e funções

FunçãoChavePode fazer
anonChave pública, segura em um navegadorInvocar uma função
authenticatedChave pública mais JWT de um usuário conectadoInvocar uma função, com a identidade do usuário
service_roleChave secreta, apenas servidorTudo: implantar, ler códigos e segredos, jobs, cron, alertas
adminUma sessão de console no StudioTudo, do Estúdio

A função vem da chave e do token, que a plataforma valida. Um cliente não pode escolher: uma chamada com a chave pública e um cabeçalho x-aura-role: service_role ainda atinge sua função como anon.

Cada rota e sua função estão listadas na referência da API HTTP .

#
Princípio

2. Por que apenas a invocação é pública

Uma chave pública é publicada em seu aplicativo web ou móvel, para que qualquer pessoa possa lê-la. Tudo o que permite, todos são permitidos. Invocar uma função é a única operação projetada para isso: seu código decide o que um chamador pode fazer.

Ler a definição de uma função é diferente. Ele contém o código-fonte e as variáveis ​​de ambiente, que muitas vezes guardam segredos. A listagem de empregos e alertas mostra seus dados. Enfileirar um trabalho executa seu código em sua cota. Nada disso pode ser público e a plataforma os recusa com 403 para qualquer chave que não seja service_role.

A mesma divisão existe em outros lugares. Supabase valida o JWT de um usuário antes que uma Edge Function seja executada por padrão (verify_jwt = true) e implemente funções por meio de sua CLI e plataforma (docs). Firebase enfileira tarefas de um ambiente de servidor confiável por meio do Admin SDK, com uma permissão do IAM (docs). Cloudflare permite que apenas um Worker envie para uma fila, por meio de uma ligação (docs).

Antes da correção, uma chave pública poderia ler definições

Versões anteriores do serviço respondiam GET /v1/functions e GET /v1/functions/{name} para qualquer chave. Se o seu projeto foi executado em uma implantação anterior a essa correção, trate o código e as variáveis ​​de suas funções como expostas e gire os segredos que elas contêm. Consulte atualização para 0.6.

#
Identidade

3. A identidade não pode ser forjada

Sua função lê o chamador de x-aura-role, x-aura-user-id e x-aura-project-id. A plataforma os define após validar a chave e o token.

  • Um chamador não pode fornecê-los. A plataforma descarta authorization, apikey, x-request-id e qualquer cabeçalho x-aura-* enviado no headers de uma invocação, seja qual for o caso. Em um teste real, uma chamada com x-aura-role: service_role e um authorization forjado atingiu a função como role: "anon" sem authorization.
  • Outros cabeçalhos personalizados passam intactos. Trate-os como entrada do usuário.
  • Jobs e disparos de cron alcançam sua função sem cabeçalhos de identidade. Eles são acionados pela plataforma, não por um usuário.

Então autorize em x-aura-role e x-aura-user-id, nunca em um valor do corpo:

aurabase/functions/delete-account/index.tstypescript
Deno.serve((req) => {
  const userId = req.headers.get('x-aura-user-id')
  if (req.headers.get('x-aura-role') !== 'authenticated' || !userId) {
    return new Response('Forbidden', { status: 403 })
  }
  // exclua a conta de `userId`, nunca de um id retirado do corpo
  return new Response('ok')
})
#
Isolamento

4. A caixa de areia

O que a plataforma oferece:

  • Cada chamada é executada em seu próprio isolamento V8, com seu próprio limite de memória e tempo limite de relógio. Uma falha ou um loop infinito em uma chamada não afeta outra.
  • As variáveis de ambiente do host são invisíveis: Deno.env.get('PATH') retornou undefined em uma execução real. Apenas as variáveis ​​da sua função e as variáveis ​​AURABASE_* da plataforma estão presentes.
  • O código de um projeto não pode ser lido por outro: o serviço que o atende requer um token interno.
  • As respostas que podem executar scripts são fornecidas com uma política de segurança de conteúdo de sandbox e os cabeçalhos Set-Cookie e CORS de uma função são descartados. Consulte as respostas de .

O que e não oferece:

  • A rede de saída fica aberta enquanto você não a restringir. Quando permissions.allow_net lista pelo menos um host, o runtime recusa um fetch para qualquer outro host (Requires net access to "host:443"). Uma lista vazia, o padrão, não restringe nada. Liste cada host de que a função precisa, incluindo a URL do seu projeto se ela chamar a plataforma. Mesmo com uma lista, valide qualquer URL vinda de entrada do usuário.
  • Nenhuma proteção de seus próprios segredos nos logs. Qualquer coisa que sua função escreve com console.log vai para os logs do tempo de execução.
  • Sem limite por usuário. O limite da taxa de invocação é por IP do cliente. Adicione sua própria verificação se um usuário não deve chamar uma função mais do que algumas vezes.
#
Lista de verificação

5. Lista de verificação

  • A chave service_role existe apenas nos seus servidores e nos seus segredos de CI.
  • O pacote do navegador contém apenas a chave pública. O SDK recusa uma chave service_role em um navegador por padrão.
  • Cada função verifica x-aura-role antes de fazer qualquer coisa sensível.
  • Os segredos são variáveis da função, nunca em index.ts.
  • Funções que chamam URLs externos validam o destino.
  • Você alterna uma chave criando uma nova no Studio, implantando-a como um segredo e, em seguida, revogando a antiga.
Última atualização · 12 de out. de 2026