Zaman Aşımı Tarihi 06.04.2021

6 Nisan 2021'de wildcard TLS sertifikamız beklenmedik bir şekilde zaman aşımına uğradı. Bir sertifikanın zaman aşımına uğraması rahatsız edici bir durumdur, ancak başkalarının da bundan ders çıkarabilmesi ve sistemlerini geliştirebilmesi için bu olayın hikâyesini paylaşmamızın önemli olacağını düşündük. Senin veya organizasyonun sertifika izleme kullanıyorsa, bu hatırlatmayı değerlendirerek bu sistemlerdeki boşlukları kontrol edebilirsin.

Zaman aşımına uğrayan sertifika çok sayıda Epic hizmeti tarafından kullanılıyordu. Sertifikalarımızın zaman aşımına uğraması konusunda elimizden gelen en iyi kontrol çalışmalarını yapmamıza rağmen, sertifikaların kullanıldığı her alanı tamamen kapsamıyorduk. Sertifikanın zaman aşımına uğramasının ve yenilenmesinin ardından bir dizi beklenmedik olay gerçekleşti ve bu nedenle kesinti süresi uzadı. Bu gönderide bu olayla ilgili ayrıntıları paylaşacağız.

Kimlik ve doğrulama sistemlerimiz gibi temel bileşenlerimiz bu durumdan etkilendi ve bu hizmetler tüm ekosistemimizdeki diğer birçok hizmetle birlikte çalışıyor. Görülen veya raporlanan etkiler şu şekildeydi:

  • Fortnite, Rocket League, Houseparty, Epic Online Services veya Epic Games Store dâhil olmak üzere bu doğrulama türünü kullanan tüm ürünlerden Epic hesabına girişler başarısız oldu.
  • Tüm platformlarda canlı oynanış veya hizmetlerden bağlantı kesintisi yaşandı.
  • Epic Games Başlatıcısı'ndan öge satın alımları başarısız oldu.
  • Epic Games Başlatıcısı'nda içeriklerin yüklenmemesinden çevrimdışı modun çalışmamasına kadar beklenmeyen durumlar yaşandı.
  • Unreal Engine siteleri dâhil olmak üzere Epic Games ürün ve pazarlama web siteleri kullanılamadı veya kısıtlandı.
  • Epic çalışanlarının sorunları çözme veya yönetme kabiliyetini etkileyen çeşitli iç araç sorunları yaşandı.

Bu gönderi, yaşanan olaylar, bizim öğrendiklerimiz ve gelecekte uygulayacağımız adımlarla ilgili ayrıntılı bilgi vermek için hazırlandı.


Neler oldu?


Üç büyük olay dizisi yaşandı:

  1. Zaman aşımına uğrayan bir sertifika, dâhili arka uç sunucu hizmetleri arasındaki çağrıların ve dâhili yönetim araçlarının büyük bir kısmında kesinti yaşanmasına neden oldu.
  2. Epic Games Başlatıcısı'ndaki beklenmedik düzeyde ciddi trafik artışı, Epic Games Başlatıcısı'nın hizmetini ve içerik dağıtım özelliklerini kesintiye uğrattı.
  3. Otomatik ölçeklendirme kapsamında Epic Games Store web sitesinin geçersiz yapıları ve unsurları referans alan yanlış bir versiyonu devreye alındı ve bu durum Epic Games Store deneyimini düşürdü.

 

1) Sertifika Zaman Aşımına Uğradı

6 Nisan 12.00 UTC'de bir TLS sertifikası zaman aşımına uğradı. Bu sertifika, Epic arka uç platformunda yalnızca dâhili olan çok sayıda iletişim için kullanılıyordu. Hizmetler arası API çağrıları ve dâhili yönetim araçları için arka uç hizmetlerimiz arasında TLS şifreleme kullanıyoruz. Bu sertifika, herkese açık olmayan, dâhili bir DNS bölgesi için kullanılıyor. 

