Aracılığıyla paylaş


Paket yakalamayı kullanarak uyarıları ve Azure İşlevleri ile ağları proaktif olarak izleme

Azure Ağ İzleyicisi'nin paket yakalama özelliği, sanal makinelere (VM) gelen ve giden trafiği izlemek için yakalama oturumları oluşturur. Yakalama dosyası, yalnızca izlemek istediğiniz trafiği izlemek için tanımladığınız bir filtreye sahip olabilir. Bu veriler bir depolama blobunda veya konuk makinede yerel olarak depolanır.

Bu özelliği Azure İşlevleri gibi diğer otomasyon senaryolarından uzaktan başlatabilirsiniz. Tanımlanan ağ anomalilerine göre proaktif yakalamalar çalıştırabilirsiniz. Diğer kullanım alanları arasında ağ istatistikleri toplama, ağ yetkisiz erişimleri hakkında bilgi alma ve istemci/sunucu iletişimlerinde hata ayıklama yer alır.

Azure'da dağıtılan kaynaklar sürekli çalışır. Tüm kaynakların durumunu her zaman etkin olarak izlemek zordur. Örneğin, saat 02:00'de bir sorun oluşursa ne olur?

Azure ekosistemindeki Ağ İzleyicisi uyarıları ve işlevleri kullanarak ağınızdaki sorunları çözmek için veri ve araçlarla proaktif olarak yanıt vererek.

Önkoşullar

Senaryo

Bu örnekte, bir sanal makinede normalden daha fazla giden trafik vardır ve uyarı almak istiyorsunuz. Herhangi bir koşul için uyarı oluşturmak için benzer bir işlem kullanabilirsiniz.

Bir olay bir uyarı tetiklediğinde, paket düzeyindeki veriler giden trafiğin neden arttığını çözümlemenize yardımcı olur. Sanal makineyi özgün durumuna döndürmek için adımlar atabilirsiniz.

Bu senaryoda, mevcut bir Ağ İzleyicisi örneğine ve geçerli bir sanal makineye sahip bir kaynak grubuna sahip olduğunuz varsayılır.

Paket yakalama için iş akışı aşağıdadır:

  1. Bir olay VM'nizde bir uyarı tetikler.
  2. Uyarı, Azure işlevinizi çağırır.
  3. Azure işleviniz uyarıyı işler ve bir Ağ İzleyicisi paket yakalama oturumu başlatır.
  4. Paket yakalama vm üzerinde çalışır ve veri toplar.
  5. Paket yakalama dosyası, gözden geçirme ve tanılama için bir depolama hesabına yüklenir.

Bu işlemi otomatikleştirmek için vm'nizde olay oluştuğunda tetiklenecek bir uyarı oluşturup bağlarsınız. ayrıca Ağ İzleyicisi çağırmak için bir işlev oluşturursunuz.

Bu senaryo:

  • Paket yakalamayı başlatan bir Azure işlevi oluşturur.
  • Sanal makinede bir uyarı kuralı oluşturur ve uyarı kuralını Azure işlevini çağıracak şekilde yapılandırılır.

Azure işlevi oluşturma

Uyarıyı işlemek ve paket yakalama oluşturmak için önce bir işlev uygulaması oluşturmanız gerekir:

  1. Azure Portal’ında oturum açın.

  2. Portalın üst kısmındaki arama kutusuna işlev uygulamasını girin. Arama sonuçlarından İşlev Uygulaması'nı seçin.

    Screenshot that shows how to search for function apps in the Azure portal.

  3. +Oluştur'u seçin.

  4. İşlev Uygulaması Oluştur'un Temel Bilgiler sekmesinde, aşağıdaki ayarlar için değerleri girin veya seçin:

    • Proje Ayrıntıları'nın altında, işlev uygulamasını oluşturmak istediğiniz aboneliği ve uygulamayı içerecek kaynak grubunu seçin.
    • Örnek Ayrıntıları altında:
      • İşlev Uygulaması adı için işlev uygulamasının adını girin. Bu ad .azurewebsites.net ile eklenir.
      • Kod veya kapsayıcı görüntüsü dağıtmak istiyor musunuz? için yayımlama modunu seçin: Kod veya Kapsayıcı görüntüsü.
      • Çalışma zamanı yığını için bir çalışma zamanı yığını seçin.
      • Sürüm için çalışma zamanı yığınının sürümünü seçin.
      • Bölge için işlev uygulamasını oluşturmak istediğiniz bölgeyi seçin.
    • İşletim sistemi'nin altında, şu anda kullandığınız işletim sistemi türünü seçin. Azure, çalışma zamanı yığını seçiminize göre işletim sistemi türünü önerir.
    • Barındırma'nın altında, işlev uygulaması için kullanmak istediğiniz plan türünü seçin. Aşağıdaki seçenekler arasından seçim yapın:
      • Tüketim (Sunucusuz):En düşük maliyet için olay odaklı ölçeklendirme için.
      • İşlevler Premium: Olay tabanlı ölçeklendirme ve ağ yalıtımına sahip kurumsal düzeyde sunucusuz uygulamalar için.
      • App Service planı: Mevcut bir Azure Uygulaması Hizmet planından işlem yeniden kullanma.

    Screenshot of the Create Function App page in the Azure portal.

  5. Uygulamayı oluşturmak için Gözden geçir + oluştur'u seçin.

