Yapay Zeka Ajanları
n8n Öğrenme Yolu
BÖLÜM 13İleri ~50 dk

Güvenlik ve Credentials Yönetimi

API anahtarı, secret, OAuth ve hassas veri yönetimi. Webhook güvenliği, rate limit ve izleme.

Bu bölümde

n8n çok güçlü bir araçtır ama yanlış yapılandırıldığında ciddi güvenlik açıkları doğurabilir: açık webhook URL'leri saldırgan sayfanız haline gelir, sızdırılmış bir API key kurumun tüm Slack mesajlarına erişim verir, OAuth token'larının yenilenmesi atlanırsa sistem sessizce çalışmaz olur. Bu bölümde production'da güvenli kalmak için bilmeniz gereken her şey: credentials nasıl şifrelenir, OAuth2 token akışı ve yenileme, webhook'a HMAC ile imza doğrulama, rate limit ve abuse koruması, PII maskeleme, audit log ve erişim kontrolü.

Konular

  • Credentials store: encryption at rest
  • OAuth2 akışı ve token yenileme
  • Webhook secret/HMAC doğrulama
  • Rate limiting ve abuse koruması
  • Hassas veriyi maskeleme ve PII
  • Audit log ve erişim kontrolü

Credentials store: encryption at rest nasıl çalışır?

n8n credentials'ı (API key, parola, token, OAuth client secret) düz metin saklamaz. Tüm credentials AES-256-CBC ile şifrelenir ve veritabanına şifreli yazılır. Şifreleme anahtarı N8N_ENCRYPTION_KEY environment değişkenidir. Bu yüzden: (1) Production'da ENCRYPTION_KEY'i ELLE belirleyin (`openssl rand -hex 32`), n8n'in otomatik üretmesini beklemeyin. (2) Bu key'i en az 3 yerde yedekleyin: parola yöneticisi + offline yazılı + yedek sunucu. (3) Key kaybolursa: tüm credentials geri alınamaz, hepsini sıfırdan tekrar girmek zorunda kalırsınız. (4) Postgres yedeği alırken ENCRYPTION_KEY olmadan yedek tek başına anlamsızdır — birlikte saklayın ama AYNI yerde değil.

OAuth2 akışı: client_id, client_secret ve token yenileme

Google, Microsoft, Slack, HubSpot gibi servislerle OAuth2 üzerinden konuşursunuz. Akış: (1) İlgili servisten OAuth uygulaması oluşturun (Google Cloud Console / Slack App Directory vb.). (2) Redirect URI'ye n8n credential ekleme ekranındaki URL'i girin (HTTPS olmazsa OAuth'un büyük çoğunluğu reddeder). (3) Client ID + Client Secret'i n8n credentials sekmesine yapıştırın → 'Connect my account' butonuyla yetki ekranını geçin. n8n artık erişim ve refresh token saklar. Erişim token'ı genelde 1 saatte expire olur, n8n bunu refresh token ile otomatik yeniler. Sorun: refresh token sayısı bazı API'lerde sınırlı veya 6 ay kullanılmadığında expire — kritik OAuth bağlantıları aylık 'sağlık kontrolü' workflow'unuz olsun (boş bir API çağrısı yap, başarısızlık alert'e gitsin).

n8n credential
OAuth2 authorize
Access token (1h)
Refresh token (auto)

Webhook güvenliği: imzasız webhook açık kapıdır

n8n webhook URL'iniz public internet'tedir. Hiçbir doğrulama yoksa: saldırgan URL'i tahmin eder veya log'dan görür, sahte istek gönderir, sizin adınıza email atar / DB'ye yazar / OpenAI fatura yer. Asgari koruma 4 katman: (1) Header secret: webhook ayarlarından 'Authentication: Header Auth' aktifleştirin, ad+değer girin; gönderen taraf header'a eklemezse n8n 401 döner. (2) Path token: URL'in kendi içinde tahmin edilemez bir UUID koyun (`/webhook/9f2e...8a1c`). (3) HMAC imza: kritik webhook'larda (Shopify, Stripe, GitHub) — bir sonraki bölümde detay. (4) IP whitelist: sadece bilinen gönderici IP'lerinden gelene izin veren reverse proxy kuralı (Cloudflare, Nginx allow/deny). Production webhook'ta minimum 2 katman uygulayın.

HMAC imza doğrulama: Stripe, Shopify, GitHub pattern'i

Profesyonel API'ler (Stripe, Shopify, GitHub, Twilio) webhook payload'ını shared secret ile HMAC-SHA256'lar ve hash'i 'X-Hub-Signature-256' / 'Stripe-Signature' gibi header'a koyar. Sizin de aynı secret'le aynı payload'ı hash'leyip eşleştirmeniz gerekir; eşleşmezse istek sahte. n8n'de uygulama: Webhook node 'Raw Body' aktif (zorunlu — JSON parse edilirse byte değişir, hash tutmaz) → Code node'da `crypto.createHmac('sha256', secret).update($input.first().binary.data.data).digest('hex')` → IF ile gelen header ile karşılaştır → eşit değilse Respond 401, eşitse devam. Constant-time karşılaştırma için crypto.timingSafeEqual kullanın (== ile timing attack mümkün).

