Edge Functions güvenlik modeli
İşlevlerinizi, kodlarını ve sırlarını gizli tutan kurallar ve sorumlu kaldığınız yerler.
1. Anahtarlar ve roller
| Rol | Anahtar | Yapabilir |
|---|---|---|
anon | Genel anahtar, tarayıcıda güvenli | Bir işlevi çağırma |
authenticated | Genel anahtar artı oturum açmış kullanıcının JWT | Kullanıcının kimliğiyle bir işlevi çağırma |
service_role | Gizli anahtar, yalnızca sunucu | Her şey: dağıtma, kodu ve sırları okuma, işler, cron, uyarılar |
admin | Stüdyoda bir konsol oturumu | Stü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.
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).
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 .
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-idve bir çağrınınheadersiçinde gönderilen herhangi birx-aura-*başlığını atar. Gerçek bir testte,x-aura-role: service_roleve sahteauthorizationiçeren bir çağrı,authorizationolmadanrole: "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:
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ırmadaundefineddeğerini döndürdü. Yalnızca işlevinizin değişkenleri ve platformunAURABASE_*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-Cookieve 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_neten az bir ana makine listelediğinde, çalışma zamanı başka herhangi bir ana makineye yapılanfetchisteğ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.logile 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.
5. Kontrol Listesi
service_roleanahtarı 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_roleanahtarı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.tsiç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.