Ağ İzleyicisi ve Grafana kullanarak ağ güvenlik grubu akış günlüklerini yönetme ve analiz etme
Önemli
30 Eylül 2027'de ağ güvenlik grubu (NSG) akış günlükleri kullanımdan kaldırılacaktır. Bu kullanımdan kaldırmanın bir parçası olarak 30 Haziran 2025'den itibaren yeni NSG akış günlükleri oluşturamayacaksınız. NSG akış günlüklerinin sınırlamalarını aşan sanal ağ akış günlüklerine geçiş yapmanızı öneririz. Kullanımdan kaldırma tarihinden sonra NSG akış günlükleriyle etkinleştirilen trafik analizi artık desteklenmeyecektir ve aboneliklerinizdeki mevcut NSG akış günlükleri kaynakları silinir. Ancak NSG akış günlükleri kayıtları silinmez ve ilgili bekletme ilkelerini izlemeye devam eder. Daha fazla bilgi için resmi duyuruya bakın.
Ağ Güvenlik Grubu (NSG) akış günlükleri , ağ arabirimlerindeki giriş ve çıkış IP trafiğini anlamak için kullanılabilecek bilgiler sağlar. Bu akış günlükleri NSG kuralı temelinde giden ve gelen akışları, akışın uygulandığı NIC'yi, akış hakkındaki 5 tanımlama grubu bilgilerini (Kaynak/Hedef IP, Kaynak/Hedef Bağlantı Noktası, Protokol) ve trafiğe izin verilip verilmediğini gösterir.
Akış günlüğü etkinken ağınızda birçok NSG olabilir. Bu miktarda günlük verisi, günlükleri ayrıştırmanızı ve günlüklerinizden içgörüler elde etmenizi zahmetli hale getirir. Bu makale, açık kaynak bir graf aracı olan Grafana, dağıtılmış bir arama ve analiz altyapısı olan Elasticsearch ve açık kaynak sunucu tarafı veri işleme işlem hattı olan Logstash'i kullanarak bu NSG akış günlüklerini merkezi olarak yönetmeye yönelik bir çözüm sağlar.
Senaryo
NSG akış günlükleri Ağ İzleyicisi kullanılarak etkinleştirilir ve Azure blob depolamada depolanır. Blob depolamadan akış günlüklerine bağlanmak ve bunları Elasticsearch'e göndermek için logstash eklentisi kullanılır. Akış günlükleri Elasticsearch'te depolandıktan sonra Grafana'daki özelleştirilmiş panolarda analiz edilebilir ve görselleştirilebilir.
Yükleme adımları
Ağ Güvenlik Grubu akış günlüğünü etkinleştirme
Bu senaryo için, hesabınızda en az bir Ağ Güvenlik Grubunda Ağ Güvenlik Grubu Akış Günlüğü'nün etkinleştirilmiş olması gerekir. Ağ Güvenliği Akış Günlüklerini etkinleştirme yönergeleri için Aşağıdaki Ağ Güvenlik Grupları için akış günlüğüne giriş makalesine bakın.
Kurulumla ilgili dikkat edilmesi gerekenler
Bu örnekte Grafana, Elasticsearch ve Logstash, Azure'da dağıtılan bir Ubuntu LTS Sunucusunda yapılandırılır. Bu en düşük kurulum, üç bileşenin de çalıştırılması için kullanılır; hepsi aynı VM'de çalışır. Bu kurulum yalnızca test ve kritik olmayan iş yükleri için kullanılmalıdır. Logstash, Elasticsearch ve Grafana'nın tümü birçok örnekte bağımsız olarak ölçeklendirilecek şekilde tasarlanabilir. Daha fazla bilgi için bu bileşenlerin her biri için belgelere bakın.
Logstash'ı yükleme
JSON biçimli akış günlüklerini akış tanımlama grubu düzeyine düzleştirmek için Logstash kullanırsınız.
Aşağıdaki yönergeler Logstash'ı Ubuntu'ya yüklemek için kullanılır. Bu paketi Red Hat Enterprise Linux'a yükleme yönergeleri için bkz . Paket Depolarından Yükleme - yum.
Logstash'ı yüklemek için aşağıdaki komutları çalıştırın:
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb sudo dpkg -i logstash-5.2.0.deb
Logstash'i akış günlüklerini ayrıştıracak ve Elasticsearch'e gönderecek şekilde yapılandırın. Aşağıdakini kullanarak Logstash.conf dosyası oluşturun:
sudo touch /etc/logstash/conf.d/logstash.conf
Dosyaya aşağıdaki içeriği ekleyin. Depolama hesabı adını ve erişim anahtarını depolama hesabı ayrıntılarınızı yansıtacak şekilde değiştirin:
input { azureblob { storage_account_name => "mystorageaccount" storage_access_key => "VGhpcyBpcyBhIGZha2Uga2V5Lg==" container => "insights-logs-networksecuritygroupflowevent" codec => "json" # Refer https://learn.microsoft.com/azure/network-watcher/network-watcher-read-nsg-flow-logs # Typical numbers could be 21/9 or 12/2 depends on the nsg log file types file_head_bytes => 12 file_tail_bytes => 2 # Enable / tweak these settings when event is too big for codec to handle. # break_json_down_policy => "with_head_tail" # break_json_batch_count => 2 } } filter { split { field => "[records]" } split { field => "[records][properties][flows]"} split { field => "[records][properties][flows][flows]"} split { field => "[records][properties][flows][flows][flowTuples]"} mutate { split => { "[records][resourceId]" => "/"} add_field => { "Subscription" => "%{[records][resourceId][2]}" "ResourceGroup" => "%{[records][resourceId][4]}" "NetworkSecurityGroup" => "%{[records][resourceId][8]}" } convert => {"Subscription" => "string"} convert => {"ResourceGroup" => "string"} convert => {"NetworkSecurityGroup" => "string"} split => { "[records][properties][flows][flows][flowTuples]" => "," } add_field => { "unixtimestamp" => "%{[records][properties][flows][flows][flowTuples][0]}" "srcIp" => "%{[records][properties][flows][flows][flowTuples][1]}" "destIp" => "%{[records][properties][flows][flows][flowTuples][2]}" "srcPort" => "%{[records][properties][flows][flows][flowTuples][3]}" "destPort" => "%{[records][properties][flows][flows][flowTuples][4]}" "protocol" => "%{[records][properties][flows][flows][flowTuples][5]}" "trafficflow" => "%{[records][properties][flows][flows][flowTuples][6]}" "traffic" => "%{[records][properties][flows][flows][flowTuples][7]}" "flowstate" => "%{[records][properties][flows][flows][flowTuples][8]}" "packetsSourceToDest" => "%{[records][properties][flows][flows][flowTuples][9]}" "bytesSentSourceToDest" => "%{[records][properties][flows][flows][flowTuples][10]}" "packetsDestToSource" => "%{[records][properties][flows][flows][flowTuples][11]}" "bytesSentDestToSource" => "%{[records][properties][flows][flows][flowTuples][12]}" } add_field => { "time" => "%{[records][time]}" "systemId" => "%{[records][systemId]}" "category" => "%{[records][category]}" "resourceId" => "%{[records][resourceId]}" "operationName" => "%{[records][operationName]}" "Version" => "%{[records][properties][Version]}" "rule" => "%{[records][properties][flows][rule]}" "mac" => "%{[records][properties][flows][flows][mac]}" } convert => {"unixtimestamp" => "integer"} convert => {"srcPort" => "integer"} convert => {"destPort" => "integer"} add_field => { "message" => "%{Message}" } } date { match => ["unixtimestamp" , "UNIX"] } } output { stdout { codec => rubydebug } elasticsearch { hosts => "localhost" index => "nsg-flow-logs" } }
Sağlanan Logstash yapılandırma dosyası üç bölümden oluşur: giriş, filtre ve çıkış. Giriş bölümünde Logstash'in işleyecekleri günlüklerin giriş kaynağı belirtilir. Bu durumda blob depolamada depolanan NSG akış günlüğü JSON dosyalarına erişmemizi sağlayacak bir "azureblob" giriş eklentisi (sonraki adımlarda yüklü) kullanacağız.
Filtre bölümü daha sonra her akış günlüğü dosyasını düzleştirerek her akış tanımlama grubu ve ilişkili özellikleri ayrı bir Logstash olayına dönüşür.
Son olarak, çıkış bölümü her Logstash olayını Elasticsearch sunucusuna iletir. Logstash yapılandırma dosyasını ihtiyaçlarınıza uyacak şekilde değiştirebilirsiniz.
Azure Blob depolama için Logstash giriş eklentisini yükleme
Bu Logstash eklentisi, akış günlüklerine belirlenen blob depolama hesaplarından doğrudan erişmenizi sağlar. Bu eklentiyi yüklemek için varsayılan Logstash yükleme dizininden (bu örnekte /usr/share/logstash/bin) komutunu çalıştırın:
sudo /usr/share/logstash/bin/logstash-plugin install logstash-input-azureblob
Bu eklenti hakkında daha fazla bilgi için bkz . Azure Depolama Blobları için Logstash giriş eklentisi.
Elasticsearch'i yükleme
Elasticsearch'i yüklemek için aşağıdaki betiği kullanabilirsiniz. Elasticsearch'i yükleme hakkında bilgi için bkz . Elastik Yığın.
sudo apt-get install apt-transport-https openjdk-8-jre-headless uuid-runtime pwgen -y
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://packages.elastic.co/elasticsearch/5.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-5.x.list
sudo apt-get update && apt-get install elasticsearch
sudo sed -i s/#cluster.name:.*/cluster.name:\ grafana/ /etc/elasticsearch/elasticsearch.yml
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
Grafana'yı yükleme
Grafana'yı yüklemek ve çalıştırmak için aşağıdaki komutları çalıştırın:
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.5.1_amd64.deb
sudo apt-get install -y adduser libfontconfig
sudo dpkg -i grafana_4.5.1_amd64.deb
sudo service grafana-server start
Ek yükleme bilgileri için bkz . Debian / Ubuntu'ya Yükleme.
Elasticsearch sunucusunu veri kaynağı olarak ekleme
Ardından, akış günlüklerini içeren Elasticsearch dizinini veri kaynağı olarak eklemeniz gerekir. Veri kaynağı ekle'yi seçip formu ilgili bilgilerle tamamlayarak veri kaynağı ekleyebilirsiniz. Bu yapılandırmanın bir örneğini aşağıdaki ekran görüntüsünde bulabilirsiniz:
Pano oluşturma
Grafana'yı NSG akış günlüklerini içeren Elasticsearch dizininden okuyacak şekilde başarıyla yapılandırdığınıza göre panolar oluşturabilir ve kişiselleştirebilirsiniz. Yeni bir pano oluşturmak için İlk panonuzu oluştur'u seçin. Aşağıdaki örnek grafik yapılandırması NSG kuralına göre segmentlere ayrılmış akışları gösterir:
Sonuç
Ağ İzleyicisi Elasticsearch ve Grafana ile tümleştirerek NSG akış günlüklerini ve diğer verileri yönetmenin ve görselleştirmenin kullanışlı ve merkezi bir yolunu elde etmiş olursunuz. Grafana, akış günlüklerini daha fazla yönetmek ve ağ trafiğinizi daha iyi anlamak için de kullanılabilecek başka güçlü graf özelliklerine sahiptir. Artık bir Grafana örneği ayarlayıp Azure'a bağlandığınıza göre, sunduğu diğer işlevleri keşfetmeye devam edebilirsiniz.
Sonraki adım
- Ağ İzleyicisi kullanma hakkında daha fazla bilgi edinin.