Webhook (Raw Body)
Code (HMAC compute)
IF (signatures equal?)
Continue / 401 Reject

Rate limiting ve abuse koruması

Açık bir AI workflow'unuz varsa (örn. müşteri chat botu) ve rate limit yoksa: kötü niyetli biri saniyede 100 istek atar, OpenAI faturanız bir gecede 1000$ olabilir. Çözüm katmanları: (1) Reverse proxy seviyesinde: Cloudflare/Nginx rate-limit (IP başına dakikada 30 istek). (2) Workflow seviyesinde: ilk node'da Redis/Postgres'te 'son 1 dakikada bu IP+endpoint için sayaç' tut, eşik aşılırsa 429 dön. (3) Token bütçesi: aynı kullanıcı için günlük token harcamasını DB'ye yaz, limit aşıldığında soft block. (4) reCAPTCHA: insan kontrolü gereken senaryolarda frontend'e ekleyin. (5) Kill switch: tek bir env değişkeniyle (`AI_ENABLED=false`) tüm AI workflow'ları durdurabilen IF kapısı ekleyin — anormal harcama görünce 5 saniyede durdurabilirsiniz.

PII maskeleme ve veri minimizasyonu

KVKK ve GDPR sizden veri minimizasyonu ister: işin için gerekli olmayan kişisel veriyi tutma, gerekliyi de mümkün olduğunca anonimleştir. Pratik n8n uygulaması: (1) Log'a ham PII yazmayın — Set node ile e-postayı 'a***@gmail.com' formatına maskeleyin, telefon son 4 hane (`***1234`), TC sadece hash. (2) LLM'e tam isim/TC gönderirken anonim placeholder kullanın ('{user_name_1}') ve cevabı kullanıcıya gösterirken geri yerleştirin — model log'larında gerçek isim kalmaz. (3) Hassas alanları Postgres'te 'pgcrypto' ile şifreli kolonda saklayın. (4) Retention politikası: execution log'ları 30 gün sonra otomatik sil (EXECUTIONS_DATA_MAX_AGE), backup'ları 90 günde silin. (5) Kullanıcı 'verilerimi sil' derse hangi workflow + tablo + S3 path'i temizlenecek — bunu önceden dokümante edin.

Audit log ve erişim kontrolü: kim, ne, ne zaman?

Production n8n'de mutlaka bilmeniz gereken üç şey: kim hangi workflow'u değiştirdi, kim hangi credential'ı kullandı, kim hangi execution'ı manuel çalıştırdı. n8n Enterprise lisansında 'Audit Log' built-in, community sürümde elle kurmanız gerekir: (1) n8n'in stdout log'unu Loki/Elasticsearch'e yönlendirin, parse edip 'user-action' event'lerini bir tabloda biriktirin. (2) Workflow JSON'larını her gün git'e commit'leyin → kim ne değiştirdi git history'de görünür. (3) Birden fazla kullanıcı varsa: n8n RBAC (Enterprise) veya en azından kullanıcı başına ayrı n8n instance + reverse proxy basic-auth ile ayrıştırın. (4) Credential'a erişim seviyesi: 'Owner' / 'Member' rollerini doğru atayın, herkes her credential'a erişmesin. (5) 2FA: n8n.cloud'da var, self-host'ta SSO/SAML (Enterprise) — onsuz tek parola ile tüm sistemi kaybedersiniz.

Güvenlik checklist: production'a almadan önce

Aşağıdaki 10 maddeyi geçmeyen workflow production'a alınmaz: (1) HTTPS aktif mi, sertifika geçerli mi? (2) N8N_ENCRYPTION_KEY belirlenmiş ve yedeklenmiş mi? (3) Tüm webhook'larda Header Auth veya HMAC var mı? (4) Webhook URL'lerinde tahmin edilemez UUID kullanılıyor mu? (5) Rate limit kuralı (proxy + workflow) tanımlı mı? (6) Loglara PII yazılıyor mu — kontrol edildi mi? (7) EXECUTIONS_DATA_MAX_AGE ayarlandı mı (30-90 gün)? (8) OAuth bağlantıları için aylık sağlık kontrolü workflow'u var mı? (9) n8n editor URL'i public internete açıksa basic-auth veya VPN arkasında mı? (10) Yedeklerden geri yükleme tatbikatı son 3 ayda yapıldı mı? Bu listeyi her yeni workflow değil — kurulumun kendisi için bir kez doğru kurun, sonra yeni workflow'lar güvenli ortamda doğar.

Bu bölümün workflow'u (n8n editör görünümü)

Webhook (HMAC verify)
IF
Continue / Reject
WhatsApp'tan Danış