Logo Aurabase
aurabazadokumenty
dokumenty›Edge Functions›Security model

Edge Functions model bezpieczeństwa

Zasady, dzięki którym Twoje funkcje, ich kod i tajemnice pozostają prywatne, a także miejsca, za które ponosisz odpowiedzialność.

7 min przeczytane·Poziom mediator·Zmieniono 12 paź 2026
Ten tekst w języku angielskim został wygenerowany automatycznie na podstawie francuskiego oryginału i nie był jeszcze recenzowany.
Źródło angielskie uległo zmianie od czasu tego tłumaczenia. Niektóre informacje mogą być nieaktualne.
Ta strona została przetłumaczona automatycznie. Wersja angielska jest miarodajna.
#
Role

1. Klucze i role

RolaKlawiszMożna
anonKlucz publiczny, bezpieczny w przeglądarceWywołaj funkcję
authenticatedKlucz publiczny plus JWT zalogowanego użytkownikaWywołaj funkcję z tożsamością użytkownika
service_roleTajny klucz, tylko serwerWszystko: wdrażaj, czytaj kod i sekrety, zadania, cron, alerty
adminSesja konsolowa w StudioWszystko ze Studia

Rola pochodzi z klucza i tokena, które platforma sprawdza. Klient nie może tego wybrać: wywołanie z kluczem publicznym i nagłówkiem x-aura-role: service_role nadal osiąga Twoją funkcję jako anon.

Każda trasa i jej rola są wymienione w Dokumentacja API HTTP.

#
Zasada

2. Dlaczego tylko inwokacja jest publiczna?

Klucz publiczny jest publikowany w Twojej aplikacji internetowej lub mobilnej, więc każdy może go przeczytać. Na co pozwala, każdemu wolno. Wywołanie funkcji jest jedyną operacją przeznaczoną do tego celu: Twój kod decyduje, co może zrobić osoba wywołująca.

Odczytywanie definicji funkcji jest inne. Zawiera kod źródłowy i zmienne środowiskowe, które często skrywają tajemnice. Lista ofert pracy i alertów pokazuje Twoje dane. Umieszczenie zadania w kolejce powoduje uruchomienie kodu w ramach przydziału. Żaden z nich nie może być publiczny, a platforma odrzuca je za pomocą 403 dla dowolnego klucza, który nie jest service_role.

Ten sam podział istnieje gdzie indziej. Supabase sprawdza JWT użytkownika przed domyślnym uruchomieniem funkcji brzegowej (verify_jwt = true) i wdraża funkcje za pośrednictwem interfejsu CLI i platformy (dokumentacja). Firebase kolejkuje zadania ze środowiska zaufanego serwera za pośrednictwem pakietu Admin SDK z uprawnieniami IAM (dokumentacja). Cloudflare pozwala tylko robotnikowi wysyłać do kolejki poprzez powiązanie (dokumentacja).

Przed poprawką klucz publiczny mógł czytać definicje

Wcześniejsze wersje usługi odpowiadały GET /v1/functions i GET /v1/functions/{name} na dowolny klucz. Jeśli Twój projekt działał we wdrożeniu poprzedzającym tę poprawkę, traktuj kod i zmienne funkcji jako ujawnione i zmieniaj zawarte w nich wpisy tajne. Zobacz aktualizację do wersji 0.6.

#
Tożsamość

3. Tożsamości nie można sfałszować

Twoja funkcja odczytuje obiekt wywołujący z x-aura-role, x-aura-user-id i x-aura-project-id. Platforma ustawia je po zweryfikowaniu klucza i tokena.

  • Osoba dzwoniąca nie może ich dostarczyć. Platforma odrzuca authorization, apikey, x-request-id i dowolny nagłówek x-aura-* wysłany w headers wywołania, niezależnie od ich przypadku. W prawdziwym teście wywołanie z x-aura-role: service_role i sfałszowanym authorization osiągnęło funkcję jako role: "anon" bez authorization.
  • Inne niestandardowe nagłówki przechodzą bez zmian. Traktuj je jako dane wejściowe użytkownika.
  • Zadania i uruchomienia cron docierają do Twojej funkcji bez nagłówków tożsamości. Są one wyzwalane przez platformę, a nie przez użytkownika.

Autoryzuj więc x-aura-role i x-aura-user-id, nigdy na wartości z treści:

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 })
  }
  // usuń konto `userId`, nigdy identyfikatora pobranego z treści
  return new Response('ok')
})
#
Izolacja

4. Piaskownica

Co daje Ci platforma:

  • Każde połączenie działa we własnym izolacji V8, z własnym limitem pamięci i limitem czasu zegara ściennego. Awaria lub nieskończona pętla w jednym wywołaniu nie wpływają na inne.
  • Zmienne środowiskowe hosta są niewidoczne: Deno.env.get('PATH') zwróciło undefined w prawdziwym uruchomieniu. Obecne są tylko zmienne Twojej funkcji i zmienne AURABASE_* platformy.
  • Kod jednego projektu nie może zostać odczytany przez inny: obsługująca go usługa wymaga wewnętrznego tokena.
  • Odpowiedzi, które mogą uruchamiać skrypty, są obsługiwane z polityką bezpieczeństwa treści w trybie piaskownicy, a nagłówki Set-Cookie i CORS z funkcji są usuwane. Zobacz odpowiedzi .

Co robi , a nie, co daje:

  • Sieć wychodząca jest otwarta, dopóki jej nie ograniczysz. Gdy permissions.allow_net wymienia co najmniej jeden host, środowisko uruchomieniowe odrzuca fetch do każdego innego hosta (Requires net access to "host:443"). Pusta lista, czyli wartość domyślna, niczego nie ogranicza. Wymień każdy host, którego potrzebuje funkcja, w tym adres URL projektu, jeśli wywołuje platformę. Nawet z listą waliduj każdy adres URL pochodzący z danych użytkownika.
  • Brak ochrony własnych sekretów w logach. Wszystko, co Twoja funkcja zapisuje za pomocą console.log, trafia do dzienników środowiska wykonawczego.
  • Brak limitu na użytkownika. Limit szybkości wywołań dotyczy adresu IP klienta. Dodaj własne sprawdzenie, czy jeden użytkownik nie może wywołać funkcji więcej niż kilka razy.
#
Lista kontrolna

5. Lista kontrolna

  • Klucz service_role istnieje tylko na Twoich serwerach i w tajemnicach CI.
  • Pakiet przeglądarki zawiera wyłącznie klucz publiczny. Zestaw SDK domyślnie odrzuca klucz service_role w przeglądarce.
  • Każda funkcja sprawdza x-aura-role, zanim wykona cokolwiek wrażliwego.
  • Sekrety są zmiennymi funkcji, nigdy w index.ts.
  • Funkcje wywołujące zewnętrzne adresy URL sprawdzają miejsce docelowe.
  • Obracasz klucz, tworząc nowy w Studio, wdrażając go jako klucz tajny, a następnie unieważniając stary.
Ostatnia aktualizacja · 12 paź 2026