Ana içeriğe geç

Amazon CloudFront için Wallarm Connector

CloudFront Amazon Web Services tarafından işletilen bir içerik dağıtım ağıdır. Wallarm, CloudFront üzerinden dağıtılan trafiği korumak ve izlemek için bir connector olarak işlev görebilir.

Wallarm'ı CloudFront için bir connector olarak kullanmak için, Wallarm node'unuzu harici olarak dağıtmanız ve trafiği analiz için Wallarm node'una yönlendiren Wallarm tarafından sağlanan Lambda@Edge fonksiyonlarını çalıştırmanız gerekmektedir.

CloudFront connector'ü hem in-line hem de out-of-band trafik analizini destekler:

Eğer Wallarm kötü niyetli aktiviteyi engelleyecek şekilde yapılandırıldıysa:

CloudFront ile Wallarm - satır içi şema

CloudFront ile Wallarm - hat dışı şema

Kullanım Durumları

Tüm desteklenen Wallarm deployment options arasında, trafik Amazon CloudFront üzerinden dağıtıldığında bu çözüm önerilmektedir.

Sınırlamalar

  • Lambda@Edge fonksiyon seviyesi kısıtlamalar:

    • Lambda@Edge fonksiyonları, HTTP durum kodları 4xx olan viewer yanıtlarıyla tetiklenmez.
    • Lambda@Edge, hem origin response hem de viewer response olaylarında yanıt gövdesine erişime izin vermez; bu, yanıt içeriğine dayalı herhangi bir işlemin gerçekleştirilmesi imkânını kısıtlar.
    • Gövde boyutu, viewer istekleri için 40 KB ve origin istekleri için 1 MB ile sınırlıdır.
    • Wallarm node'undan maksimum yanıt süresi, viewer istekleri için 5 saniye, origin istekleri için 30 saniyedir.
    • Lambda@Edge, özel ağları (VPC) desteklemez.
    • Bölge başına eşzamanlı isteklerin varsayılan limiti 1.000'dir, ancak bu limit on binlerceye kadar artırılabilir.
    • Wallarm Lambda@Edge fonksiyonları origin seviyesinde çalışır, yani CDN önbelleği tarafından işlenen istekleri izlemez. Bu nedenle, önbellekteki isteklerde gerçekleşen potansiyel saldırılar tespit edilemez.
  • Özellik kısıtlamaları:

    • Lambda@Edge yanıt tetikleyici kısıtlamaları nedeniyle, pasif tespit ve API Discovery kapsamındaki API yanıt yapısına dayalı zafiyet tespiti sınırlıdır. Wallarm fonksiyonları yanıt gövdelerini alamadığından ve onlara dayalı işlem yapamadığından, bu özellikler mevcut değildir.
    • Wallarm kuralı tarafından rate limiting desteklenmez.
    • Multitenancy henüz desteklenmemektedir.

Gereksinimler

Dağıtıma devam edebilmek için aşağıdaki gereksinimlerin karşılandığından emin olun:

  • AWS CloudFront ve Lambda teknolojilerinin anlaşılması.

  • CloudFront CDN üzerinden akan API’lar veya trafik.

Dağıtım

1. Bir Wallarm node'u dağıtın

Wallarm node, gelen trafiği inceleyen, kötü niyetli aktiviteleri tespit eden ve tehditleri azaltmak amacıyla yapılandırılabilen Wallarm platformunun temel bileşenidir.

Wallarm'ı, istediğiniz kontrol seviyesine bağlı olarak ya Wallarm tarafından barındırılan ya da kendi altyapınızda dağıtabilirsiniz.

Connector için Wallarm barındırmalı bir node dağıtmak adına, talimatları izleyin.

Kendi kendinize barındırdığınız bir node dağıtımı için bir artifact seçin ve ekli talimatları takip edin:

2. Wallarm Lambda@Edge Fonksiyonlarını Edinip Dağıtın

CloudFront CDN'inizi Wallarm node'una bağlamak için AWS üzerinde Wallarm Lambda@Edge fonksiyonlarını dağıtmanız gerekmektedir.

İki Python tabanlı fonksiyon bulunmaktadır: biri istek iletimi ve analizi için, diğeri ise yanıt iletimi ve analizi için.

  1. Wallarm Console → Security EdgeConnectorsDownload code bundle yolunu izleyerek, platformunuza uygun bir kod paketini indirin.

    Eğer self-hosted node kullanıyorsanız, kod paketini almak için sales@wallarm.com ile iletişime geçin.

  2. AWS Console → ServicesLambdaFunctions yolunu izleyin.

  3. Lambda@Edge fonksiyonları için gerekli olan us-east-1 (N. Virginia) bölgesini seçin.
  4. Aşağıdaki ayarlarla Create function oluşturun:

    • Runtime: Python 3.x.
    • Execution role: Create a new role from AWS policy templatesBasic Lambda@Edge permissions (for CloudFront trigger).
    • Diğer ayarlar varsayılan olarak bırakılabilir.
  5. Fonksiyon oluşturulduktan sonra, Code sekmesinde Wallarm istek işleme kodunu yapıştırın.

  6. Kod içerisindeki şu parametreleri güncelleyin:

    • wlrm_node_addr: Wallarm node instance adresiniz.
    • wlrm_inline: Eğer out-of-band modunu kullanıyorsanız, False olarak ayarlayın.
    • Gerekirse diğer parametreleri de değiştirin.
  7. ActionsDeploy to Lambda@Edge seçeneğine ilerleyin ve aşağıdaki ayarları belirtin:

    • Yeni CloudFront trigger yapılandırması.
    • Distribution: Korunmasını istediğiniz origin'e trafiği yönlendiren CDN'niz.
    • Cache behavior: Genellikle * olan Lambda fonksiyonu için cache behavior.
    • CloudFront event:

      • Origin request: Fonksiyon, yalnızca CloudFront CDN'in backend'den veri istediğinde çalışır. CDN önbellekten yanıt dönerse, fonksiyon tetiklenmez.
      • Viewer request: Fonksiyon, CloudFront CDN'e yapılan her istek için çalışır.
    • Include body seçeneğini işaretleyin.

    • Confirm deploy to Lambda@Edge seçeneğini işaretleyin.

    CloudFront fonksiyon dağıtımı

  8. Wallarm tarafından sağlanan yanıt fonksiyonu için de aynı prosedürü tekrarlayın, yanıtları trigger olarak seçin.

    Yanıt tetikleyicisinin, istek tetikleyicisiyle (origin request için origin response, viewer request için viewer response) eşleştiğinden emin olun.

