Azure Security Center Yapılandırması: Adım Adım Güvenlik Rehberi

Bulut ortamlarında güvenlik, artık “sonradan düşünülen bir şey” olmaktan çıkıp altyapı tasarımının tam merkezine oturdu. Azure’da bir şeyler deploy etmeye başladığınızda, kaç tane servisin açık kaldığını, hangi storage account’un public erişime açık olduğunu veya hangi VM’de patch eksik olduğunu takip etmek gerçekten baş ağrıtıcı bir hal alıyor. İşte tam bu noktada Azure Security Center (artık resmi adıyla Microsoft Defender for Cloud) devreye giriyor. Bu yazıda Security Center’ı sıfırdan yapılandırmayı, anlamlı alertler oluşturmayı ve günlük operasyonel hayatta nasıl kullanacağınızı ele alacağım.

Azure Security Center Nedir, Ne Değildir?

Security Center’ı basitçe “Azure’un güvenlik panosu” olarak tanımlamak mümkün, ama bu tanım eksik kalır. Aslında iki farklı katmandan oluşuyor:

  • CSPM (Cloud Security Posture Management): Kaynaklarınızı tarayıp güvenlik açıklarını, yanlış yapılandırmaları ve compliance ihlallerini raporlar. Bu katman ücretsiz olarak kullanılabilir.
  • CWP (Cloud Workload Protection): VM’ler, konteynerlar, veritabanları ve daha fazlası için aktif tehdit tespiti yapar. Bu katman ücretlidir ve “Microsoft Defender for Servers”, “Defender for SQL” gibi alt planlardan oluşur.

Pek çok ekip ücretsiz katmanı aktif etmeden Azure kullanmaya devam ediyor. Bu ciddi bir hata. En azından CSPM katmanını hemen açmanızı tavsiye ederim.

Ön Koşullar ve Gerekli İzinler

Security Center’ı yapılandırmadan önce şu rollere ihtiyacınız var:

  • Security Admin: Güvenlik politikalarını değiştirebilir, alertleri kapatabilir.
  • Security Reader: Sadece okuma yapabilir, raporları görebilir.
  • Contributor veya Owner: Defender planlarını etkinleştirmek için subscription seviyesinde bu role ihtiyaç duyulur.

Çok sayıda subscription yönetiyorsanız, her birine tek tek girmek yerine Management Group seviyesinde politika atamanızı öneririm. Bu yaklaşım hem zaman kazandırır hem de tutarlılık sağlar.

Azure CLI ile Security Center’ı Etkinleştirme

Portal üzerinden tıklayarak da yapabilirsiniz, ancak tekrarlanabilir ve otomatize edilebilir bir kurulum için CLI veya PowerShell kullanmak çok daha doğru. Önce Azure CLI ile subscription’ınızdaki mevcut güvenlik durumunu kontrol edelim:

# Mevcut subscription'ı kontrol et
az account show --query "{SubscriptionId:id, Name:name, State:state}"

# Security Center'ın mevcut pricing tier'ını gör
az security pricing list --output table

Şimdi temel güvenlik servislerini etkinleştirelim. Defender for Servers’ı açmak için:

# Defender for Servers Plan 2'yi etkinleştir
az security pricing create 
  --name "VirtualMachines" 
  --tier "Standard"

# Defender for SQL'i etkinleştir
az security pricing create 
  --name "SqlServers" 
  --tier "Standard"

# Defender for Storage'ı etkinleştir
az security pricing create 
  --name "StorageAccounts" 
  --tier "Standard"

# Defender for Containers'ı etkinleştir
az security pricing create 
  --name "Containers" 
  --tier "Standard"

# Tüm planları listele ve durumlarını doğrula
az security pricing list --query "[].{Name:name, PricingTier:pricingTier}" --output table

Bu komutları çalıştırdıktan sonra birkaç dakika içinde Security Center, kaynaklarınızı taramaya başlayacak.

Log Analytics Workspace Bağlantısı