Artık bir işlev oluşturabilirsiniz:

  1. Oluşturduğunuz işlev uygulamasında İşlevler'i ve ardından Oluştur'u seçerek İşlev oluştur bölmesini açın.

    Screenshot of the Create function pane.

  2. Geliştirme ortamı için Portal’da geliştir’i seçin.

  3. Şablon seçin'in altında HTTP tetikleyicisi'ni seçin.

  4. Şablon ayrıntıları bölümünde:

    • Yeni İşlev için işlevin adını girin.
    • Yetkilendirme düzeyi için İşlev'i seçin.
  5. Oluştur'u belirleyin.

  6. Oluşturduğunuz işleve gidin ve Kod + Test'i seçin.

    Screenshot of the Code + Test page for a function.

  7. Betiği güncelleştirin ve Kaydet'i seçin.

Kimlik doğrulamasını yapılandırma

PowerShell cmdlet'lerini kullanmak için işlev uygulamasında kimlik doğrulamasını yapılandırmanız gerekir. Kimlik doğrulamasını yapılandırmak için ortam değişkenlerini yapılandırmanız ve şifrelenmiş bir anahtar dosyasını işlev uygulamasına yüklemeniz gerekir.

Not

Bu senaryo, Azure İşlevleri ile kimlik doğrulaması uygulama konusunda yalnızca bir örnek sağlar. Aynı eylemi gerçekleştirmenin başka yolları da vardır.

Aşağıdaki PowerShell betiği PassEncryptKey.key adlı bir anahtar dosyası oluşturur. Ayrıca, sağlanan parolanın şifrelenmiş bir sürümünü de sağlar. Bu parola, kimlik doğrulaması için kullanılan Microsoft Entra uygulaması için tanımlanan parolayla aynıdır.

#Variables
$keypath = "C:\temp\PassEncryptKey.key"
$AESKey = New-Object Byte[] 32
$Password = "<insert a password here>"

#Keys
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey) 
Set-Content $keypath $AESKey

#Get encrypted password
$secPw = ConvertTo-SecureString -AsPlainText $Password -Force
$AESKey = Get-content $KeyPath
$Encryptedpassword = $secPw | ConvertFrom-SecureString -Key $AESKey
$Encryptedpassword

Ortam değişkenleri için değerleri alma

Kimlik doğrulaması değerlerine erişmek için gereken aşağıdaki ortam değişkenlerini ayarlayın:

  • AzureClientID
  • AzureTenant
  • AzureCredPassword

Zaten bir uygulama kimliğiniz varsa, bu uygulamanın , AzureTenantve AzureCredPassword değerlerini kullanınAzureClientID. Yoksa Ortam değişkenlerini depolama bölümüne geçin.

AzureClientID

İstemci kimliği, Microsoft Entra Id'deki bir uygulamanın kimliğidir. İstemci kimliğini almak için:

  1. Kullanmak istediğiniz bir uygulamanız yoksa, bir uygulama oluşturmak için aşağıdaki cmdlet'i çalıştırın:

    $app = New-AzADApplication -DisplayName "ExampleAutomationAccount_MF" -HomePage "https://exampleapp.com" -IdentifierUris "https://exampleapp1.com/ExampleFunctionsAccount" -Password "<same password as defined earlier>"
    New-AzADServicePrincipal -ApplicationId $app.ApplicationId
    Start-Sleep 15]
    New-AzRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $app.ApplicationId
    

    Not

    Uygulamayı oluştururken kullandığınız parola, daha önce anahtar dosyasını kaydettiğinizde oluşturduğunuz parolayla aynı olmalıdır.

  2. Azure portalında Abonelikler'i seçin. Kullanılacak aboneliği seçin ve ardından Erişim denetimi (IAM) seçeneğini belirleyin.

  3. Kullanılacak hesabı seçin ve ardından Özellikler'i seçin. Uygulama kimliği kopyalayın.

AzureTenant

