Geçtiğimiz yıllarda yaşanan büyük veri ihlallerinin büyük bir kısmı —SolarWinds ve Toyota müşteri verisi sızıntısı gibi— statik AWS erişim anahtarlarının unutulması, yanlışlıkla depolanması ya da kod deposuna eklenmesiyle başladı. Bu sorunun çözümü, projelerinizi "anahtarsız" (keyless) bir mimariye taşımakta gizli.
İşte tam da bunu yaptıktan sonra, H0 Hackathon’unda FarmOps Desk adlı uygulamayı sıfır statik anahtarla hayata geçirdik. Proje, Vercel üzerinde Aurora PostgreSQL ve Amazon Bedrock kullanıyor. Temel hedefimiz, dağıtım zincirinde veya CI/CD süreçlerinde hiçbir statik AWS erişim anahtarına yer vermemekti.
İşte nasıl yaptık.
Geçici "Anahtar Kartları" ile OIDC Tabanlı Kimlik Doğrulama
Geleneksel yaklaşımda, Vercel’e statik bir AWS erişim anahtarı ekleyip tüm dağıtımlarda kullanmak yaygın. Oysa bu, uygulamayı sürekli saldırı riskine maruz bırakıyor. Bunun yerine, her fonksiyon çalıştığında 15 dakikalık geçici bir "anahtar kartı" talep eden bir sistem kurduk.
Bu sistem, Vercel’in AWS ile entegre olan OpenID Connect (OIDC) altyapısına dayanıyor:
- Vercel fonksiyonu çalıştığında, kendisine kriptografik olarak imzalanmış bir kimlik token’ı verilir.
- Fonksiyon bu token’ı AWS’ye sunar.
- AWS, token’ın doğruluğunu kontrol eder, token’ın sadece belirli Vercel projesinden geldiğini doğrular ve ardından 15 dakikalık bir geçici oturum anahtarı verir.
Eğer kötü niyetli bir kişi Vercel ortamına erişim sağlasa bile, karşısında kalıcı bir anahtar değil, kısa ömürlü bir oturum bulur. Bu oturum, saniyeler içinde otomatik olarak sona erer.
Yetki Ayrımı: Patlama Etkisini Sıfırlama
Yaygın bir hata, tüm yetkileri tek bir AWS rolüne vermekte yatıyor. Örneğin, hem veritabanına hem de yapay zekâ modellerine erişim vermek, saldırı yüzeyini olağanüstü genişletiyor.
Biz bunu iki ayrı, izole edilmiş rolle çözdük:
1. Veritabanı Rolü (`AWS_ROLE_ARN`)
- Sadece Aurora PostgreSQL veritabanına bağlanma izni var.
- "Permission Boundary" ile sınırlandırılmış, böylece veritabanı rolü hiçbir şekilde Bedrock’a veya S3’e erişemez.
2. Yapay Zeka Rolü (`BEDROCK_ROLE_ARN`)
- Sadece Amazon Bedrock Nova modellerini çağırmaya izin verir.
- Hiçbir şekilde veritabanına okuma ya da yazma izni yok.
Bu ayrım sayesinde, yapay zekâ kodunda oluşabilecek bir güvenlik açığı, veritabanını etkilemeden izole edilebilir. Aynı şekilde, veritabanına yönelik bir saldırı da yapay zekâ servisini etkilemez.
Kodda Basitlik: Modern SDK’larla Kolay Entegrasyon
Günümüzün SDK’ları sayesinde, anahtarsız mimariyi binlerce satır kodla değil, birkaç satırla hayata geçirebiliyoruz.
Veritabanı bağlantısı için @aws-sdk/rds-signer kütüphanesi kullanıyoruz. Bu sayede statik bir şifre yerine, her yeni bağlantıda otomatik olarak 15 dakikalık geçici bir token alıyoruz:
// lib/db.ts
import { RDS } from '@aws-sdk/client-rds-signer';
import { Pool } from 'pg';
const signer = new RDS.Signer({
hostname: process.env.PGHOST!,
port: 5432,
username: process.env.PGUSER!,
});
const pool = new Pool({
host: process.env.PGHOST,
user: process.env.PGUSER,
password: () => signer.getAuthToken(), // Her bağlantıda yeni token alın
ssl: true,
});Yapay zekâ modelleri içinse Vercel’in OIDC yardımcı fonksiyonunu kullanıyoruz. Bu fonksiyon, otomatik olarak OIDC token’ını geçici AWS erişim anahtarına dönüştürüyor:
// lib/ai/bedrock.ts
import { awsCredentialsProvider } from '@vercel/functions/oidc';
import { BedrockRuntimeClient } from '@aws-sdk/client-bedrock-runtime';
export function getBedrockRuntime() {
return new BedrockRuntimeClient({
region: 'us-east-1',
credentials: awsCredentialsProvider({
roleArn: process.env.BEDROCK_ROLE_ARN!,
}),
});
}Sesli AI: Nova Sonic ile Gerçek Zamanlı Diyalog
Tarım sektöründe çalışanlar için ellerinin meşgul olması sıkça karşılaşılan bir durum. Bu nedenle, sesli arayüzler kritik önem taşıyor. Projemizde Amazon Bedrock Nova Sonic modelini kullanarak gerçek zamanlı, iki yönlü sesli sohbet özelliği sunduk.
Ancak, Vercel gibi serverless ortamlarda uzun süreli ses akışları genellikle sorun yaratır. HTTP/2 oturumu, ilk sesli yanıttan sonra kapanır.
Bu sorunu aşmak için, özel bir "Sonic Bridge" servisini uzun süreli çalışan Amazon EC2 üzerine dağıttık. Bu köprü, varsayılan HTTP/2 oturumunu 5 dakikaya kadar uzatan özel bir NodeHttp2Handler kullanıyor. Böylece çiftçiler, kümeshanede yürürken bile sesli sohbeti kesintisiz olarak sürdürebiliyor.
EC2’ye Anahtarsız Dağıtım: SSH Anahtarlarından Kurtulma
Genellikle EC2’ye GitHub Actions üzerinden dağıtım yaparken SSH özel anahtarlarını veya statik AWS_ACCESS_KEY_ID’yi GitHub secrets’lerine kaydetmek gerekir. Biz bunu tamamen ortadan kaldırdık.
Tamamen anahtarsız bir CI/CD hattı kurduk:
- GitHub Actions, kendi yerleşik OIDC sağlayıcısını kullanarak AWS’ye kimliğini kanıtlar.
- AWS, GitHub’a sadece geçici bir oturum verir ve belirli bir IAM rolünü devralmasını sağlar.
- GitHub runner, AWS Systems Manager (SSM) üzerinden EC2’ye doğrudan dağıtım paketini gönderir ve komutları çalıştırır.
Hiçbir SSH anahtarı kullanılmaz. Hiçbir statik AWS erişim anahtarı GitHub secrets’lerinde yer almaz. GitHub deposu saldırıya uğrasa bile, saldırganın kullanabileceği kalıcı bir anahtar yoktur — sadece main branch’ine yapılan push’larda çalışan, dar kapsamlı bir OIDC güven ilişkisi vardır.
Veritabanını Ölçeklendirme: RDS Proxy ile Yük Yönetimi
Hackathon trafiğine yönelik olarak tasarlanan sistemde Aurora PostgreSQL, serverless fonksiyonların yüksek eşzamanlılığı nedeniyle bağlantı limitlerine ulaşabilir. Üretim ortamında bu risk gerçekleşirse, AWS RDS Proxy devreye girer.
RDS Proxy, yüzlerce Vercel bağlantısını tek bir Aurora bağlantısına indirgeyerek veritabanını aşırı yüklenmekten kurtarır. Bu proxy’nin kurulumuna dair kapsamlı bir rehber, proje deposunda yer alıyor.
Neden Anahtarsız Mimarinin Önemi Var?
Anahtarsız kimlik doğrulama, kasıtlı bir mühendislik kararının sonucudur. İlk etapta ortam değişkenlerine anahtar eklemekten daha karmaşık görünse de, bulut güvenliğinin üretim standartlarına uygun yanıtıdır.
Dağıtılabilir yazılım, kimlik bilgisi sızdırmayan yazılımdır. Statik anahtarları tamamen ortadan kaldırarak, FarmOps Desk ilk günden itibaren gerçek müşteri verilerini kabul edebilir — ve "anahtarları lansmandan önce döndüreceğiz" gibi bahanelerin ardına saklanmasına gerek kalmaz.
Yapay zeka özeti
AWS projelerinizde statik erişim anahtarları kullanıyorsanız, saldırganların yolunu açıyorsunuz demektir. FarmOps Desk’in OIDC ve geçici rollerle nasıl tamamen anahtarsız dağıtım yaptığını keşfedin.