2025-10-14Piotr Migdał

AWS Lambda ile Güvenli Kod Sandboxing (Sandbox) Çözümü

AWS LambdaSecurityDockerSandboxing
A

Üretim ortamında güvensiz, yapay zeka tarafından oluşturulan kodları çalıştırmak zorlu bir problemdir. Anlık kod üreten yapay zeka uygulamaları geliştiren her geliştirici bu zorlukla karşılaşır. Sisteminizi bozabilecek kötü amaçlı veya aşırı kaynak tüketen kodları engellemek için güçlü bir güvenliğe ve iş yükleri tahmin edilemez şekilde arttığında ölçeklenebilirliğe ihtiyacınız vardır.

Bu rehberde, AWS Lambda üzerinde güvenli ve izole bir çalıştırma ortamı (sandbox) oluşturarak bu sorunu nasıl çözebileceğinizi inceleyeceğiz.

İlk Yaklaşım: Tarayıcıda WebAssembly

İlk içgüdümüz, WebAssembly (özellikle WebR) kullanarak güvenlik riskini kullanıcıların tarayıcılarına taşımaktı. Bu yaklaşımın belirgin avantajları vardı: sıfır altyapı maliyeti ve doğal ölçeklenme.

Ancak, kritik sınırlamalar ortaya çıktı:

  • Eksik bağımlılıklar: 'Neredeyse her şey' üretim ortamı için yeterli değildir.
  • Performans darboğazları: Devasa indirme boyutları (12MB'dan 92MB'a kadar), yavaş bağlantılarda kullanılamaz deneyimler yarattı.
  • Karmaşık veri akışları: Gerçek uygulamaların sonuçları kaydetmesi ve çıktıları analiz etmesi gerekir, bu da karmaşık bir ileri-geri iletişim yaratır.

Çözüm: AWS Lambda ve Docker

Kod yürütmeyi AWS Lambda'ya taşımak ana sorunlarımızı çözdü. R'nin belirli bir sürümüne sahip, gerekli tüm bağımlılıkları içeren özel bir Docker imajı oluşturduk.

AWS Lambda Mimarisi

Neden Lambda Üzerinde Docker?

  • Tutarlılık: Bağımlılık boşluklarını ortadan kaldırır.
  • Zaman Aşımı (Timeout): Lambda'nın yapılandırılabilir zaman aşımı (örneğin 30 sn), sonsuz döngüleri engeller.
  • Basitleştirilmiş Akış: Kullanıcı istemi gönderir -> Backend -> Lambda çalıştırır -> S3 sonucu kaydeder.

VPC ile Ağ İzolasyonu

Güvenlik, tam ağ izolasyonu gerektiriyordu. Lambda fonksiyonlarımız, genel internete erişimi olmayan bir Sanal Özel Bulut (VPC) içinde çalışır.

Temel Güvenlik Önlemleri

  1. Özel Alt Ağlar (Private Subnets): Lambda, İnternet Ağ Geçidi (Internet Gateway) olmayan özel alt ağlarda çalışır.
  2. VPC Uç Noktaları (Endpoints): S3 için bir VPC Gateway Endpoint yapılandırdık. Bu, fonksiyonun trafiğin AWS ağından hiç çıkmadan S3'e veri okuyup yazmasını sağlar.

Ağ İzolasyonu

Adım Adım: Sandbox Mimarisi

Benzer bir ortamı nasıl kurabileceğiniz aşağıda açıklanmıştır:

  1. Docker İmajı Oluşturun: Çalışma zamanınızı (Python, R vb.) ve gerekli kütüphaneleri yükleyen bir Dockerfile oluşturun.

    FROM public.ecr.aws/lambda/python:3.11
    COPY requirements.txt .
    RUN pip install -r requirements.txt
    COPY app.py .
    CMD ["app.handler"]
    
  2. VPC Yapılandırın: Özel alt ağlara sahip bir VPC oluşturun. İzolasyonu zorunlu kılmak için bu alt ağlara NAT Gateway veya Internet Gateway bağlı olmadığından emin olun.

  3. Lambda'yı Dağıtın: Docker imajınızı Lambda'ya dağıtın. VPC'nizin özel alt ağlarını kullanacak şekilde yapılandırın.

  4. S3 Gateway Endpoint Kurun: VPC Konsolu -> Endpoints -> Create Endpoint yolunu izleyin. 'AWS services'ı seçin, com.amazonaws.region.s3 (Gateway) seçeneğini bulun ve VPC'nizin yönlendirme tablosuna (route table) ekleyin.

Gerçek Dünya İçgörüleri

Lambda Bellek-CPU İlişkisi

AWS Lambda'da CPU gücü bellekle orantılı olarak artar. CPU ağırlıklı görevler için (karmaşık grafikler oluşturmak gibi), kodunuz sadece 200MB kullansa bile yeterli CPU gücü elde etmek için 2048MB RAM sağlamanız gerekebilir.

Hibrit Geliştirme İş Akışı

Bulutu yerel ortamda birebir kopyalamaya çalışmayın. Ana web servisinizi yerel olarak çalıştırın, ancak özel bir AWS geliştirme ortamındaki paylaşılan Lambda fonksiyonuna bağlanın.

Sonuç

WebAssembly izole hesaplama için harika olsa da, arka uç entegrasyonu gerektiren karmaşık iş akışları için AWS Lambda daha iyi bir seçimdir. Docker, VPC izolasyonu ve otomatik ölçeklendirmenin kombinasyonu, güvensiz kodlar için sağlam bir sandbox sağlar.

Konteyner orkestrasyonu hakkında daha fazla bilgi için, ihtiyaçlarınız Lambda'yı aşarsa Kubernetes çözümlerini inceleyebilirsiniz.