12.00 UTC'de arka uç sistemler arasındaki trafik bilfiil durduruldu. Altı dakika sonra, 12.06 UTC'de olay raporlandı ve olay prosedürümüz başlatıldı. Çok sayıda alarmımız çalsa bile, şirketteki herkesin gördüğü büyük ölçekli sorunları mutlaka raporlamasını istiyoruz. Her olay, 7/24 Canlı Operasyon ekibimiz tarafından sınıflandırılır ve olay yönetim prosedürümüz başlatılır. İlk dâhili raporumuz geldiğinde, olay yönetim araçlarımız ve prosedürümüz otomatik olarak bir Slack kanalı açar ve ilgili taraflar davet edilir ya da olaya çağrılır.

12.12 UTC'de bir sertifikanın zaman aşımına uğradığını doğruladık. Sorunların kaynağının yüksek ihtimalle bu sertifika olduğunu düşündük ve yenileme sürecini başlattık. 12.37 UTC'de sertifika yeniden düzenlendi ve güncellenen sertifika arka uç hizmetlerimize yönlendirilmeye başladı. Daha sonraki 5 ila 15 dakika içinde, yük dengeleyiciler yeni sertifikayı otomatik olarak dâhili uç noktalara yerleştirmeye başladı ve hizmetler arası HTTPS çağrılarımız ile yönetim arayüzlerimiz düzeltildi.

Bu olayı sınıflandıran Canlı Operasyon ekibimiz bu aşamada olayı yöneterek çalışanlarla iletişim kuruyor ve doğru kişileri görevlendiriyordu. 12.38 UTC'de Slack'te birlikte çalışan kişileri koordine etmek amacıyla bir Zoom video konferans çağrısı başlatıldı. Slack güzel bir iletişim aracı olsa da acil durumlarda sesli veya görüntülü olarak gerçek zamanlı canlı iletişimden daha iyi bir seçenek yoktur. Yaşananlardan herkesi haberdar etmek için olayla ilgili güncellemeler, araçlarımız ve işleyişimiz doğrultusunda ilgili kişilere düzenli olarak gönderildi. Bu aşamada 25'ten fazla kişi bu sorunla doğrudan ilgilenip çalışma yaparken, farklı ürünlerimizden ve ekiplerimizden Oyuncu Desteği, Topluluk, Mühendislik ve Prodüksiyon gibi departmanlardan birçok kişi de gözlem yapıyordu.

Tek bir mikro hizmete olan dakikadaki talep sayılarının grafiğinde, sertifika kesintisindeki düşüş ve tam düzelme anındaki artış görülüyor.

 

Etken Faktörler


Bu dâhili hizmetler arası iletişimin DNS bölgeleri, sertifika izleme hizmetlerimiz tarafından aktif olarak izlenmiyordu ve bu da bizim gözden kaçırdığımız bir ayrıntıydı. Sertifika izleme hizmetlerimiz tekil uç noktaları veya sertifikaları değil, tüm DNS ad alanlarını kapattı ve bu dâhili alanın yapılandırması eksikti. Bu alanı daha sonra bu boşluğu gideren yeni bir izleme çözümümüze taşıdık. Bu olaydan önce, AWS Config birçok hesapta global olarak etkinleştiren ve yapılandıran bir projeyi başlatmıştık. Bu global kurulumla birlikte bir AWS Config kuralını kolayca ekleyerek sertifika zaman aşımı için ayrıntılı savunma alarmını etkinleştirebiliriz

Bu dâhili sertifika için otomatik yenilemeler etkinleştirilmemişti ve bunu gerçekleştirmek için gereken çalışmaya bu yılın başında tespit edildiğinde öncelik verilmemişti. Otomatik yenilemeyi uygulamak için ilgili sistemlere ve hizmetlere sahibiz, ancak bu özellikleri kullanmak için gereken taşıma bu olaya kadar tamamlanmamıştı. Mevcut izleme sistemlerimizle birlikte, sertifika zaman aşımı tehlikelerine karşı eskisinden daha iyi korunduğumuza inanıyorduk. Bu ve diğer sertifikaları otomatik yenilenecek şekilde taşımak için gerekli çalışmaları yapacağız. Bu arada, tüm sertifikalarımız için manuel bir denetim yaptık.