Aşağıdaki PowerShell cmdlet'ini çalıştırarak kiracı kimliğini alın:

(Get-AzSubscription -SubscriptionName "<subscriptionName>").TenantId

AzureCredPassword

Ortam değişkeninin AzureCredPassword değeri, aşağıdaki PowerShell örneğini çalıştırarak elde ettiğiniz değerdir. Bu örnek, önceki Kimlik doğrulamasını yapılandırma bölümünde görüntülenen örnekle aynıdır. İhtiyacınız olan değer değişkenin çıktısıdır $Encryptedpassword . Bu çıkış, PowerShell betiğini kullanarak şifrelediğiniz hizmet sorumlusu parolasıdır.

#Variables
$keypath = "C:\temp\PassEncryptKey.key"
$AESKey = New-Object Byte[] 32
$Password = "<insert a password here>"

#Keys
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey) 
Set-Content $keypath $AESKey

#Get encrypted password
$secPw = ConvertTo-SecureString -AsPlainText $Password -Force
$AESKey = Get-content $KeyPath
$Encryptedpassword = $secPw | ConvertFrom-SecureString -Key $AESKey
$Encryptedpassword

Ortam değişkenlerini depolama

Ortam değişkenlerini depolamak için:

  1. İşlev uygulamasına gidin. Yapılandırmalar Uygulama ayarları'nı> seçin.

    Screenshot of the tab for application settings.

  2. Ortam değişkenlerini ve değerlerini uygulama ayarlarına ekleyin ve kaydet'i seçin.

İşleve PowerShell ekleme

Şimdi Azure işlevinin içinden Ağ İzleyicisi çağrısı yapın. Gereksinimlere bağlı olarak, bu işlevin uygulanması farklılık gösterebilir. Ancak, kodun genel akışı aşağıdaki gibidir:

  1. İşlem giriş parametreleri.
  2. Sınırları doğrulamak ve ad çakışmalarını çözmek için mevcut paket yakalamalarını sorgula.
  3. Uygun parametrelerle paket yakalama oluşturun.
  4. Paket yakalama işlemi tamamlanana kadar düzenli aralıklarla yoklayın.
  5. Paket yakalama oturumunun tamamlandığını kullanıcıya bildirin.

Aşağıdaki örnek, işlevinde kullanabileceğiniz PowerShell kodudur. , resourceGroupNameve storageAccountNamedeğerlerini subscriptionIddeğiştirmeniz gerekir.

# Input bindings are passed in via parameter block 
param($Request, $TriggerMetadata) 

$essentials = $Request.body.data.essentials
$alertContext = $Request.body.data.alertContext 


# Storage account ID to save captures in 
$storageaccountid = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}" 

# Packet capture variables 
$packetCaptureName = "PSAzureFunction" 
$packetCaptureLimit = 100
$packetCaptureDuration = 30 

# Credentials 
# Set the credentials in the configurations
$tenant = $env:AzureTenant 
$pw = $env:AzureCredPassword 
$clientid = $env:AzureClientId 
$password = ConvertTo-SecureString $pw -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($clientid, $password)

Connect-AzAccount -ServicePrincipal -Tenant $tenant -Credential $credential #-WarningAction SilentlyContinue | out-null

if ($alertContext.condition.allOf.metricNamespace -eq "Microsoft.Compute/virtualMachines") { 

    # Get the VM firing this alert 
    $vm = Get-AzVM -ResourceId $essentials.alertTargetIDs[0] 

    # Get the Network Watcher instance in the VM's region 
    $networkWatcher = Get-AzNetworkWatcher -Location $vm.Location  

    # Get existing packet captures 
    $packetCaptures = Get-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher 

    # Remove an existing packet capture created by the function (if it exists) 
    $packetCaptures | ForEach-Object { if ($_.Name -eq $packetCaptureName) 
        {  
            Remove-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName $packetCaptureName 
        } 
    } 
  
    # Initiate packet capture on the VM that fired the alert 
    if ($packetCaptures.Count -lt $packetCaptureLimit) { 
        Write-Output "Initiating Packet Capture" 
        New-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -TargetVirtualMachineId $vm.Id -PacketCaptureName $packetCaptureName -StorageAccountId $storageaccountid -TimeLimitInSeconds $packetCaptureDuration 
    } 
} 

Eski şemayı kullanıyorsanız aşağıdaki PowerShell kodunu kullanın:

# Input bindings are passed in via parameter block 
param($Request, $TriggerMetadata)
$details = $Request.RawBody | ConvertFrom-Json


# Process alert request body 
$requestBody = $Request.Body.data

# Storage account ID to save captures in 
$storageaccountid = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}" 