Security Center’ın ürettiği verileri anlamlı kılmak için bir Log Analytics workspace’e ihtiyacınız var. Eğer yoksa oluşturalım:

# Kaynak grubu oluştur (yoksa)
az group create 
  --name "rg-security-prod" 
  --location "westeurope"

# Log Analytics workspace oluştur
az monitor log-analytics workspace create 
  --resource-group "rg-security-prod" 
  --workspace-name "law-security-prod" 
  --location "westeurope" 
  --sku "PerGB2018" 
  --retention-time 90

# Workspace ID'yi al (ileride lazım olacak)
WORKSPACE_ID=$(az monitor log-analytics workspace show 
  --resource-group "rg-security-prod" 
  --workspace-name "law-security-prod" 
  --query "id" 
  --output tsv)

echo "Workspace ID: $WORKSPACE_ID"

Şimdi Security Center’ı bu workspace’e bağlayalım:

# Auto provisioning için data collection ayarını yapılandır
az security auto-provisioning-setting update 
  --name "mma" 
  --auto-provision "On"

# Security contact ekle (alert bildirimleri için)
az security contact create 
  --name "security-contact-primary" 
  --email "[email protected]" 
  --phone "+905551234567" 
  --alert-notifications "On" 
  --alerts-to-admins "On"

Security Policy Yapılandırması

Security Center, Microsoft Cloud Security Benchmark (eski adıyla Azure Security Benchmark) adlı bir politika seti kullanır. Bu politikayı özelleştirebilir veya ek standartlar ekleyebilirsiniz. Özellikle ISO 27001, PCI DSS veya CIS benchmark’larını takip eden ekipler için bu kritik öneme sahip.

# Mevcut güvenlik politikalarını listele
az security policy list 
  --query "[].{Name:name, DisplayName:displayName}" 
  --output table

# Subscription seviyesinde mevcut assessment'ları gör
az security assessment list 
  --query "[?status.code=='Unhealthy'].{ResourceId:resourceDetails.id, DisplayName:displayName, Severity:metadata.severity}" 
  --output table

Burada çıkan “Unhealthy” sonuçlar, hemen dikkatinizi çekmeniz gereken bulgulardır. Gerçek hayatta bu listeyi ilk kez çalıştırdığınızda onlarca kayıt görmek oldukça normal. Panik yapmayın, bunları öncelik sırasına göre ele alacağız.

Güvenlik Skoru ve Öneri Yönetimi

Security Center’ın en değerli özelliklerinden biri Secure Score sistemi. Bu skor, güvenlik önerilerini uyguladıkça artıyor. Skoru CLI üzerinden kontrol edebilirsiniz:

# Mevcut secure score'u kontrol et
az security secure-scores list 
  --query "[].{Name:name, Score:score.current, MaxScore:score.max, Percentage:score.percentage}" 
  --output table

# Kritik öneme sahip güvenlik önerilerini filtrele
az security assessment list 
  --query "[?metadata.severity=='High' && status.code=='Unhealthy'].{
    DisplayName:displayName,
    ResourceType:resourceDetails.resourceType,
    RemediationSteps:metadata.remediationDescription
  }" 
  --output json

Bir e-ticaret şirketinin Azure ortamında çalışırken ilk Secure Score kontrolünü yaptığımda skor 42 civarındaydı. Bunun yarısından fazlası çözülmesi kolay ama kimsenin sormadığı sorunlardan kaynaklanıyordu: MFA aktif değil, bazı storage account’lar public erişime açık, VM’lerde JIT (Just-In-Time) access kullanılmıyor. Üç günlük çalışmayla skoru 71’e çıkardık.

Just-In-Time VM Access Yapılandırması

JIT access, bence Security Center’ın en pratik özelliklerinden biri. Normalde SSH (22) veya RDP (3389) portlarını sürekli açık bırakmak büyük risk. JIT ile bu portları varsayılan olarak kapalı tutup, ihtiyaç duyduğunuzda belirli bir süreliğine açabiliyorsunuz.