Kullanılan hizmetler arası wildcard sertifikası yüzlerce farklı üretim hizmetinde kuruluydu ve bu nedenle etkisi geniş çaplı oldu. Bu sertifikayı yönetmek için AWS ACM (AWS Certificate Manager) kullanıyoruz. Bu yönetici de dakikalar içerisinde bu sertifikayı yüzlerce üretim hizmetinde hızlıca yenilememizi ve uygulamamızı sağlıyor. Zaman aşımı sorununun AWS ACM ile değil, kendi sertifikamızın yönetimi ile alakası var. Kendi sertifikalarımızın etki alanını ayırmak üzerine çalışacağız ve bunun bir parçası olarak AWS ACM ile sertifika kullanımımızla ilgili işlemleri güncelleyeceğiz.

 

2) Epic Games Başlatıcısı hizmetinde önemli yoğunluk artışları

Sertifika yenilenmesinin hemen ardından çoğu hizmetimiz kurtarılsa da Epic Games Başlatıcısı hizmetlerimiz erişilemez olarak kaldı.

12.46 UTC'de sertifika çıkışını takiben talep oranındaki artış Epic Games Başlatıcısı hizmetinde Epic Games Başlatıcısı istemcisini destekleyen önemli bir arka uç hizmetinin kontrol edemeyeceği noktaya ulaştı. Artan talep oranı, sadece başarısızlık durumlarında gözüken istemcideki beklenmedik tekrar deneme mantığı yüzünden ortaya çıktı. Yıllar boyunca Epic Games Başlatıcısı üzerinde birçok dayanıklılık çalışması yapsak da, bu derecedeki talep hiç beklenmedikti. Bağlantı takibi sınırları sunucularımızda tavan yaptı ve paketlerimiz filo boyunca düştü. Bu arka uç uygulama filomuzu %250'ye kadar büyütsek de kurtarma sürecini daha da zorlu bir hâle getirdi. Epic Games Başlatıcısı hizmetleri art arda arızalandı ve tamamen servis kesildi. Kurtarma, arka uç için trafiği sınırlamamızı gerektirdi ve ardından sisteme trafiği yeniden adım adım aktarırken aynı anda bağlantı takip sınırlarımızı artırdık.

Epic Games Başlatıcısı istemcilerinin kapladığı büyük alan, Epic Games Başlatıcısı arka uç hizmetinde on milyonlarca bağlantı oluşturuyordu ve Epic Games Başlatıcısı sistemlerinin parçaları yükten dolayı kısıtlanmıştı. Bunun kurtarılmasını sağlamak için trafiği arka uçtan tahliye etmeliydik. Normalde bu hizmet için kapasitemizi anlık olarak artırmamız gerekiyordu, ancak kesintinin başında gördük ki hizmetin 28 kat yükü bile kontrol etmesine izin vermiyordu.

Epic Games Başlatıcısı arka uç yük dengeleyicimize gelen dakika başı talebi gösteren bir grafik. Trafik ilk olarak 28 kat büyüdü ve 15.12 UTC'de normal oranının 40 katına çıkarak son darbeyi indirdi.


Talep sayısı normalimizden 28 kat daha fazlayken Epic Games Başlatıcısı arka uç hizmetindeki çok sayıda bağlantı uygun bağlantı takibi alanı olmamasından yorgun düşmüştü. Bu da paket kaybına ve sonunda arka uç düğümlerinden bağlantı kaybına yol açtı. Arka uç bağlantı yükümüz normal oranının 3200 katına çıktı. TCP bağlantılarındaki artış talep miktarına göre gözle görülür bir şekilde daha fazlaydı.

Epic Games Başlatıcısı arka uç yük dengeleyicinin yeni bağlantılarda normal yükselişle 3200 kat yükselişin karşılaştırıldığı bir grafik.

 

Etken Faktörler


Süresi dolmuş TLS sertifikası başlatıcı istemcimizde beklenmedik tepkilere yol açan bir servis kesintisine yol açtı. Araştırmamızın ortaya çıkardığına göre, istemcimiz beklediğimiz üstel geri çekilme yerine doğrusal yeniden deneme mantığı kullanıyormuş. Ek bir beklenmedik hata da Epic Games Başlatıcısı istemcilerinden milyonlarca talep modelinin durmadan başarılı bir cevap alana kadar yeniden denemesine yol açtı. İstemci yükleme üssündeki bu iki hata bir kasıtsız ve öngörülmeyen arama modeli oluşturdu. Kendi istemcilerimiz tarafından etkili bir şekilde DDoS saldırısına uğradık ve bu hataları bir Epic Games Başlatıcısı güncellemesi ile düzeltmeye çalışıyoruz. 

