Azure Key Vault ile Gizli Dizileri ve Sertifikaları Yönetme
08/14/2024
Bu teknik ve eğitici makale, güvenlik analistlerine, BT yöneticilerine ve sistem mühendislerine, gizli dizileri (parolalar, API anahtarları, bağlantı dizeleri gibi) ve sertifikaları (SSL/TLS) güvenli bir şekilde yönetmek için Azure Key Vault'u kullanma konusunda rehberlik etmeyi amaçlamaktadır. Azure Key Vault, bu kritik öğeleri depolamak ve bunlara erişmek için merkezi ve güvenli bir çözüm sağlayan, bunları doğrudan kod veya yapılandırma dosyalarına yerleştirme ihtiyacını ortadan kaldıran ve kötü bir güvenlik uygulaması olan [1] bir bulut hizmetidir.
Giriş
Modern uygulamaların geliştirilmesinde ve işletilmesinde sırları ve sertifikaları yönetmek sürekli bir zorluktur. Veritabanı kimlik bilgileri, üçüncü taraf hizmet API anahtarları, şifreleme anahtarları ve SSL/TLS sertifikaları, ele geçirilmeleri durumunda ciddi veri ihlallerine yol açabilecek hassas varlıklardır. Bunları düz metin dosyalarında, ortam değişkenlerinde veya doğrudan kaynak kodunda güvenli olmayan bir şekilde saklamak önemli bir risk oluşturur. Azure Key Vault, bu varlıkları korumak için güvenli bir donanım tabanlı depo (HSM) sağlayarak, erişimi sıkı bir şekilde denetleyerek ve yaşam döngüsü yönetimini basitleştirerek bu sorunları çözmek için tasarlanmıştır [2].
Bu nasıl yapılır kılavuzu, bir Azure Key Vault oluşturmayı, gizli dizileri ve sertifikaları eklemeyi ve almayı, erişim ilkelerini yapılandırmayı ve Azure App Service gibi diğer Azure hizmetleriyle tümleştirmeyi kapsayacaktır. Okuyucunun gizli dizilerin ve sertifikaların güvenli yönetimini uygulayabilmesi, uygulamalarının ve bulut altyapısının güvenlik duruşunu güçlendirebilmesi için adım adım talimatlar, örnek Azure CLI komutları ve doğrulama yöntemleri sağlanacaktır.
Azure Key Vault neden önemlidir?
- Güvenli Depolama: FIPS 140-2 Düzey 2 onaylı donanım güvenlik modüllerini (HSM'ler) kullanarak gizli dizileri ve şifreleme anahtarlarını korur.
- Merkezi Erişim Denetimi: Azure rol tabanlı erişim denetimi (RBAC) veya Key Vault erişim ilkelerini kullanarak gizli dizilere ve sertifikalara erişim izinlerini ayrıntılı düzeyde yönetmenize olanak tanır.
- Yaşam Döngüsü Yönetimi: Gizliliğin ve sertifikanın rotasyonunu, otomatik geçerlilik süresinin sona ermesini ve olay bildirimini kolaylaştırır.
- Risk Azaltma: Kimlik bilgilerinin kod veya yapılandırma dosyalarında saklanması ihtiyacını ortadan kaldırarak sızıntı riskini en aza indirir.
- İzleme ve Denetim: Key Vault'ta gerçekleştirilen tüm işlemleri kaydederek uyumluluk ve güvenlik araştırmaları için denetim izleri sağlar.
- Basitleştirilmiş Entegrasyon: Azure App Service, Azure Functions, Azure Virtual Machines ve Azure DevOps gibi diğer Azure hizmetleriyle kolayca entegre olur.
Önkoşullar
Azure Key Vault'u kullanmak için aşağıdaki öğelere ihtiyacınız olacak:
- Etkin Azure Aboneliği: Kaynakları oluşturmaya ve yönetmeye yönelik bir Azure aboneliği.
- Yönetim Erişimi: Azure aboneliğinde "Sahip" veya "Katkıda Bulunan" rolüne sahip bir hesap veya Key Vault'ları oluşturma ve yönetme izinlerine sahip özel bir rol.
- Azure CLI veya Azure PowerShell: Azure ile etkileşim kurmak için yüklenmiş ve yapılandırılmış komut satırı araçları.
- İsteğe bağlı: Visual Studio Code: Geliştirme ve entegrasyon testleri için.
Adım Adım: Azure Key Vault ile Gizli Dizileri ve Sertifikaları Yönetme
Bir Key Vault oluşturalım, bir gizli anahtar ve sertifika ekleyelim ve erişimi yapılandıralım.
1. Azure Key Vault Oluşturma
Azure CLI'yi kullanarak bir Key Vault oluşturalım. Azure portalını da kullanabilirsiniz.
- Terminalinizi veya PowerShell'inizi açın ve Azure'da oturum açın: ``` bash az giriş ''''
-
Bir kaynak grubu oluşturun (halihazırda bir tane yoksa): ``` bash az grubu oluştur --name RG-KeyVault-Artigos --location eastus ''''
-
Azure Key Vault'u oluşturun. Key Vault'unuz için genel olarak benzersiz bir ad seçin. ``` bash az keyvault create --name kv-artigos-seguranca-01 --resource-group RG-KeyVault-Artigos --location eastus --enabled-for-template-deployment true ''''
--enabled-for-template-deployment true: Key Vault'un şablon dağıtımları için kullanılmasına izin verir, otomasyon için faydalıdır.
2. Key Vault'a Gizli Dizi Ekleme
Gizli olarak bir veritabanı şifresi ekleyelim.
-
Örnek değerle birlikte 'DatabasePassword' adlı bir sır ekleyin: ``` bash az keyvault gizli kümesi --vault-name kv-artigos-seguranca-01 --name DatabasePassword --value "S3cur3P@ssw0rd!" ''''
-
Doğru şekilde saklandığını doğrulamak için sırrı alın: ``` bash az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv ''''
3. Key Vault'a Sertifika Ekleme
Gösterim amacıyla kendinden imzalı bir sertifika ekleyelim. Üretimde güvenilir bir CA'dan gelen sertifikaları kullanırsınız.
-
Key Vault'ta kendinden imzalı bir sertifika oluşturun: ``` bash az keykasa sertifikası create --vault-name kv-artigos-seguranca-01 --name MyWebAppCert --policy "$(az keykasa sertifikası get-default-policy)" ''''
-
Sertifika ayrıntılarını kontrol edin: ``` bash az keyvault sertifika gösterisi --vault-name kv-artigos-seguranca-01 --name MyWebAppCert ''''
4. Erişim Politikalarını Yapılandırma
Uygulamaların veya kullanıcıların gizli dizilere ve sertifikalara erişmesine izin vermek için erişim ilkelerini yapılandırmanız gerekir. Azure rol tabanlı erişim denetimini (RBAC) kullanalım.
- Erişime ihtiyaç duyacak uygulamanın veya kullanıcının 'Nesne Kimliğini' alın. Bir uygulamayı (Hizmet Sorumlusu) Azure AD'ye kaydettirdikten sonra alabilirsiniz. Bir kullanıcı için, 'az ad user show --id
--query id -o tsv' komutunu kullanın. - Key Vault'unuza bir rol atayın. Örneğin, bir uygulamanın gizli dizileri okumasına izin vermek için:
``` bash
# Örnek: 'Key Vault Secrets Kullanıcısı' rolünü bir Hizmet Sorumlusuna atama
az rol ataması create --role "Key Vault Secrets User" --signee-object-id
--scope /subscriptions/ /resourceGroups/RG-KeyVault-Artigos/providers/Microsoft.KeyVault/vaults/kv-artigos-seguranca-01 '''' - İpucu: Sertifikalar için "Anahtar Kasası Sertifika Kullanıcısı" işlevini kullanabilirsiniz.
5. Azure Uygulama Hizmetiyle Tümleştirme (Örnek)
Bir uygulamanın Key Vault'tan bir gizli diziyi nasıl kullanabileceğini gösterelim.
- Bir Azure Uygulama Hizmeti oluşturun (zaten bir tane yoksa): ``` bash az appservice planı create --name AppServicePlan-Artigos --resource-group RG-KeyVault-Artigos --sku B1 --is-linux az webapp create --resource-group RG-KeyVault-Artigos --plan AppServicePlan-Artigos --name webapp-artigos-seguranca-01 ''''
-
Uygulama Hizmeti için yönetilen kimliği etkinleştirin. Bu, App Service'in açık kimlik bilgileri olmadan Azure Key Vault'ta kimlik doğrulaması yapmasına olanak tanır. ``` bash az webapp kimlik atama --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 ''''
-
Key Vault'taki gizli diziye erişmesi için App Service yönetilen kimlik iznini verin. Önceki adımda elde edilen 'principalId'yi kullanın. ``` bash az keyvault set-policy --name kv-artigos-seguranca-01 --object-id
--secret-permissions alma listesi '''' - İpucu: RBAC'yi kullanmak için, yönetilen kimliğin "principalId"sine "Key Vault Secrets Kullanıcısı" rolünü atayın.
-
Uygulama Hizmetinde gizli bir referans yapılandırın. Bu, uygulamanın gizli diziye bir ortam değişkeni olarak erişmesine olanak tanır. ``` bash az webapp yapılandırma uygulama ayarları seti --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 --settings DatabasePassword="@Microsoft.KeyVault(SecretUri=https://kv-artigos-seguranca-01.vault.azure.net/secrets/DatabasePassword/)" ''''
-
Artık uygulamanız (örneğin, ASP.NET Core, Node.js) 'DatabasePassword' sırrını normal bir ortam değişkeni olarak okuyabilir ve Azure App Service bunu Key Vault'tan güvenli bir şekilde almayla ilgilenir.
Doğrulama ve Test Etme
Sır ve sertifika yönetiminin doğrulanması, erişimin yalnızca yetkili varlıklara verildiğinin ve sırların doğru şekilde alınabileceğinin doğrulanmasını içerir.
1. Azure CLI Aracılığıyla Gizli Dizilere Erişimi Test Etme
-
İzne sahip olmayan bir hesapla gizli bilgiye erişmeyi deneyin: ``` bash az giriş # İzinleri olmayan bir hesapla oturum açın az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv ''''
- Beklenen Sonuç: Komut, "AuthorizationFailed" hatasıyla başarısız olmalıdır.
-
İzinleri olan bir hesapla (ör. Key V'yi oluşturan hesap) gizli gizli diziye erişmeyi deneyin.Uygulama içinden test yapıyorsanız ault veya App Service tarafından yönetilen kimlik). ``` bash az giriş # İzinlere sahip bir hesapla oturum açın az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv ''''
- Beklenen Sonuç: Komutun gizli değeri döndürmesi gerekir.
2. Sertifika Erişimini Test Etme
- Sertifikanın yetkili bir kuruluş tarafından listelenip alınabildiğini doğrulayın.
``` bash
az keyvault sertifika listesi --vault-name kv-artigos-seguranca-01
az keyvault sertifika gösterisi --vault-name kv-artigos-seguranca-01 --name MyWebAppCert
''''
- Beklenen Sonuç: Komutlar sertifika ayrıntılarını döndürmelidir.
3. Key Vault Denetim Günlüklerini Kontrol Etme
Key Vault'taki tüm işlemler günlüğe kaydedilir ve denetlenebilir.
- Azure portalında Key Vault'unuza (
kv-articles-seguranca-01) gidin. - Sol gezinme bölmesinde Etkinlik Günlükleri'ni seçin.
- Sırların oluşturulması, sertifikalar ve erişim girişimleri de dahil olmak üzere gerçekleştirilen tüm işlemlerin bir günlüğünü göreceksiniz.
Güvenlik İpuçları ve En İyi Uygulamalar
- En Az Ayrıcalık Prensibi: Gizli dizilere ve sertifikalara yalnızca gerekli izinleri (alma, listeleme, ayarlama, silme) verin. Aşırı izin vermekten kaçının.
- Sırların Düzenli Rotasyonu: Güvenliği ihlal etme riskini azaltmak için sırları ve sertifikaları düzenli olarak rotasyona tabi tutacak bir süreç uygulayın.
- Yönetilen Kimlikler: Key Vault'ta kimlik doğrulaması yapmak için mümkün olduğunda Azure kaynakları için Yönetilen Kimlikler'i (Yönetilen Kimlikler) kullanın, böylece kodunuzdaki kimlik bilgilerini yönetme ihtiyacını ortadan kaldırın.
- Ayrıntılı Erişim İlkeleri: Kimin neye erişebileceğini denetlemek için Key Vault veya Azure RBAC erişim ilkelerini kullanın. Daha hassas kontrol için RBAC'ı tercih edin.
- İzleme ve Uyarılar: Key Vault'taki başarısız erişim girişimleri veya gizli silme işlemleri gibi şüpheli etkinliklere yönelik uyarıları yapılandırın.
- Geçici Silme ve Temizleme Koruması: Gizli dizilerin ve sertifikaların kazara veya kötü niyetli olarak kaybolmasını önlemek için Key Vault'ta geçici silme ve temizleme korumasını etkinleştirin.
- Düzenli Yedekleme: Key Vault yüksek düzeyde kullanılabilir olmasına rağmen, özellikle olağanüstü durum kurtarma senaryoları için gizli dizilerinizi ve sertifikalarınızı yedeklemeyi düşünün.
- Süresi Dolan Sırların: Rotasyonu zorunlu kılmak ve eski kimlik bilgilerinin kullanılmasını önlemek için sırların ve sertifikaların son kullanma tarihlerini ayarlayın.
Genel Sorun Giderme
- Yetkilendirme Hatası (403 Yasak): Erişmeye çalışan varlık için Key Vault erişim politikalarını veya RBAC rol atamalarını kontrol edin. Doğru 'Nesne Kimliği' veya 'principalId'in kullanıldığından emin olun.
- Gizli/Sertifika bulunamadı: Gizli/sertifika adını ve Key Vault adını kontrol edin. Sırrın/sertifikanın mevcut olduğundan, silinmediğinden veya süresinin dolmadığından emin olun.
- Yönetilen Kimliklerle İlgili Sorunlar: Yönetilen kimliğin Azure kaynağı için etkinleştirildiğini ve Key Vault'ta doğru izinlerin verildiğini doğrulayın.
- Gizli Bilgilerin Alınmasında Gecikme: Bazı durumlarda gizli dizilerin alınmasında küçük bir gecikme olabilir. Uygulamanızın bunu eşzamansız olarak işlediğinden emin olun.
- Bağlantı Hataları: Uygulamanızın veya sanal makinenizin ağ ayarlarını kontrol edin. Key Vault'a erişimi engelleyen güvenlik duvarı veya ağ güvenlik grubu olmadığından emin olun.
Sonuç
Azure Key Vault, buluttaki en hassas dijital varlıklarını korumak isteyen tüm kuruluşlar için kritik bir hizmettir. Sırların ve sertifikaların yönetimini güvenli, yüksek düzeyde kullanılabilir bir depoda merkezileştirerek uyumluluğu basitleştirir, veri ihlali riskini azaltır ve genel güvenlik duruşunuzu geliştirir. Azure Key Vault'un etkili bir şekilde uygulanması, en iyi güvenlik ve otomasyon uygulamalarıyla birleştiğinde, geliştiricilerin ve operatörlerin kimlik bilgilerinin ve anahtarlarının korunduğunu bilerek yeniliğe odaklanmasına olanak tanır. Bu pratik kılavuzla güvenlik uzmanları, Azure Key Vault'u kullanarak sırları ve sertifikaları güvenli ve verimli bir şekilde yönetebilecek ve Azure'daki uygulamalarının ve verilerinin bütünlüğünü ve gizliliğini sağlayabilecek.
Referanslar:
[1]Microsoft Learn. Azure Key Vault nedir?. Şu adreste bulunabilir: https://learn.microsoft.com/pt-br/azure/key-vault/general/overview [2] Microsoft Learn. Azure Key Vault'ta gizli dizileri yönetmeye yönelik en iyi uygulamalar. Şu adreste bulunabilir: https://learn.microsoft.com/pt-br/azure/key-vault/secrets/secrets-best-practices [3] Microsoft Learn. Azure Key Vault sertifikaları hakkında. Şu adreste bulunabilir: https://learn.microsoft.com/pt-br/azure/key-vault/certificates/about-certificates