Anlatacağım otomasyon, JWT Token (*1) yaşam döngüsü içerisindeki Token Rotasyonuna konfigürasyon dosyalarının da dahil olması ve konfigürasyon dosyalarında zamanı geldiğinde Token değişikliği yapılması şeklinde açıklanabilir.
Değiştirme işlemini manuel ve otomatik olarak iki şekilde yapmak mümkün. Doğal olarak şu andaki konumuz manuel olarak yapılması değil. Biz bu işi DevOps (*2) felsefesine uygun olarak otomatik yapmayı tercih edeceğiz. Bu tip bir işi yapmanın birçok yolu mevcut. Siz de buna benzer işlerinizi otomatikleştirebilirsiniz. Bu anlatacağım uygulamayı, buna benzer otomatikleştirme işlerinin nasıl yapılacağı konusunda yol göstermesi ve fikir vermesi açısından paylaşıyorum.
Amacımız;
API (*3)
uygulamamız kimlik doğrulama (Authentication) yöntemi olarak JWT Token kullanılıyor. JWT Token doğası gereği son kullanma süresi olan bir kimlik doğrulama yöntemidir ve kullanılan bu Token’ların da geçerlilik süreleri vardır. Bu süreler dolmadan belirli bir süre önce JWT Token’ların yenileri ile değiştirilmeleri gerekiyor. Değişmesi gereken içeriklerin listesi aşağıdadır;
- Uygulamaların konfigürasyon dosyalarının içeriğinde bulunan Token’lar,
- Scriptlerin API’ye ulaşması için içeriklerinde veya konfigürasyonlarının içerisinde bulunan Token’lar,
- AWS ALB (*4) Target Group’ların uygulamarın çalışıp çalışmadığını kontrol için kullandığı Health Check (*5) parametreleri içerisinde bulunan JWT Token’lar.
Bu makale dizisi içeriğinde neler ile ilgili bilgi bulacaksınız:
- Jwt Token yapısının incelenmesi,
- Powershell (*6) ile RegEx (*7) kullanarak dosyaların içerisinde JWT Token araması yapmak,
- PowerShell ile JWT Token Parse ederek, JWT Token bölümlerini inceleyip sonuçlara göre aksiyon oluşturmak,
- XML (*8) ve JSON (*9) dosyaları Import edip değişiklik yapmak,
- Text (*10) bazlı dosyaları Import edip değişiklik yapmak,
- AWS Load Balancer Target Gruplarını AWS PowerShell (*11) ile sorgulayıp ayarlarını değiştirmek,
- Basit data saklama işlemleri için CSV (*12) dosya oluşturmak ve bunlar ile çalışmak.
Sorunu tanımlayalım
Daha önce de bahsettiğimiz gibi amacımız JWT Token’ları otomatik olarak değiştirecek bir yapı oluşturulması ve zamanlanmış olarak belirli sürelerde bu değişikliğin yapılması şeklinde tanımlanabilir.
İlk aşamada, Dosyaları mevcut formatına bakmadan Text bazlı olarak RegEx kullanarak içerik araması yapıp, Token içeren dosyaları bulmak. Bulunan JWT Token’ların içeriğini Decode edip tüm ayrıntıları CSV tipinde bir dosyaya aktarmak. İkinci aşamada birinci aşamada oluşturulan CSV dosyasını kullanarak tarihi yaklaşan Token’ların yenisinin oluşturulmasını sağlamak. Yeni Token’ları da dosya formatına veya servise uygun şekilde yenilerek aktif hale getirmek. Token’ları arayacağımz dosya formatları ve Servisler;
- .Net Framework olan uygulamalarda (Örneğin web.config) XML formatında dosyalar.
- .Net Core olan uygulamalarda (Örneğin appsettings.config) JSON formatında dosyalar.
- PowerShell (*.ps1) scriptleri ve Text (*.txt) formatında içeriğinde Token barındıran PowerShell scriptlerinin kullandığı aslında CSV formatında olan konfigürasyon dosyaları.
- AWS ALB Target Group’ların Health Check parametrelerindeki Token’ların (AWS PowerShell ile) sorgulanıp gerekiyorsa değiştirilmesi
Bu iki aşama için benim tasarımımda 2 adet Powershell Script kullanacağız. Bu Script’leri de sırası ile haftalık olarak zamanlanmış bir görev içinde (Windows için Task Scheduler veya Linux için Cron kullanarak) çalıştırılmasını sağlayacağız. Oluşan değişiklikleri ve hataları raporlayıp gerektiğinde alarm oluşturacağız.
Çözüm için yapılanları açıklayalım;
- Öncelikle JWT Token araması yapacağımız için arayacağımız şeyin yapısını incelememiz gerekiyor.
- Genel olarak yapısını öğrendiğimiz JWT Token adaylarını dosyalar içinde bulmak için RegEx kullanacağız.
- Bulduğumuz Token adaylarının gerçekten JWT Token olup olmadığını Powershell ile sınayacağız.
- Doğrulamaları geçen Tokenlar’ı API’nin Token üreten yoluna gönderip yenilenmesi gerekenleri tespit edeceğiz.
- Yenilenmesi gereken Token’ları dosya tipine göre (XML, Json, ps1, txt) açıp Token’ı yenisi ile değiştirdikten sonra yeni haliyle kayıt edeceğiz.
- Oluşan değişiklikleri ve hataları raporlayıp gerektiğinde alarm oluşturacağız.
- Tüm otomasyonu yapan Scriptleri zamanlanmış olarak haftada bir çalıştıracağız.
Makalenin çok uzun olmaması için ilk bölümü burada kesip, ikinci bölümünde; yukarıda detaylı hikayesini anlattığım otomasyonun çözüm aşamalarını yapacağım. İlginizi çektiyse İkinci bölümde görüşmek üzere.
Referanslar:
- JWT (JSON Web Token): https://tr.wikipedia.org/wiki/JSON_Web_Token
- API (Application Programming Interface): https://en.wikipedia.org/wiki/API
- AWS ALB (Application Load Balancer): https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html
- Health checks for your target groups: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html
- RegEx (Regular expression): https://en.wikipedia.org/wiki/Regular_expression
- XML (Extensible Markup Language): https://en.wikipedia.org/wiki/XML
- JSON (Javascript Object Notation): https://www.mshowto.org/json-javascript-object-notation-nedir.html
- AWS Powershell: https://aws.amazon.com/tr/powershell/
- CSV (Comma-separated Values): https://en.wikipedia.org/wiki/Comma-separated_values
TAGs: Otomasyon, JWT Token, DevOps, API, Powershell, AWS Powershell, XML, JSON, CSV, TEXT.