Olayın bu bölümüne etken ilginç bir faktör ise ilk servis kesintisinin uzunluğu. Servis kesintisinin süresi arttıkça, daha fazla istemci de hatalı yeniden deneme mantığını kullanma oranı arttı ve devamlı olarak arka uc sunucularımıza yük bindirdi. İlk servis kesintisi daha kısa sürseydi, devamlı olarak yeniden deneme çağrıları yapacak yeterli sayıda istemciye ulaşamayabilirdik ve sadece bu uzunluktaki bir servis kesintisi durumu ortaya çıkarabilirdi. Bunu çağrı modeli değişiklikleri aracılığıyla çözeceğiz.

Bağlantı takibi alarmımız tam olarak anlaşılmamıştı. Bu alarm Epic Games Başlatıcısı hizmeti için çalarken sadece belirli ekipler bu alarmın ne anlama geldiğini ve alarm tanımını biliyordu. Ayrıca alarm bildirimi yeteri kadar açıklayıcı değildi ve durumun bağlantısal ve iç Redis kümelenmesi de dâhil olmak üzere, bu sunucuların yapacağı herhangi bir bağlantıda paket kaybına yol açıp açmayacağı bilinmiyordu. Redis kümelenmesine bağlantı kısıtlanırken neler olabileceğini inceleyen ekip için stres dolu bir andı. Önbellekleme mekanizmalarımızın sorunun bir parçası olabileceğini düşünüyorduk. Yüz binlerce kullanımda olan bağlantı yüzünden bağlantı takip tablosunun dolmasıyla bunun paket kaybından olduğu kanıtlandı. Olayın ilerleyen vakitlerinde bağlantı takip sınırlarımızı düğüm başına bir milyona çıkardık ancak altyapımızdaki bağlantı takibi artışı anlık değildi ve biraz zaman aldı. Bu durum çözülene kadar büyük ölçülerde ağ problemlerine yol açabileceğinden alarmımızı daha net olması konusunda güncelleyeceğiz. 

Büyütmek yeni düğümlerin aniden bağlantı takip sınırlarına ulaşmasına sebep oldu. Filomuz bağlantılarla aşırı yüklendiğinden büyük ölçüde paket kayıpları oluyordu ve filodaki genel trafiği azaltmalı ve izin verilen trafiği yavaşça artırmalıydık. İlk olarak AWS WAF (Web Application Firewall) kullanarak iç trafiği düzenlemeyi denedik ancak ayarlarımız yeteri kadar trafiği sınırlayamadı. Bu AWS WAF ile alakalı bir sorun değil, kendi özel kural setimizle alakalıydı. Ardından kısa bir süre içerisinde AWS yük dengeleyicimizi kullanarak hedef noktalardan trafik aktardık ve bu esnada bağlantı takip sınırlarımızı artırarak sonunda başarıya ulaştık. Bu durumdayken WAF kullanmak Epic Games Başlatıcısı hizmetlerimizi kurtarmamızı geciktirdi ancak bunda AWS'nin bir hatası yoktu. Bunun gibi kritik durumlarda AWS WAF, hedef noktalarda yük dengeleyici ve diğer AWS teknolojileri kullanarak acil olarak yük trafiğini yönlendirebileceğimiz standart bir süreç geliştireceğiz.

 

3) Epic Games Store web sitesi geçersiz varlıkları

15.12 UTC'de sertifikamızın yenilenmesi ve Epic Games Başlatıcısı hizmetimizin düzelmesiyle Epic Games Store'a ulaşmak isteyen bütün istemcilerin engelini kaldırmaya başladık. Servis kesintisinin uzunluğundan dolayı Epic Games Store'dan içerik talep eden normalden daha fazla istemci vardı ve bunlar artmaya başladı. 15.30 UTC sularında kalan sorunları değerlendirmeye başladık.

Başta her şey normal gözüküyordu ancak Epic Games Store'da teyit edebildiğimiz ve tekrarını gösterebileceğimiz düzen sorunları ve hataları ile ilgili iç raporlar almaya başladık. Detayları araştırmaya başlayınca web istemcisinin (epicgames.com'u kullanan bir kullanıcının Epic Games Store ile nasıl etkileşime girdiği) CDN'mizde bulunmayan benzersiz bir varlık kimliği getirmeye çalıştığını fark ettik. Filo boyunca yerleştirilmiş kapsayıcı sürümlerini kontrol ettik ve hepsinin aynı olduğunu gördük, ancak eğer bu doğruysa nasıl oldu da aynı uygulama sürümü birbirinden farklı statik varlık değerleri geri gönderiyordu? 