# Bir VM için JIT policy oluştur
az security jit-policy create 
  --location "westeurope" 
  --resource-group "rg-production" 
  --name "default" 
  --virtual-machines '[
    {
      "id": "/subscriptions/SUBSCRIPTION_ID/resourceGroups/rg-production/providers/Microsoft.Compute/virtualMachines/vm-web-01",
      "ports": [
        {
          "number": 22,
          "protocol": "TCP",
          "allowedSourceAddressPrefix": "*",
          "maxRequestAccessDuration": "PT3H"
        },
        {
          "number": 3389,
          "protocol": "TCP",
          "allowedSourceAddressPrefix": "*",
          "maxRequestAccessDuration": "PT3H"
        }
      ]
    }
  ]'

JIT policy oluşturduktan sonra erişim talep etmek için:

# JIT access talep et (3 saatlik erişim için)
az security jit-policy initiate 
  --resource-group "rg-production" 
  --name "default" 
  --location "westeurope" 
  --virtual-machines '[
    {
      "id": "/subscriptions/SUBSCRIPTION_ID/resourceGroups/rg-production/providers/Microsoft.Compute/virtualMachines/vm-web-01",
      "ports": [
        {
          "number": 22,
          "duration": "PT3H",
          "allowedSourceAddressPrefix": "YOUR_IP_ADDRESS"
        }
      ]
    }
  ]'

Bu yapılandırmayı tüm production VM’lerinize uygulayın. Sabah erişim açıp akşam kapatmayı unutmak gibi insan hataları ortadan kalkıyor.

Alert Kuralları ve Bildirim Yapılandırması

Security Center’ın ürettiği alertleri doğru yönlendirmek operasyonel açıdan kritik. Her alert e-posta olarak gelirse alarm yorgunluğu başlar, kimse okumaz. Severity bazlı bir filtreleme mantığı kurmak gerekiyor.

# Yüksek öncelikli alertleri listele
az security alert list 
  --query "[?properties.severity=='High'].{
    Name:name,
    AlertType:properties.alertType,
    ResourceId:properties.resourceIdentifiers[0].azureResourceId,
    Description:properties.description,
    Status:properties.status
  }" 
  --output table

# Alert'i dismissed (işlendi) olarak işaretle
az security alert update 
  --location "westeurope" 
  --name "ALERT_NAME" 
  --status "Dismissed"

# Aktif alert sayısını severity'ye göre grupla
az security alert list 
  --query "
    {
      High: [?properties.severity=='High' && properties.status=='Active'] | length(@),
      Medium: [?properties.severity=='Medium' && properties.status=='Active'] | length(@),
      Low: [?properties.severity=='Low' && properties.status=='Active'] | length(@)
    }
  "

Alert’leri Action Group üzerinden Slack, Teams veya PagerDuty’e yönlendirmek için Azure Monitor ile entegrasyon kurmanız gerekiyor. Bu yapı kurulduktan sonra Security Center alert’leri ilgili kişiye anında ulaşır.

Adaptive Application Controls

Bu özellik, VM’lerinizde hangi uygulamaların çalışabileceğini whitelist bazlı olarak kontrol eder. Machine learning kullanarak mevcut çalışan uygulamaları analiz eder ve bir öneri sunar.

# Adaptive application control gruplarını listele
az security adaptive-application-controls list 
  --query "[].{
    GroupName:name,
    VMCount:properties.vmRecommendations | length(@),
    ConfigurationStatus:properties.configurationStatus,
    RecommendationStatus:properties.recommendationStatus
  }" 
  --output table

# Belirli bir gruptaki önerileri incele
az security adaptive-application-controls show 
  --group-name "GROUP_NAME" 
  --query "properties.pathRecommendations[].{
    Path:path,
    Action:action,
    Type:type,
    PublisherInfo:publisherInfo.publisherName
  }"

Production web sunucularında bu özelliği etkinleştirdiğinizde, beklenmedik bir uygulama çalışmaya çalışırsa anında alert alırsınız. Özellikle cryptominer saldırılarına karşı çok etkili.

Defender for Cloud’u PowerShell ile Yönetme