Her iki fonksiyonu da AWS Serverless Application Repository (SAR) üzerinden doğrudan dağıtabilirsiniz. Fonksiyonlar, Lambda@Edge fonksiyonları için gerekli olan us-east-1 (N. Virginia) bölgesinde dağıtılacaktır.

  1. Wallarm policies on AWS Serverless Application Repository sayfasına gidin → Deploy seçeneğine tıklayın.
  2. Dağıtım ayarlarını varsayılan olarak bırakın.
  3. Dağıtım tamamlandıktan sonra, oluşturulan IAM rolleri → Trust relationships bölümüne gidin ve her iki rolü (istekler için biri, yanıtlar için biri) aşağıdaki politika ile güncelleyin:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": [
                        "edgelambda.amazonaws.com",
                        "lambda.amazonaws.com"
                    ]
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. AWS Console → ServicesLambdaFunctions yoluna ilerleyin.

  5. serverlessrepo-wallarm-connector-RequestHandler-xxx fonksiyonunu açın.
  6. Code sekmesinde aşağıdaki parametreleri güncelleyin:

    • wlrm_node_addr: Wallarm node instance adresiniz.
    • wlrm_inline: Eğer out-of-band modunu kullanıyorsanız, False olarak ayarlayın.
    • Gerekirse diğer parametreleri de değiştirin.
  7. ActionsDeploy to Lambda@Edge seçeneğine ilerleyin ve aşağıdaki ayarları belirtin:

    • Yeni CloudFront trigger yapılandırması.
    • Distribution: Korunmasını istediğiniz origin'e trafiği yönlendiren CDN'niz.
    • Cache behavior: Genellikle * olan Lambda fonksiyonu için cache behavior.
    • CloudFront event:

      • Origin request: Fonksiyon, yalnızca CloudFront CDN'in backend'den veri istediğinde çalışır. CDN önbellekten yanıt dönerse, fonksiyon tetiklenmez.
      • Viewer request: Fonksiyon, CloudFront CDN'e yapılan her istek için çalışır.
    • Include body seçeneğini işaretleyin.

    • Confirm deploy to Lambda@Edge seçeneğini işaretleyin.

    CloudFront fonksiyon dağıtımı

  8. AWS Console → ServicesLambdaFunctions yoluna geri dönün.

  9. serverlessrepo-wallarm-connector-ResponseHandler-xxx fonksiyonunu açın.
  10. Wallarm tarafından sağlanan yanıt fonksiyonu için aynı prosedürü tekrarlayın, yanıtları trigger olarak seçin.

    Yanıt tetikleyicisinin, istek tetikleyicisiyle (origin request için origin response, viewer request için viewer response) eşleştiğinden emin olun.

Test Etme

Dağıtılan fonksiyonların işlevselliğini test etmek için aşağıdaki adımları izleyin:

  1. CloudFront CDN'inize Path Traversal saldırısı içeren bir istek gönderin:

    curl http://<CLOUDFRONT_CDN>/etc/passwd
    
  2. Wallarm Console → Attacks bölümünü US Cloud veya EU Cloud üzerinden açın ve saldırının listede göründüğünden emin olun.

    Attacks in the interface

    Eğer Wallarm node modu blocking olarak ayarlandıysa ve trafik in-line akış gösteriyorsa, istek engellenecektir.

Lambda@Edge Fonksiyonlarını Güncelleme

Dağıtılmış Lambda@Edge fonksiyonunu yeni bir sürüme yükseltmek için:

  1. Wallarm Console → Security EdgeConnectorsDownload code bundle yolunu izleyerek güncellenmiş Wallarm Lambda@Edge fonksiyonlarını indirin.

    Eğer self-hosted node kullanıyorsanız, güncellenmiş kod paketini almak için sales@wallarm.com ile iletişime geçin.

  2. Dağıtılmış Lambda@Edge fonksiyonlarınızın kodunu, güncellenmiş paket ile değiştirin.

    Mevcut wlrm_node_addr, wlrm_inline ve diğer parametre değerlerini koruyun.

    Mevcut fonksiyon tetikleyicilerini değiştirmeyin.

  1. Fonksiyonların yeni sürümünü kullanarak, ikinci adımda belirtilen adımları tekrarlayın.
  2. Güncellenmiş fonksiyonları dağıtıma bağladıktan sonra, çakışmaları önlemek için CloudFront trigger'larından önceki sürümleri kaldırın.

Fonksiyon güncellemeleri, özellikle büyük sürüm güncellemelerinde Wallarm node yükseltmesini gerektirebilir. Sürüm güncellemeleri ve yükseltme talimatları için Wallarm Native Node changelog belgesine bakın. Gelecekteki yükseltmeleri basitleştirmek için düzenli node güncellemeleri önerilir.