Burada bir şeyler yanlış gidiyordu. Bu olayın en kafa karıştırıcı anlarından biriydi ve en nihayetinde mevcut olan pek çok sinyalin (yerleştirilmiş sürümler gibi) yanlış sinyal olduğu ortaya çıktı. Epic Games Store arka ucundaki ölçeklendirmeyi CDN'lerimizdeki 403'lerin artışı ile ilişkilendirebildik, bu da bizi yeni örnekleri daha detaylı bir şekilde araştırmaya sevk etti. Yeni örneklerde içeriği yerel olarak aktardıktan sonra geri gönderilen içeriğin geçersiz olduğu keşfettik. Bunun izlerinin de birkaç gün önce yapılan ve bu olayda karşımıza çıkan hiçbir şeyle hiçbir alakası olmayan, yeni bir CI/CD iş akışında beklenmedik bir kapsayıcı göndermesine uzandığını fark ettik. Bu sonuçlar hâlâ şaşırtıcıydı ancak nihayet bunu keşfettikten sonra hızlıca kapsayıcı sürümündeki değişiklikleri geri alabildik, geçersiz örnekleri sonlandırabildik ve trafiği geri yükleyebildik.

Bu sorun bu dönemde meydana gelen herhangi bir geniş ölçeklendirme büyütülmesinde ortaya çıkabilirdi ancak normalde sunucu gruplarında çok sayıda boşluk payı bıraktığımız için Epic Games Başlatıcısı trafiği sebebiyle meydana gelen Epic Games Store geniş ölçeklendirme büyümesine kadar ortaya çıkmadı.

 

Etken Faktörler


Sertifika kesintisi Epic Games Başlatıcısı sorunlarına yol açtı, Epic Games Başlatıcısı kurtarıldıktan sonra Epic Games Store'a çok fazla talep geldi ve bu da Epic Games Store sistemlerinde bir ölçek büyütülmesi ile sonuçlandı. Bu beklediğimiz ve normal karşıladığımız bir şeydi.

Uygulama sunucu grubu boyunca yer alan sürüm durumları hakkındaki sinyallerimiz ve verilerimiz bizi yanlış bir şekilde sunucu filoları yerleştirmesinin eş biçimli olduğuna inandırdı. Gelecekte bu yanlış tanı ihtimalini engellemek için sürüm oluşturma şemamızı değiştirdik.

Epic Games Store için CI/CD ardışık düzeninde yakın zamanda yapılan bir değişiklik uygulama yapıtını beklenmedik bir şekilde güncelleyen bir yanlış ayarlamaya sahipti. CI/CD ardışık düzenindeki bir düzenleme ile bu durum düzeltildi ve beklenmedik değişiklikler eskiye döndürüldü. Sürüm oluşturma şemamızda yaptığımız değişiklikler gelecekte bu sorunun tekrar ihtimalinde bizi koruyacak.


Zaman Çizelgesi

  • 12.00 UTC - Dâhili sertifika süresi sona erdi
  • 12.06 UTC - Olay raporlandı ve olay yönetimi başladı
  • 12.15 UTC - İlk müşteri mesajı hazırlandı
  • 12.21 UTC - Birçok ekip tarafından birçok geniş hizmet hatası olduğu onaylandı
  • 12.25 UTC - Sertifikanın yeniden düzenlemesi sürecinin başladığı onaylandı
  • 12.37 UTC - Sertifikanın yeniden düzenlenmesi onaylandı
  • 12.46 UTC - Bazı hizmetlerin kurtarıldığı onaylandı
  • 12.54 UTC - Epic Games Başlatıcısı için Bağlantı Takibinin bir sorun olduğu keşfedildi
  • 13.41 UTC - Epic Games Başlatıcısı düğümleri yeniden başlatıldı
  • 15.05 UTC - Epic Games Başlatıcısı için Bağlantı Takibinin sınırları yükseltildi
  • 15.12 UTC - Epic Games Başlatıcısı hizmetinin kurtarılmasının ilk sinyalleri
  • 15.34 UTC - Epic Games Store web hizmetleri ölçeklendirmesinin büyütülmesi
  • 15.59 UTC - Epic Games Store'da ilk kayıp varlık raporları
  • 16.57 UTC - Epic Games Store web hizmetinin eşleşmeyen sürümleri ile ilgili sorun olduğu keşfedildi
  • 17.22 UTC - Epic Games Store web hizmeti sürümü düzeltildi
  • 17.35 UTC - Tam kurtarma