# Packet capture variables 
$packetCaptureName = "PSAzureFunction" 
$packetCaptureLimit = 100
$packetCaptureDuration = 30 

# Credentials 
# Set the credentials in the configurations
$tenant = $env:AzureTenant 
$pw = $env:AzureCredPassword 
$clientid = $env:AzureClientId 

$password = ConvertTo-SecureString $pw -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($clientid, $password)

Connect-AzAccount -ServicePrincipal -Tenant $tenant -Credential $credential #-WarningAction SilentlyContinue | out-null

if ($requestBody.context.resourceType -eq "Microsoft.Compute/virtualMachines") { 

    # Get the VM firing this alert 
    $vm = Get-AzVM -ResourceGroupName $requestBody.context.resourceGroupName -Name $requestBody.context.resourceName 

    # Get the Network Watcher instance in the VM's region 
    $networkWatcher = Get-AzNetworkWatcher -Location $vm.Location  

    # Get existing packet captures 
    packetCaptures = Get-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher 

    # Remove an existing packet capture created by the function (if it exists) 
    $packetCaptures | ForEach-Object { if ($_.Name -eq $packetCaptureName) 
        {  
            Remove-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName $packetCaptureName 
        } 
    } 

    # Initiate packet capture on the VM that fired the alert 
    if ($packetCaptures.Count -lt $packetCaptureLimit) { 
        Write-Output "Initiating Packet Capture" 
        New-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -TargetVirtualMachineId $requestBody.context.resourceId -PacketCaptureName $packetCaptureName -StorageAccountId $storageaccountid -TimeLimitInSeconds $packetCaptureDuration 
    } 
}                               

VM'de uyarı yapılandırma

Belirli bir ölçüm, atadığınız bir eşiği aştığında bireyleri bilgilendirmek için uyarılar yapılandırabilirsiniz. Bu örnekte, uyarı gönderilen Ağ Çıkışı Toplam ölçümündedir, ancak uyarıyı diğer birçok ölçüm için tetikleyebilirsiniz.

Uyarı kuralını oluşturma

Mevcut bir sanal makineye gidin ve bir uyarı kuralı ekleyin. Uyarı kuralı oluştur sayfasında aşağıdaki adımları izleyin:

  1. Sinyal seçin bölmesinde sinyalin adını arayın ve seçin. Bu örnekte, seçilen sinyal Ağ Çıkışı Toplamı'dır . Sanal makine tarafından tüm ağ arabirimlerindeki bayt sayısını belirtir.

  2. Koşullar sekmesinde aşağıdaki değerleri ayarlayın ve ardından İleri: Eylemler'i seçin.

    Ayar Value
    Threshold Statik
    Toplama türü Ortalama
    İşleç Büyüktür
    Eşik değeri 3
    Her 1 dakika
    Geri arama dönemi 5 dakika
  3. Eylemler sekmesinde Eylem grubu oluştur'u seçin.

  4. Eylem grubu oluştur sayfasında Abonelik, Kaynak grubu ve Bölge değerlerini seçin. Ayrıca eylem grubu adını ve görünen adı girin ve ardından İleri: Bildirimler'i seçin.

  5. Bildirimler sekmesinde, Eylem türü için Azure İşlevi'ni seçin.

  6. Azure İşlevi bölmesinde Abonelik, Kaynak grubu, İşlev uygulaması ve Azure İşlevi değerlerini seçin.

    Screenshot of the page for creating an action group and the pane for details about an Azure function.

  7. Ortak uyarı şemasını etkinleştir kaydırıcısında Hayır'ı seçin. Ardından Tamam'ı seçin.

Sonuçları gözden geçirin

Ölçütler uyarı tetikledikten sonra Ağ İzleyicisi bir paket yakalama oluşturur. Ağ İzleyicisi gidin ve Paket yakalama'yı seçin. Bu sayfada, paket yakalamayı indirmek için dosya bağlantısını seçebilirsiniz.

Yakalama dosyası yerel olarak depolanıyorsa, sanal makinede oturum açarak dosyayı alabilirsiniz.

Azure depolama hesaplarından dosya indirme yönergeleri için .NET için Azure Blob Depolama istemci kitaplığı hızlı başlangıcına bakın. Azure Depolama Gezgini aracını da kullanabilirsiniz.

Yakalama işleminizi indirdikten sonra Wireshark gibi bir .cap dosyasını okuyabilen araçları kullanarak görüntüleyebilirsiniz.

Sonraki adım

Paket yakalama dosyalarını inceleme ve analiz etme Ağ İzleyicisi okuyarak paket yakalamalarınızı görüntülemeyi öğrenin.