Aurabase Logosu
aura tabanıdokümanlar
dokümanlar›Edge Functions›Security model

Edge Functions güvenlik modeli

İşlevlerinizi, kodlarını ve sırlarını gizli tutan kurallar ve sorumlu kaldığınız yerler.

7 dk. oku·Seviye orta düzey·12 Eki 2026 tarihinde revize edildi
Bu İngilizce metin, Fransızca orijinalinden otomatik olarak oluşturulmuştur ve henüz incelenmemiştir.
Bu çeviriden bu yana İngilizce kaynak değişti. Bazı bilgiler güncelliğini kaybetmiş olabilir.
Bu sayfa otomatik olarak çevrildi. İngilizce versiyonu yetkilidir.
#
Roller

1. Anahtarlar ve roller

RolAnahtarYapabilir
anonGenel anahtar, tarayıcıda güvenliBir işlevi çağırma
authenticatedGenel anahtar artı oturum açmış kullanıcının JWTKullanıcının kimliğiyle bir işlevi çağırma
service_roleGizli anahtar, yalnızca sunucuHer şey: dağıtma, kodu ve sırları okuma, işler, cron, uyarılar
adminStüdyoda bir konsol oturumuStüdyodan her şey

Rol, platformun doğruladığı anahtar ve tokendan gelir. İstemci bunu seçemez: genel anahtara ve x-aura-role: service_role başlığına sahip bir çağrı yine de anon olarak işlevinize ulaşır.

Her rota ve rolü, HTTP API referansı'de listelenir.

#
Prensip

2. Neden yalnızca çağrı herkese açıktır?

Herkesin okuyabilmesi için web veya mobil uygulamanızda ortak anahtar yayınlanır. Neye izin veriyorsa, herkese izin verilir. Bir işlevi çağırmak bunun için tasarlanmış bir işlemdir: kodunuz arayanın ne yapabileceğine karar verir.

Bir fonksiyonun tanımını okumak farklıdır. Genellikle sırlar içeren kaynak kodunu ve ortam değişkenlerini içerir. İşlerin ve uyarıların listelenmesi verilerinizi gösterir. Bir işi sıraya almak kodunuzu kotanızda çalıştırır. Bunların hiçbiri halka açık olamaz ve platform, service_role olmayan herhangi bir anahtar için bunları 403 ile reddeder.

Aynı bölünme başka yerlerde de mevcut. Supabase, bir Uç İşlevinin varsayılan olarak çalıştırılmasından (verify_jwt = true) ve işlevleri CLI ve platformu (docs) aracılığıyla dağıtmadan önce kullanıcının JWT öğesini doğrular. Firebase, IAM izniyle (docs) Yönetici SDK'sı aracılığıyla güvenilir bir sunucu ortamındaki görevleri sıraya alır. Cloudflare yalnızca bir Çalışanın bir bağlama yoluyla kuyruğa gönderim yapmasına izin verir (docs).

Düzeltmeden önce ortak anahtar tanımları okuyabiliyordu

Hizmetin önceki sürümleri herhangi bir anahtara GET /v1/functions ve GET /v1/functions/{name} yanıtını veriyordu. Projeniz bu düzeltmeden önceki bir dağıtımda çalıştırıldıysa işlevlerinizin kodunu ve değişkenlerini açığa çıkmış olarak değerlendirin ve içerdikleri gizli dizileri döndürün. 0,6'ya yükseltmeye bakın .

#
Kimlik

3. Kimlik taklit edilemez

İşleviniz arayan kişiyi x-aura-role, x-aura-user-id ve x-aura-project-id öğelerinden okur. Platform, anahtarı ve jetonu doğruladıktan sonra bunları ayarlar.

  • Arayan kişi bunları sağlayamaz. Platform, durumu ne olursa olsun, authorization, apikey, x-request-id ve bir çağrının headers içinde gönderilen herhangi bir x-aura-* başlığını atar. Gerçek bir testte, x-aura-role: service_role ve sahte authorization içeren bir çağrı, authorization olmadan role: "anon" işlevine ulaştı.
  • Diğer özel başlıklar dokunulmadan geçer. Bunları kullanıcı girişi olarak değerlendirin.
  • İşler ve cron tetiklemeleri işlevinize kimlik başlıkları olmadan ulaşır. Kullanıcı tarafından değil platform tarafından tetiklenirler.

Bu nedenle x-aura-role ve x-aura-user-id üzerinde yetkilendirin, asla gövdedeki bir değere göre yetkilendirin:

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 })
  }
  // 'userId' hesabını silin, asla gövdeden alınan bir kimliği silin
  return new Response('ok')
})
#
izolasyon

4. Korumalı alan

Platformun size sundukları:

  • Her çağrı, kendi bellek limiti ve duvar saati zaman aşımı ile kendi V8 izolasyonunda çalışır. Bir çağrıdaki çökme veya sonsuz döngü, diğerini etkilemez.
  • Ana bilgisayarın ortam değişkenleri görünmez: Deno.env.get('PATH') gerçek bir çalıştırmada undefined değerini döndürdü. Yalnızca işlevinizin değişkenleri ve platformun AURABASE_* değişkenleri mevcuttur.
  • Bir projenin kodu bir başkası tarafından okunamaz: ona hizmet eden hizmet dahili bir belirteç gerektirir.
  • Komut dosyalarını çalıştırabilen yanıtlar, korumalı alan oluşturma içerik güvenliği ilkesiyle sunulur ve bir işlevdeki Set-Cookie ve CORS üstbilgileri bırakılır. yanıtlarına bakın.

Size ne vermez:

  • Siz kısıtlamadıkça giden ağ açıktır. permissions.allow_net en az bir ana makine listelediğinde, çalışma zamanı başka herhangi bir ana makineye yapılan fetch isteğini reddeder (Requires net access to "host:443"). Varsayılan olan boş liste hiçbir şeyi kısıtlamaz. Fonksiyonun ihtiyaç duyduğu her ana makineyi, platformu çağırıyorsa projenizin URL’si dahil, listeleyin. Liste olsa bile kullanıcı girdisinden gelen her URL’yi doğrulayın.
  • Günlüklerde kendi sırlarınız korunmaz. İşlevinizin console.log ile yazdığı her şey çalışma zamanının günlüklerine gider.
  • Kullanıcı başına sınır yoktur. Çağırma hızı sınırı istemci IP'sine göredir. Bir kullanıcının bir işlevi birkaç defadan fazla çağırmaması gerekip gerekmediğini kendi kontrolünüzü ekleyin.
#
Kontrol listesi

5. Kontrol Listesi

  • service_role anahtarı yalnızca sunucularınızda ve CI gizli dizilerinizde bulunur.
  • Tarayıcı paketi yalnızca genel anahtarı içerir. SDK, varsayılan olarak tarayıcıdaki service_role anahtarını reddeder.
  • Her işlev hassas bir şey yapmadan önce x-aura-role öğesini kontrol eder.
  • Sırlar işlevin değişkenleridir; asla index.ts içinde değildir.
  • Harici URL'leri çağıran işlevler hedefi doğrular.
  • Bir anahtarı, Studio'da yeni bir anahtar oluşturarak, bunu bir sır olarak dağıtarak ve ardından eskisini iptal ederek döndürürsünüz.