Sırada Ne Var?

Yukarıdaki bölümlerde sürprizlere ve en nihayetinde 6 Nisan'daki kesintiye yol açan senaryoları ele aldık. Etken faktörlerimizle birlikte nasıl adımlar izleyeceğimizden bahsettik, ancak burada bunların bir özetini sunacağız. 

Bu sorunlara yol açan tek bir sebep yok. Hem teknolojik hem organizasyonel birden çok faktör meydana gelen olaylara sebep oldu. Kesintinin kapsamı ve uzunluğu sistemimizdeki düzeltmek için çalışacağımız açık hataları keşfetmemize yardımcı olmakla beraber özellikle sertifika yönetimi ile ilgili olan bazı iç süreçlerimizdeki sorgulanmamış varsayımlarımızı gözden geçirmemize olanak sağladı. 

Yeni sertifika izleme sistemimiz sayesinde bu alana anında müdahale ettik ve tüm mevcut bilinen sertifikalarımızı denetledik, ancak ayrıca mevcut sertifika izleme sistemimizde herhangi bir ilave boşluk olup olmadığını daha dikkatle inceleyeceğiz ve tüm AWS ACM temelli sertifikalar için AWS Config izleme ekleme gibi geleceğe yönelik ilave tedbirler alacağız. Buna ek olarak herhangi bir sertifikanın etki alanını azaltmaya çalışacağız.

Epic Games Başlatıcısı istemci çağrı modellerini daha yakından inceleyeceğiz ve bunun bir parçası olarak tanımladığımız hataları bir an önce düzelteceğiz. Ayrıca önemli ölçüde yükselen trafik durumlarında tepki verme kabiliyetimizi geliştireceğiz. Bu sunucu grubu için sürekli artan bağlantı takip tabloları ile benzer ölçüde bir yükü büyük paket kayıpları yaşamadan kontrol altında tutabileceğiz. Sen de geniş ölçekli sunucu grupları çalıştırıyorsan bağlantı takip sınırlarını ve eğer kullanıyorsan bir netfilter işlevi olan alarmı kontrol etmen iyi olabilir. Ayrıca istemcilerindeki yeniden deneme mantığını, özellikle de uzun bir kesintiden sonra yığılma durumunda nasıl davrandığını kontrol etmen iyi olabilir.

Epic Games Store için canlı bir uygulama nesnesinin düzenlenmesini engelleyen bir düzeltme yerleştirdik ve bu olayın bir parçası olarak varlık oluşturmamızda yer alan bir hata ile ilgili bilgiler edindik ve bu hatayı düzelttik.

Umarız bu olay raporu 6 Nisan'da neler olduğuyla ilgili ilave detaylar sunabilmiştir. Umarız bu detaylar neler öğrendiğimiz ve ne geliştirmeler yaptığımız konusunu açıklığa kavuşturur ayrıca başkalarına benzer sorunlardan kaçınmaları için yardımcı olur.


Bize katıl!

Bu paylaşım Epic'teki birçok diğer muhteşem mühendislik ekibimizin yardımlarıyla Güvenilirlik Mühendisliği ekibimiz tarafından yazıldı.

Bu tür problemlerle ilgileniyor musun? Oyunculuk ve oyun hizmetleri hakkında tutkulu musun? Epic her zaman muhteşem yetenekler arıyor ve küresel olarak yetenek alanları fark etmeksizin işe alımlar yapıyoruz. Açık pozisyonlarımıza göz atmak istersen Epic Games Kariyer merkezine göz at.

Bu paylaşım sana yardımcı oldu mu ya da bu paylaşımı ilgi çekici buldun mu? Fikirlerini bize şuradan iletebilirsin: public-incident-response@epicgames.com.