Bazı senaryolarda CLI yerine PowerShell tercih etmek daha mantıklı olabiliyor, özellikle Windows ortamlarında veya mevcut otomasyon skriptleriniz PowerShell tabanlıysa.

# PowerShell modülünü yükle
Install-Module -Name Az.Security -Force -AllowClobber

# Azure'a bağlan
Connect-AzAccount

# Tüm subscription'lardaki Secure Score'u raporla
$subscriptions = Get-AzSubscription
foreach ($sub in $subscriptions) {
    Set-AzContext -SubscriptionId $sub.Id | Out-Null
    $scores = Get-AzSecuritySecureScore
    foreach ($score in $scores) {
        [PSCustomObject]@{
            Subscription  = $sub.Name
            ScoreName     = $score.Name
            CurrentScore  = $score.Score.Current
            MaxScore      = $score.Score.Max
            Percentage    = [math]::Round($score.Score.Percentage * 100, 2)
        }
    }
} | Format-Table -AutoSize

# Tüm unhealthy assessment'ları CSV'ye aktar
Get-AzSecurityAssessment |
  Where-Object { $_.Status.Code -eq "Unhealthy" } |
  Select-Object @{N="DisplayName";E={$_.DisplayName}},
                @{N="Severity";E={$_.Metadata.Severity}},
                @{N="ResourceId";E={$_.ResourceDetails.Id}} |
  Export-Csv -Path "security-findings-$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation

Write-Host "Rapor olusturuldu: security-findings-$(Get-Date -Format 'yyyyMMdd').csv"

Bu script’i haftalık cron job olarak çalıştırıp çıktıyı yöneticilere otomatik olarak gönderebilirsiniz. Ekip toplantılarında “güvenlik durumumuz nasıl?” sorusuna somut veri ile cevap vermek artık çok daha kolay oluyor.

Regulatory Compliance Dashboard

Eğer PCI DSS, ISO 27001 veya SOC 2 gibi standartlarla uyumlu olmanız gerekiyorsa, Security Center bunu izlemenizi kolaylaştırıyor. Compliance dashboard üzerinden hangi kontrollerin geçtiğini, hangilerinin başarısız olduğunu detaylı görebiliyorsunuz.

# Mevcut compliance standartlarını listele
az security regulatory-compliance-standards list 
  --query "[].{Name:name, State:state, PassedControls:passedControls, FailedControls:failedControls}" 
  --output table

# Belirli bir standarttaki başarısız kontrolleri göster
az security regulatory-compliance-controls list 
  --standard-name "pci-dss" 
  --query "[?state=='Failed'].{
    ControlId:name,
    Description:description,
    FailedAssessments:failedAssessments
  }" 
  --output table

# ISO 27001 compliance durumunu kontrol et
az security regulatory-compliance-standards show 
  --name "iso-27001" 
  --query "{
    Standard:name,
    State:state,
    Passed:passedControls,
    Failed:failedControls,
    Skipped:skippedControls,
    Score:percentageCompliance
  }"

Bir müşteri ile PCI DSS audit sürecinde çalışırken bu dashboard gerçek bir can simidi oldu. Auditor’ın sorduğu soruların büyük kısmını bu çıktılarla yanıtlayabildik. Compliance ekibinin manuel olarak haftalarca toplayacağı kanıtları birkaç komutla hazır hale getirebildik.

Otomatik Remediation ile Güvenlik Açıklarını Kapatma

Security Center’ın önerilerini uygulamayı otomatize etmek mümkün. Azure Policy ile belirli ihlaller tespit edildiğinde otomatik düzeltme aksiyonu alınabilir. Örneğin storage account’lara HTTPS erişimi zorunlu kılmak için:

# HTTPS zorunluluğunu denetleyen policy tanımını bul
az policy definition list 
  --query "[?contains(displayName, 'secure transfer')].{Name:name, DisplayName:displayName}" 
  --output table

# Policy assignment oluştur
az policy assignment create 
  --name "enforce-https-storage" 
  --display-name "Storage hesaplarda guvenli aktarim zorunlu" 
  --policy "Secure transfer to storage accounts should be enabled" 
  --scope "/subscriptions/SUBSCRIPTION_ID" 
  --enforcement-mode Default

# Remediation task oluştur (mevcut non-compliant kaynaklar için)
az policy remediation create 
  --name "remediate-storage-https" 
  --policy-assignment "enforce-https-storage" 
  --resource-discovery-mode ReEvaluateCompliance

# Remediation durumunu takip et
az policy remediation show 
  --name "remediate-storage-https" 
  --query "{Status:provisioningState, SucceededResources:deploymentSummary.successfulDeployments, FailedResources:deploymentSummary.failedDeployments}"

Günlük Operasyonel Rutinler

Security Center’ı kurduktan sonra günlük rutinlerinize şu kontrolleri eklemenizi öneririm:

  • Her sabah: Aktif High severity alert sayısına bakın. Yeni bir şey varsa öncelik verin.
  • Haftada bir: Secure Score’daki değişimi kaydedin. Düşüş varsa nedenini araştırın.
  • Ayda bir: Unhealthy assessment listesini gözden geçirin, yeni kaynaklar eklenmiş olabilir.
  • Her çeyrek: Compliance dashboard’dan durum raporu çıkarın ve yönetimle paylaşın.

Bu kontrolleri otomatize etmek için Log Analytics üzerine yazılan KQL sorguları veya Azure Logic Apps ile otomatik raporlama kurabilirsiniz.

Maliyet Optimizasyonu

Defender planlarının maliyeti, özellikle büyük ortamlarda göz ardı edilemez. Gereksiz yere aktif bırakılmış Defender planları fatura şokuna yol açabilir.

  • Defender for Servers Plan 2: VM başına aylık yaklaşık 15 USD. Test/dev ortamlarında Plan 1 yeterli olabilir.
  • Defender for SQL: Sunucu başına ücretlendirme yapılır. Kullanılmayan SQL instance’larını kapatın.
  • Sadece production’a uygulayın: Tag bazlı politika atamasıyla “Environment: Production” tag’i olan kaynaklara Defender’ı sınırlayabilirsiniz.

Aylık Security Center maliyetinizi şu komutla tahmin edebilirsiniz:

# Defender planları altındaki kaynak sayısını kontrol et
az security pricing list 
  --query "[?pricingTier=='Standard'].{
    Plan:name,
    Tier:pricingTier,
    FreeTrialRemainingTime:freeTrialRemainingTime
  }" 
  --output table

# VM sayısını kontrol et (Defender for Servers maliyetini etkiler)
az vm list --query "length(@)" --output tsv

Sonuç

Azure Security Center, doğru yapılandırıldığında yönettiğiniz bulut ortamının güvenlik durumunu gerçek zamanlı olarak görmenizi sağlayan güçlü bir araç. Ancak “kur ve unut” mantığıyla çalışmıyor. Düzenli bakım, alert yorgunluğunu önleyecek doğru konfigürasyon ve ekip içi sorumluluk dağılımı olmadan en iyi araç bile işe yaramaz hale gelir.

Başlangıç noktanız basit olsun: Ücretsiz CSPM katmanını hemen aktifleştirin, bir Log Analytics workspace bağlayın ve ilk Secure Score değerinizi kaydedin. Sonrasını adım adım ilerleyerek yapabilirsiniz. Secure Score’unuzu her ay birkaç puan artırma hedefi koyarsanız, altı ay içinde güvenlik duruşunuzun ciddi ölçüde iyileştiğini göreceksiniz.

Bir noktayı da vurgulamak isterim: Security Center bulmaları, güvenlik açıklarını kapatmak için teknik bir rehber sunuyor ama önceliklendirme ve karar verme yine size kalıyor. Tüm uyarıları aynı anda kapatmaya çalışmak yerine yüksek risk, kolay çözüm matrisini kullanarak başlayın. Bu yaklaşım hem motivasyonunuzu korur hem de gerçek riski azaltır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir