Microsoft Sentinel CCF anlık iletme bağlayıcıları (önizleme) - Başlangıç kılavuzu

Bu kılavuz, Kodsuz Bağlayıcı Çerçevesi (CCF) Anında İletme (önizleme) kullanarak Microsoft Sentinel için anında iletme tabanlı kodsuz bağlayıcıları anlamanıza, oluşturmanıza ve dağıtmanıza yardımcı olur.

CCF itme nedir?

CCF Anında İletme bağlayıcıları, uygulamalarınızın gerçek zamanlı olarak güvenlik olaylarını doğrudan Microsoft Sentinel'e göndermesini sağlar. API'lerden düzenli aralıklarla veri getiren geleneksel yoklama tabanlı bağlayıcıların aksine, gönderme bağlayıcıları sisteminizde olaylar oluştuğunda verileri Sentinel'e göndermenize olanak sağlar.

CCF Push Bildirimi birkaç temel avantaj sağlar.

  • Uygulama denetimli veri akışı: Uygulamanız veri gönderme zamanlarını ve nasıl yapılacağını denetler ve akıllı toplu işlem stratejilerine ve iyileştirilmiş ağ kullanımına olanak tanır.
  • Gerçek zamanlı alım: Yoklama aralıklarını beklemeden, olaylar gerçekleştiğinde verileri hemen gönderin.
  • Basitleştirilmiş mimari: Sentinel'in yoklaması için API uç noktalarının korunması gerekmez.
  • Şablon tabanlı sağlama: Dağıtım; DCR'ler, özel tablolar, Entra uygulama kaydı ve istemci gizli dizileri için ARM şablonları oluşturur; gönderen uygulamanızda yapılandırabileceğiniz bağlantı ayrıntılarını alırsınız.
  • Güvenli kimlik doğrulaması: Güvenli veri gönderimi için OAuth 2.0 ile Microsoft Entra uygulamalarını kullanır.

Prerequisites

  • Başlamadan önce paketleme araçları için Azure-Sentinel GitHub deposuna erişiminiz olmalıdır.
  • Microsoft Entra izinleri:
    • Microsoft Entra Id'de uygulama kaydı oluşturma izni. Genellikle Entra ID Uygulama Geliştiricisi rolünü veya daha üstünü gerektirir.
    • Gizli bilgilerle uygulama oluşturma izni. Bu izni vermezseniz, bağlayıcı güvenlik nedenlerinden dolayı başarısız olur.
    • Yayımcı, Microsoft Entra uygulamasından belirteçleri almak için uygun role sahip olmalıdır. Bu belirteçler, bağlayıcının nihai olarak verilerini gönderdiği uç nokta olan Veri Toplama Uç Noktasına (DCE) yönelik isteklerin kimliğini doğrulamak için gereklidir. Sağlayıcı tarafından belirteçler alınamıyorsa, veriler DCE'ye gönderilemez.
  • Microsoft Azure izinleri:
    • Veri toplama kuralında (DCR) İzleme Ölçümleri Yayımcısı rolü atama izni. Genellikle Azure RBAC Sahibi veya Kullanıcı Erişimi Yöneticisi rolü gerektirir.

CCF itme nasıl çalışır?

İtme modeli ve çekme modeli

Gönderme ve çekme verileri alma modelleri arasındaki farkı anlamak, senaryonuz için doğru bağlayıcı türünü seçmenize yardımcı olur.

CCF çekme bağlayıcıları - Yoklama tabanlı:

Çekme modelinde, Microsoft Sentinel verileri almak için API'nizi düzenli aralıklarla sorgular.

  • Microsoft Sentinel, yapılandırılmış bir zamanlamaya göre veri kaynağı API'nize bağlantılar başlatır.
  • Veriler, her beş dakikada bir gibi düzenli yoklama aralıklarına ulaşır.
  • Genel olarak erişilebilen bir API uç noktası tutmanız gerekir.
  • Sentinel'in yoklama altyapısı, veri toplama işlemini yönetir.

CCF anında iletme bağlayıcıları - Olay temelli:

Gönderme modelinde uygulamanız verileri doğrudan Microsoft Sentinel'e gönderir:

  • Uygulamanız, olaylar gerçekleştiğinde veri göndermeyi başlatır.
  • Veriler, olaylar oluşturulduklarında neredeyse gerçek zamanlı olarak alınır.
  • API uç noktasını korumanız gerekmez.
  • Uygulamanız toplu işlemi, zamanlamayı ve veri akışı iyileştirmesini denetler.

Anında iletme veri akışı

CCF anında iletme veri akışı beş ana adımdan oluşur:

  1. Bağlayıcıyı Microsoft Sentinel'de dağıtırsınız.

  2. Azure otomatik olarak aşağıdaki kaynakları oluşturur:

    • Kimlik bilgileriyle Microsoft Entra uygulaması
    • Veri Toplama Kuralı (DCR) - verilerinizi işlemeyi tanımlar
    • Veri Toplama Uç Noktası (DCE) - Verileri gönderdiğiniz URL
    • Özel günlük tablosu - verilerinizin depolandığı yer
    • Rol atamaları - Entra uygulaması için izinler
  3. Aşağıdaki bağlantı ayrıntılarını alırsınız:

    • Kiracı Kimliği
    • Uygulama (İstemci) Kimliği
    • İstemci Parolası
    • DCE URI'si (uç nokta URL'si)
    • DCR Sabit Kimliği
    • Stream Adı
  4. Uygulamanız aşağıdaki verileri gönderir:

    • CCF tarafından oluşturulan Entra uygulaması kimlik bilgilerini kullanarak OAuth 2.0 belirtecini alır. Daha fazla bilgi için bkz . OAuth 2.0 istemci kimlik bilgileri akışı
    • Olayları tablo şemanızla eşleşen JSON olarak biçimlendirin
    • DCE uç noktasına POST eder veriyi
  5. Azure verileri işler ve depolar:

    • DCR'ler verileri dönüştürür (isteğe bağlı KQL dönüştürmeleri)
    • Veriler Log Analytics'teki özel tabloya yazılır
    • Veriler Sentinel'deki sorgular, analizler ve uyarılar için kullanılabilir

CCF artefaktlar gönderme

CCF Push bağlayıcı çözümü dört ana bileşenden oluşur:

  • Özel tablo tanımı
  • Veri toplama kuralı (DCR)
  • Bağlayıcı tanımı (UI)
  • Anında İletme Bağlayıcısı Yapılandırması

Özel tablo tanımı

Bu nedir: Log Analytics'te verilerinizin yapısını tanımlayan şema.

Önemli gereksinimler:

  • Tablo adı, _CL (özel günlük son eki) ile bitmelidir.
  • Bir TimeGenerated sütun (tarih saat türü) içermelidir.
  • Sütun türleri: string, int, long, real, bool, datetime, dynamic, guid.
  • API'nin 2025-07-01 veya daha üzeri bir sürümünü kullanın.
  • Daha fazla bilgi için bkz. Azure İzleyici Günlüklerinde özel tablo oluşturma.

Example:

{
  "name": "ContosoSecurityAlerts_CL",
  "type": "Microsoft.OperationalInsights/workspaces/tables",
  "apiVersion": "2025-07-01",
  "properties": {
     "schema": {
        "name": "ContosoSecurityAlerts_CL",
        "columns": [
          {
             "name": "TimeGenerated",
             "type": "datetime"
          },
          {
             "name": "EventSeverity",
             "type": "string"
          },
          {
             "name": "EventType",
             "type": "string"
          },
          {
             "name": "UserName",
             "type": "string"
          },
          {
             "name": "SourceIP",
             "type": "string"
          },
          {
             "name": "DeviceId",
             "type": "string"
          },
          {
             "name": "AlertMessage",
             "type": "string"
          }
        ]
     }
  }
}

Veri toplama kuralı (DCR)

Bu nedir: Azure İzleyici'nin verilerinizi nasıl alıp işlediğini tanımlar. Daha fazla bilgi için bkz. Azure İzleyici'de veri toplama kuralları.

Ne yapar:

  • Giriş akışı adını belirtir (uygulamanızın veri gönderirken kullandığı ad)
  • Verileri şekillendirmek ve zenginleştirmek için isteğe bağlı KQL dönüşümlerini tanımlar
  • Verileri hedef tabloya yönlendirir
  • Veri Toplama Uç Noktasına (DCE) bağlantılar

Önemli bileşenler:

  • streamDeclarations: Gelen verilerin yapısını tanımlar (uygulamanızın gönderdiğiyle eşleşmelidir)
  • destinations: Verilerin gittiği yer (Log Analytics çalışma alanınız)
  • dataFlows: Giriş akışından çıkış tablosuna dönüştürme işlem hattı
  • dataCollectionEndpointId: Veri alımı için DCE bağlantıları

Example:

{
  "name": "ContosoSecurityAlertsPushDCR",
  "apiVersion": "2021-09-01-preview",
  "type": "Microsoft.Insights/dataCollectionRules",
  "location": "[parameters('workspace-location')]",
  "properties": {
     "streamDeclarations": {
        "Custom-ContosoSecurityAlerts": {
          "columns": [
             {
                "name": "EventSeverity",
                "type": "string"
             },
             {
                "name": "EventType",
                "type": "string"
             },
             {
                "name": "UserName",
                "type": "string"
             },
             {
                "name": "SourceIP",
                "type": "string"
             },
             {
                "name": "DeviceId",
                "type": "string"
             },
             {
                "name": "AlertMessage",
                "type": "string"
             }
          ]
        }
     },
     "destinations": {
        "logAnalytics": [
          {
             "workspaceResourceId": "[variables('workspaceResourceId')]",
             "name": "clv2ws1"
          }
        ]
     },
     "dataFlows": [
        {
          "streams": [
             "Custom-ContosoSecurityAlerts"
          ],
          "destinations": [
             "clv2ws1"
          ],
          "transformKql": "source | extend TimeGenerated = now()",
          "outputStream": "Custom-ContosoSecurityAlerts_CL"
        }
     ],
     "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]"
  }
}

Important

  • Akış adı ön ek ile Custom- başlamalıdır.
  • transformKql doğrudan "source" geçiş için olabilir veya veri dönüştürme için KQL mantığını içerebilir.
  • outputStream tablonuzun adı, Custom- ön eki ve _CL son ekiyle eşleşmelidir.

Bağlayıcı tanımı (UI)

Bağlayıcı tanımı, bağlayıcının Microsoft Sentinel veri bağlayıcısı galerisinde nasıl görüneceğini denetler. Daha fazla bilgi için bkz. Veri Bağlayıcısı Tanımları API başvurusu.

Bağlayıcı tanımı şunları içerir:

  • Bağlayıcı başlığı, açıklaması ve markası
  • Çalışma alanı erişimi ve Entra izinleri gibi gerekli önkoşullar ve izinler
  • Dağıtım için yönerge adımları
  • Kullanıcılara bağlantı ayrıntılarını görüntülemek için kullanıcı arabirimi denetimleri

Anahtar kullanıcı arabirimi öğeleri:

  • DeployPushConnectorButton: Otomatik kaynak dağıtımlarını tetikler
  • CopyableLabel: Dağıtımdan sonra bağlantı ayrıntılarını görüntüler (parametre kullanır fillWith )
  • Markdown: Biçimlendirilmiş yönergeler ve bağlam sağlar
  • IsConnectedQuery: Bağlayıcı bağlantısını son verilere göre doğrular

Örnek yapı (netlik için kısaltılır):

{
    "name": "ContosoSecurityAlertsPush",
    "apiVersion": "2022-09-01-preview",
    "type": "Microsoft.SecurityInsights/dataConnectorDefinitions",
    "location": "[parameters('workspace-location')]",
    "kind": "Customizable",
    "properties": {
        "connectorUiConfig": {
            "id": "ContosoSecurityAlertsPush",
            "title": "Contoso Security Alerts (Push)",
            "publisher": "Contoso Corporation",
            "descriptionMarkdown": "The [Contoso Security Alerts](https://www.contoso.com/) connector provides the capability to push real-time security alerts from your Contoso application directly into Microsoft Sentinel using the Codeless Connector Framework (CCF) Push pattern. This connector ingests alert severity, event types, user information, and network details into a custom Log Analytics table for analysis, alerting, and visualization.",
            "graphQueries": [
                {
                    "metricName": "Security Alerts",
                    "legend": "ContosoSecurityAlerts_CL",
                    "baseQuery": "ContosoSecurityAlerts_CL"
                }
            ],
            "sampleQueries": [
                {
                    "description": "All security alerts",
                    "query": "ContosoSecurityAlerts_CL\n | sort by TimeGenerated desc"
                },
                {
                    "description": "Critical and High severity alerts",
                    "query": "ContosoSecurityAlerts_CL\n | where EventSeverity in ('Critical', 'High')\n | sort by TimeGenerated desc"
                }
            ],
            "dataTypes": [
                {
                    "name": "ContosoSecurityAlerts_CL",
                    "lastDataReceivedQuery": "ContosoSecurityAlerts_CL\n| summarize Time = max(TimeGenerated)\n| where isnotempty(Time)"
                }
            ],
            "connectivityCriteria": [
                {
                    "type": "IsConnectedQuery",
                    "value": [
                        "ContosoSecurityAlerts_CL\n| summarize LastLogReceived = max(TimeGenerated)\n| project IsConnected = LastLogReceived > ago(7d)"
                    ]
                }
            ],
            "availability": {
                "status": 1
            },
            "permissions": {
                "resourceProvider": [
                    {
                        "provider": "Microsoft.OperationalInsights/workspaces",
                        "permissionsDisplayText": "read and write permissions are required.",
                        "providerDisplayName": "Workspace",
                        "scope": "Workspace",
                        "requiredPermissions": {
                            "write": true,
                            "read": true,
                            "delete": true
                        }
                    }
                ],
                "customs": [
                    {
                        "name": "Microsoft Entra",
                        "description": "Permission to create an app registration in Microsoft Entra ID. Typically requires Entra ID Application Developer role or higher."
                    },
                    {
                        "name": "Microsoft Azure",
                        "description": "Permission to assign Monitoring Metrics Publisher role on data collection rule (DCR). Typically requires Azure RBAC Owner or User Access Administrator role."
                    }
                ]
            },
            "instructionSteps": [
                {
                    "title": "1. Create ARM Resources and Provide the Required Permissions",
                    "description": "This connector enables your Contoso application to push security alerts directly to Microsoft Sentinel via the Azure Monitor Ingestion API.",
                    "instructions": [
                        {
                            "type": "Markdown",
                            "parameters": {
                                "content": "#### Automated Configuration and Secure Data Ingestion with Entra Application \nClicking on \"Deploy\" will trigger the creation of a Log Analytics table and a Data Collection Rule (DCR). \nIt will then create an Entra application, link the DCR to it, and set the entered secret in the application. This setup enables data to be sent securely to the DCR using an Entra token."
                            }
                        },
                        {
                            "type": "DeployPushConnectorButton",
                            "parameters": {
                                "label": "Deploy Contoso Push connector resources",
                                "applicationDisplayName": "Contoso Security Alerts Push Connector Application"
                            }
                        }
                    ]
                },
                {
                    "title": "2. Configure Your Contoso Application",
                    "description": "Use the following parameters to configure your Contoso application to push security alerts to the workspace.",
                    "instructions": [
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Tenant ID (Directory ID)",
                                "fillWith": [
                                    "TenantId"
                                ]
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Entra App Registration Application ID",
                                "fillWith": [
                                    "ApplicationId"
                                ],
                                "placeholder": "Deploy push connector to get the App Registration Application ID"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Entra App Registration Secret",
                                "fillWith": [
                                    "ApplicationSecret"
                                ],
                                "placeholder": "Deploy push connector to get the App Registration Secret"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Data Collection Endpoint Uri",
                                "fillWith": [
                                    "DataCollectionEndpoint"
                                ],
                                "placeholder": "Deploy push connector to get the Data Collection Endpoint Uri"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Data Collection Rule Immutable ID",
                                "fillWith": [
                                    "DataCollectionRuleId"
                                ],
                                "placeholder": "Deploy push connector to get the Data Collection Rule Immutable ID"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Stream Name",
                                "value": "Custom-ContosoSecurityAlerts"
                            }
                        },
                        {
                            "type": "Markdown",
                            "parameters": {
                                "content": "#### Configure Contoso Application\nUpdate your Contoso application configuration with the above credentials to enable security alert push to Microsoft Sentinel.\n\nExample configuration:\njson\n{\n \"azure\": {\n \"tenant_id\": \"<Tenant ID>\",\n \"client_id\": \"<Application ID>\",\n \"client_secret\": \"<Application Secret>\",\n \"dce_endpoint\": \"<Data Collection Endpoint Uri>\",\n \"dcr_immutable_id\": \"<Data Collection Rule Immutable ID>\",\n \"stream_name\": \"Custom-ContosoSecurityAlerts\"\n }\n}\n"
                            }
                        }
                    ]
                }
            ]
        }
    }
}

Important

  • id içindeki connectorUiConfig benzersiz olmalı ve veri bağlayıcı yapılandırmasındaki başvurularla eşleşmelidir.
  • IsConnectedQuery üretim bağlayıcıları (son verileri doğrulamak için) veya hasDataConnectors daha basit doğrulama için kullanın.
  • içindeki fillWithCopyableLabel parametreler dağıtımdan sonra otomatik olarak doldurulur.
  • Akış adı gibi sabit değerler, value yerine fillWith parametresini kullanır.

Push bağlayıcı yapılandırması

Anında iletme bağlayıcısı yapılandırması, bağlayıcı tanımını dağıtılan kaynaklara bağlayan veri bağlayıcısı örneğidir.

İtmeli bağlayıcı yapılandırması

  • Bağlayıcı tanımını (UI) dağıtılan DCR ve Entra uygulamasına bağlar
  • Kimlik doğrulama ayrıntılarını (uygulama kimliği, hizmet sorumlusu kimliği) depolar
  • DCR yapılandırmasını kaydeder (uç nokta, sabit kimlik, akış adı)
  • Kullanıcı arabiriminin kullanıcılara bağlantı ayrıntılarını almasını ve görüntülemesini sağlar

Önemli özellikler:

  • connectorDefinitionName: Bağlayıcı tanımınızdaki ile id eşleşmelidir
  • dcrConfig: DCR uç noktasını, kural kimliğini ve akış adını içerir
  • auth: Entra uygulama kimliğini ve hizmet sorumlusu kimliğini içerir
  • kind: İtme bağlayıcıları için "İtme" olmalıdır

Örnek:

{
  "name": "ContosoSecurityAlertsPushDCR",
  "apiVersion": "2021-09-01-preview",
  "type": "Microsoft.Insights/dataCollectionRules",
  "location": "[parameters('workspace-location')]",
  "properties": {
    "streamDeclarations": {
      "Custom-ContosoSecurityAlerts": {
        "columns": [
          {
            "name": "EventSeverity",
            "type": "string"
          },
          {
            "name": "EventType",
            "type": "string"
          },
          {
            "name": "UserName",
            "type": "string"
          },
          {
            "name": "SourceIP",
            "type": "string"
          },
          {
            "name": "DeviceId",
            "type": "string"
          },
          {
            "name": "AlertMessage",
            "type": "string"
          }
        ]
      }
    },
    "destinations": {
      "logAnalytics": [
        {
          "workspaceResourceId": "[variables('workspaceResourceId')]",
          "name": "clv2ws1"
        }
      ]
    },
    "dataFlows": [
      {
        "streams": [
          "Custom-ContosoSecurityAlerts"
        ],
        "destinations": [
          "clv2ws1"
        ],
        "transformKql": "source | extend TimeGenerated = now()",
        "outputStream": "Custom-ContosoSecurityAlerts_CL"
      }
    ],
    "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]"
  }
}

Important

  • Bağlayıcı connectorDefinitionName, tanımın id ile tam olarak eşleşmelidir.
  • , streamName DCR'nizde bildirilen akışla eşleşmelidir.
  • Bu kaynak, kullanıcılar DeployPushConnector düğmesini seçtiğinde dağıtım sırasında otomatik olarak oluşturulur.

İlk push bağlayıcınızı oluşturma

Bu örnekte, uygulamanızdan Sentinel'e güvenlik uyarıları gönderen basit bir anında iletme bağlayıcısı oluşturacaksınız.

Hedef: Uygulamanızdan Sentinel'e gerçek zamanlı olarak güvenlik uyarıları gönderme

Uygulamanız olay yapısını gönderir:

{
  "TimeGenerated": "2025-11-21T10:30:00Z",
  "EventSeverity": "Medium",
  "EventType": "LoginAlert",
  "UserName": "alice@contoso.com",
  "SourceIP": "192.168.1.100",
  "DeviceId": "device-12345",
  "AlertMessage": "Multiple failed login attempts detected"
}

Anında iletme bağlayıcısı oluşturmak için adım adım kılavuz

  1. Azure-Sentinel Deposunu kopyalama

    Resmi Azure-Sentinel deposunu yerel makinenize çatallayın ve kopyalayın. Bu depo paketleme araçlarını içerir ve standart çözüm yapısını sağlar.

    1. Depoyu kopyalama
      git clone https://github.com/<YOUR_FORK>/Azure-Sentinel.git

    2. Çözümler dizinine gidin cd Azure-Sentinel/Solutions
      Depo yapısı şunları içerir:

    • Araçlar/Create-Azure-Sentinel-Solution/V3/
    • createSolutionV3.ps1 paketleme betiğini içerir
    • Çözümler/ Bağlayıcı çözümünüzü oluşturacağınız yer
  2. Çözüm Klasör Yapınızı Oluşturun Standart adlandırma kuralını izleyerek Çözümler/ klasöründe yeni bir çözüm dizini oluşturun. Çözüm dizinleri oluşturma (Azure-Sentinel/Solutions/'dan)

    mkdir ContosoSecurityAlerts
    cd ContosoSecurityAlerts
    mkdir Data
    mkdir "Data Connectors"
    mkdir "Data Connectors/ContosoSecurityAlerts_ccf"
    

    Klasör yapınız aşağıdaki gibi görünür:

    Azure-Sentinel/
     └── Çözümler/
        └── ContosoSecurityAlerts/
            ├── Veri/
            └── Veri Bağlayıcıları/
                └── ContosoSecurityAlerts_ccf/

  3. Tablonuzu Tanımlama

    ContosoSecurityAlerts_ccf klasöründe, özel tablo tanımınızla table.json adlı bir dosya oluşturun:

    {
      "name": "ContosoSecurityAlerts_CL",
      "type": "Microsoft.OperationalInsights/workspaces/tables",
      "apiVersion": "2025-07-01",
      "properties": {
        "schema": {
          "name": "ContosoSecurityAlerts_CL",
          "columns": [
            {
              "name": "TimeGenerated",
              "type": "datetime"
            },
            {
              "name": "EventSeverity",
              "type": "string"
            },
            {
              "name": "EventType",
              "type": "string"
            },
            {
              "name": "UserName",
              "type": "string"
            },
            {
              "name": "SourceIP",
              "type": "string"
            },
            {
              "name": "DeviceId",
              "type": "string"
            },
            {
              "name": "AlertMessage",
              "type": "string"
            }
          ]
        }
      }
    }
    
  4. DCR oluşturma

    ContosoSecurityAlerts_ccf klasöründe, giriş akışını tanımlayan ve verileri tablonuza yönlendiren DCR.json adlı bir dosya oluşturun:

    {
      "name": "ContosoSecurityAlertsPushDCR",
      "apiVersion": "2021-09-01-preview",
      "type": "Microsoft.Insights/dataCollectionRules",
      "location": "[parameters('workspace-location')]",
      "properties": {
        "streamDeclarations": {
          "Custom-ContosoSecurityAlerts": {
            "columns": [
              {
                "name": "EventSeverity",
                "type": "string"
              },
              {
                "name": "EventType",
                "type": "string"
              },
              {
                "name": "UserName",
                "type": "string"
              },
              {
                "name": "SourceIP",
                "type": "string"
              },
              {
                "name": "DeviceId",
                "type": "string"
              },
              {
                "name": "AlertMessage",
                "type": "string"
              }
            ]
          }
        },
        "destinations": {
          "logAnalytics": [
            {
              "workspaceResourceId": "[variables('workspaceResourceId')]",
              "name": "clv2ws1"
            }
          ]
        },
        "dataFlows": [
          {
            "streams": [
              "Custom-ContosoSecurityAlerts"
            ],
            "destinations": [
              "clv2ws1"
            ],
            "transformKql": "source | extend TimeGenerated = now()",
            "outputStream": "Custom-ContosoSecurityAlerts_CL"
          }
        ],
        "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/    dataCollectionEndpoints/',parameters('workspace'))]"
      }
    }
    
  5. Bağlayıcı Tanımını Oluşturma

    ContosoSecurityAlerts_ccf klasöründe, kullanıcıların Sentinel'de bağlayıcıyla nasıl etkileşim kuracağını tanımlayan connectorDefinition.json adlı bir dosya oluşturun:

    {
        "name": "ContosoSecurityAlertsPush",
        "apiVersion": "2022-09-01-preview",
        "type": "Microsoft.SecurityInsights/dataConnectorDefinitions",
        "location": "[parameters('workspace-location')]",
        "kind": "Customizable",
        "properties": {
            "connectorUiConfig": {
                "id": "ContosoSecurityAlertsPush",
                "title": "Contoso Security Alerts (Push)",
                "publisher": "Contoso Corporation",
                "descriptionMarkdown": "The [Contoso Security Alerts](https://www.contoso.com/) connector provides the capability to push real-time security alerts from your   Contoso application directly into Microsoft Sentinel using the Codeless Connector Framework (CCF) Push pattern. This connector ingests alert severity, event  types, user information, and network details into a custom Log Analytics table for analysis, alerting, and visualization.",
                "graphQueries": [
                    {
                        "metricName": "Security Alerts",
                        "legend": "ContosoSecurityAlerts_CL",
                        "baseQuery": "ContosoSecurityAlerts_CL"
                    }
                ],
                "sampleQueries": [
                    {
                        "description": "All security alerts",
                        "query": "ContosoSecurityAlerts_CL\n | sort by TimeGenerated desc"
                    },
                    {
                        "description": "Critical and High severity alerts",
                        "query": "ContosoSecurityAlerts_CL\n | where EventSeverity in ('Critical', 'High')\n | sort by TimeGenerated desc"
                    }
                ],
                "dataTypes": [
                    {
                        "name": "ContosoSecurityAlerts_CL",
                        "lastDataReceivedQuery": "ContosoSecurityAlerts_CL\n| summarize Time = max(TimeGenerated)\n| where isnotempty(Time)"
                    }
                ],
                "connectivityCriteria": [
                    {
                        "type": "IsConnectedQuery",
                        "value": [
                            "ContosoSecurityAlerts_CL\n| summarize LastLogReceived = max(TimeGenerated)\n| project IsConnected = LastLogReceived > ago(7d)"
                        ]
                    }
                ],
                "availability": {
                    "status": 1
                },
                "permissions": {
                    "resourceProvider": [
                        {
                            "provider": "Microsoft.OperationalInsights/workspaces",
                            "permissionsDisplayText": "read and write permissions are required.",
                            "providerDisplayName": "Workspace",
                            "scope": "Workspace",
                            "requiredPermissions": {
                                "write": true,
                                "read": true,
                                "delete": true
                            }
                        }
                    ],
                    "customs": [
                        {
                            "name": "Microsoft Entra",
                            "description": "Permission to create an app registration in Microsoft Entra ID. Typically requires Entra ID Application Developer role or higher."
                        },
                        {
                            "name": "Microsoft Azure",
                            "description": "Permission to assign Monitoring Metrics Publisher role on data collection rule (DCR). Typically requires Azure RBAC Owner or User   Access Administrator role."
                        }
                    ]
                },
                "instructionSteps": [
                    {
                        "title": "1. Create ARM Resources and Provide the Required Permissions",
                        "description": "This connector enables your Contoso application to push security alerts directly to Microsoft Sentinel via the Azure Monitor Ingestion  API.",
                        "instructions": [
                            {
                                "type": "Markdown",
                                "parameters": {
                                    "content": "#### Automated Configuration and Secure Data Ingestion with Entra Application \nClicking on \"Deploy\" will trigger the creation    of a Log Analytics table and a Data Collection Rule (DCR). \nIt will then create an Entra application, link the DCR to it, and set the     entered secret in the application. This setup enables data to be sent securely to the DCR using an Entra token."
                                }
                            },
                            {
                                "type": "DeployPushConnectorButton",
                                "parameters": {
                                    "label": "Deploy Contoso Push connector resources",
                                    "applicationDisplayName": "Contoso Security Alerts Push Connector Application"
                                }
                            }
                        ]
                    },
                    {
                        "title": "2. Configure Your Contoso Application",
                        "description": "Use the following parameters to configure your Contoso application to push security alerts to the workspace.",
                        "instructions": [
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Tenant ID (Directory ID)",
                                    "fillWith": [
                                        "TenantId"
                                    ]
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Entra App Registration Application ID",
                                    "fillWith": [
                                        "ApplicationId"
                                    ],
                                    "placeholder": "Deploy push connector to get the App Registration Application ID"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Entra App Registration Secret",
                                    "fillWith": [
                                        "ApplicationSecret"
                                    ],
                                    "placeholder": "Deploy push connector to get the App Registration Secret"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Data Collection Endpoint Uri",
                                    "fillWith": [
                                        "DataCollectionEndpoint"
                                    ],
                                    "placeholder": "Deploy push connector to get the Data Collection Endpoint Uri"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Data Collection Rule Immutable ID",
                                    "fillWith": [
                                        "DataCollectionRuleId"
                                    ],
                                    "placeholder": "Deploy push connector to get the Data Collection Rule Immutable ID"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Stream Name",
                                    "value": "Custom-ContosoSecurityAlerts"
                                }
                            },
                            {
                                "type": "Markdown",
                                "parameters": {
                                    "content": "#### Configure Contoso Application\nUpdate your Contoso application configuration with the above credentials to enable security     alert push to Microsoft Sentinel.\n\nExample configuration:\njson\n{\n \"azure\": {\n \"tenant_id\": \"<Tenant ID>\",\n \"client_id\":  \"<Application ID>\",\n \"client_secret\": \"<Application Secret>\",\n \"dce_endpoint\": \"<Data Collection Endpoint Uri>\",\n   \"dcr_immutable_id\": \"<Data Collection Rule Immutable ID>\",\n \"stream_name\": \"Custom-ContosoSecurityAlerts\"\n }\n}\n"
                                }
                            }
                        ]
                    }
                ]
            }
        }
    }
    
  6. Veri Bağlayıcısı Yapılandırmasını Oluşturma

    ContosoSecurityAlerts_ccf klasöründe, bağlayıcı tanımını dağıtılan kaynaklara bağlayan dataConnector.json adlı bir dosya oluşturun:

    {
      "name": "ContosoSecurityAlertsPushConnectorPolling",
      "apiVersion": "2024-09-01",
      "type": "Microsoft.SecurityInsights/dataConnectors",
      "kind": "Push",
      "properties": {
        "connectorDefinitionName": "ContosoSecurityAlertsPush",
        "dcrConfig": {
          "streamName": "Custom-ContosoSecurityAlerts",
          "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]",
          "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]"
        },
        "auth": {
          "type": "Push",
          "AppId": "[[parameters('auth').appId]",
          "ServicePrincipalId": "[[parameters('auth').servicePrincipalId]"
        },
        "request": {
          "RetryCount": 1
        },
        "response": {
          "eventsJsonPaths": [
            "$"
          ]
        }
      }
    }
    
  7. Çözüm Meta Veri Dosyaları Oluşturma

    1. Solution_ContosoSecurityAlerts.json Veri klasöründe çözüm ayrıntılarınızla oluşturun Solution_ContosoSecurityAlerts.json :

      {
           "Name": "ContosoSecurityAlerts",
           "Author": "Contoso Corporation - support@contoso.com",
           "Logo": "<svg width=\"75px\" height=\"75px\" viewBox=\"0 0 75 75\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"75\" height=\"75\" fill=\"#FF6B35\"/><text   x=\"37.   5\" y=\"45\" font-family=\"Arial\" font-size=\"18\" fill=\"white\" text-anchor=\"middle\" font-weight=\"bold\">CONTOSO</text></svg>",
           "Description": "The Contoso Security Alerts solution provides real-time security alert ingestion from your Contoso application into Microsoft Sentinel using the       Codeless Connector Framework (CCF) Push pattern. Your application pushes alert severity, event types, user information, and network details directly to Azure   Monitor     for analysis, alerting, and visualization.",
           "Data Connectors": [
                "Data Connectors/ContosoSecurityAlerts_ccf/connectorDefinition.json"
           ],
           "BasePath": "C:\\GitHub\\Azure-Sentinel\\Solutions\\ContosoSecurityAlerts",
           "Version": "1.0.0",
           "Metadata": "SolutionMetadata.json",
           "TemplateSpec": true,
           "Is1PConnector": false
      }
      

      Important

      Kritik alan gereksinimleri:

      • BasePath: Azure-Sentinel deposunun gerçek yerel yolunuza güncelleyin
      • Metadata: SolutionMetadata.json (6B. Adımda oluşturulmuş) referans gösterilmelidir
      • Version: Anlamsal sürüm oluşturma, örneğin, 3.0.0
      • TemplateSpec: Her zaman true için Content Hub çözümleri
      • Is1Pconnector: İş ortağı/özel bağlayıcılar için false olarak kurulacak şekilde ayarlayın
    2. Çözüm kökünde SolutionMetadata.json oluşturma

      ContosoSecurityAlerts klasöründe çözüm kök dizininde (Veri klasörüyle aynı düzeyde) SolutionMetadata.json oluşturun:

      {
        "publisherId": "contoso",
        "offerId": "contoso-security-alerts",
        "firstPublishDate": "2025-01-01",
        "lastPublishDate": "2025-01-01",
        "providers": [
           "Contoso"
        ],
        "categories": {
           "domains": [
              "Security - Threat Protection",
              "Security - Cloud Security"
           ]
        },
        "support": {
           "name": "Contoso Corporation",
           "tier": "Partner",
           "link": "https://www.contoso.com/support"
        }
      }
      

      Content Hub paketlemesi için SolutionMetadata.json dosyası gerekir:

      • Paketleme aracı bu dosyayı çözüm kökünde bekler
      • Content Hub dağıtımı için market meta verilerini içerir
    3. Çözüm kökünde ReleaseNotes.md oluşturma

      Sürüm Değiştirme Tarihi (DD-MM-YYYY) Değişiklik Geçmişi
      3.0.0 DD-MM-YYYY Örnek çözüm

    Doğrulama denetim listesi

    Sonraki adıma geçmeden önce şunları doğrulayın:

    • Klasör adında boşluk yok, örneğin ContosoSecurityAlerts
    • Name Solution_ContosoSecurityAlerts.json alanındaki alan, klasör adıyla tam olarak eşleşir
    • SolutionMetadata.json çözüm kökünde var (Veri klasöründe yok)
    • BasePath gerçek yerel Azure-Sentinel depo yolunu gösterir
    • Metadata alanı "SolutionMetadata.json" dosyasına referans veriyor
    • publisherId ve offerId iki dosya arasında eşleşir
  8. Çözüm yapınızı doğrulama

    Klasör yapınızın gerekli düzen ile tüm dosyaları yerinde eşleştirdiğini onaylayın:

    Azure-Sentinel/
    └── Solutions/
         └── ContosoSecurityAlerts/                         Folder name (no spaces)
              ├── Data/
              │   └── Solution_ContosoSecurityAlerts.json    From Step 7A
              ├── SolutionMetadata.json                      From Step 7B (at root)
              ├── ReleaseNotes.md                            From Step 7C
              └── Data Connectors/
                    └── ContosoSecurityAlerts_ccf/
                         ├── table.json                         From Step 3
                         ├── DCR.json                           From Step 4
                         ├── connectorDefinition.json           From Step 5
                         └── dataConnector.json                 From Step 6
    
  9. Çözümünüzü paketleme

    ARM dağıtım şablonunu oluşturmak için createSolutionV3.ps1 paketleme aracını kullanın.

    # Navigate to the packaging tools directory (from Azure-Sentinel repository root)
    cd Tools/Create-Azure-Sentinel-Solution/V3
    
    # Run the packaging tool
    # When prompted for "Enter solution data folder path:", provide:
    # <REPO_ROOT>Solutions/ContosoSecurityAlerts/Data (Note! This path is absolute)
    .\createSolutionV3.ps1
    

    Betik otomatik olarak:

    • Veri/ klasör yapınızı doğrular
    • Bağlayıcı nesneleri işler

    Beklenen çıkış:

    Paketleme betiği, başarısız arm-ttk (Azure Resource Manager Şablonu Araç Seti) doğrulamasını gösterir. CCF Anında İletme bağlayıcıları için bu hata beklenir ve normaldir:

    Failed arm-ttk (Test-AzTemplate): Package
    Failed arm-ttk (Test-AzTemplate) on solutions: Package
    ************Validating if Package Json files are valid or not***************
    File Solutions\ContosoSecurityAlerts\Package\createUiDefinition.json is a valid Json file!
    File Solutions\ContosoSecurityAlerts\Package\mainTemplate.json is a valid Json file!
    File Solutions\ContosoSecurityAlerts\Package\testParameters.json is a valid Json file!
    

    Geçerli dosyaları onaylayan üç JSON doğrulama iletisi görürseniz paketleme başarılı oldu. CCF Push bağlayıcıları için arm-ttk hatasını yoksayabilirsiniz.

    Daha fazla bilgi için Azure-Sentinel Çözüm Araçları belgelerine bakın.

  10. Çözüm paketini dağıtma

    Oluşturulan ARM şablonunu (Paket/mainTemplate.json) Azure aboneliğinize dağıtın.

    1. Azure portalında Özel şablon dağıtma araması yapın
    2. Düzenleyicide Kendi şablonunuzu derleyin'i seçin
    3. Dosya yükle'yi seçin ve çıkış klasörünüzden seçin Package/mainTemplate.json
    4. Kaydet seçeneğini seçin
    5. Dağıtım parametrelerini doldurun:
      • Abonelik: Azure aboneliğiniz
      • Kaynak Grubu: Sentinel çalışma alanınızı içeren kaynak grubu
      • Bölge: Sentinel çalışma alanınızla aynı bölge
      • Çalışma alanı: Log Analytics çalışma alanınızın adı
    6. Gözden geçir ve oluştur'u ve ardından Oluştur'u seçin

    Bu dağıtım bağlayıcıyı Microsoft Sentinel veri bağlayıcıları galerinizde kullanılabilir hale getirir.

    Ayrıntılı adımlar için bkz. [Hızlı Başlangıç: Azure portalını kullanarak ARM şablonları oluşturma ve dağıtma](/azure/azure-resource-manager/templates/ quickstart-create-templates-use-the-portal).

  11. Veri bağlayıcısını etkinleştirme

    Çözüm paketini dağıtdıktan sonra bağlayıcının kaynakları sağlamasına ve kimlik bilgileri oluşturmasına olanak tanıyın.

    1. Azure portalında Microsoft Sentinel çalışma alanınıza gidin
    2. Yapılandırma>Verileri bağlayıcılarına gidin
    3. Contoso Güvenlik Uyarıları (Anında İletme) için arama yapın ve seçin
    4. Bağlayıcı sayfasını aç'ı seçin
    5. Contoso Güvenlik Uyarıları bağlayıcısını dağıt düğmesini seçin
    6. Dağıtımın tamamlanmasını bekleyin (kimlik bilgileriyle özel tablo, DCR, DCE, Entra uygulaması oluşturur)
    7. Görüntülenen bağlantı ayrıntılarını kopyalayın:
      • Kiracı Kimliği
      • Uygulama (İstemci) Kimliği
      • İstemci Parolası
      • Veri Toplama Uç Noktası URI'si
      • Veri Toplama Kuralı Değişmez Kimlik
      • Akış Adı: Custom-ContosoSecurityAlerts
  12. Uygulamanızı yapılandırma

    Uygulama kodunuzu 10. Adım'da yer alan kimlik bilgileri ve kaynak ayrıntılarıyla güncelleştirin. Kod, Azure İzleyici ile kimlik doğrulaması yapmak için OAuth 2.0 istemci kimlik bilgileri akışını kullanır.

    Caution

    Kimlik bilgilerinizi koruyun: Kimlik bilgilerini (Kiracı Kimliği, Uygulama Kimliği, İstemci Gizli Anahtarı) doğrudan uygulama kodunuzda sabit kodlamayın veya kaynak denetimine işlemeyin. Aşağıdakiler gibi güvenli kimlik bilgileri depolama çözümleri kullanın:

    • Üretim uygulamaları için Azure Key Vault
    • Ortam değişkenleri veya yapılandırma dosyaları (kaynak denetiminden hariç)
    • Uygun durumlarda yönetilen kimlikler
    • Gizlilik yönetimi araçları, durağan durumdaki kimlik bilgilerini şifreler.

    Python Örnek Uygulama Kodu:

    Aşağıdaki örnekte <Your-Tenant-ID> gibi yer tutucu değerler kullanılmaktadır. Bu değerleri gerçek kimlik bilgilerinize güvenli referanslarla değiştirin.

    import requests
    import json
    from datetime import datetime, timezone
    
    # Connection details from Step 11
    
    tenant_id = "<Your-Tenant-ID>"
    app_id = "<Your-Application-ID>"
    app_secret = "<Your-Client-Secret>"
    dce_uri = "<Your-DCE-URI>"
    dcr_immutable_id = "<Your-DCR-Immutable-ID>"
    stream_name = "Custom-ContosoSecurityAlerts"
    
    
    **Get OAuth token**
    
    token_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
    token_data = {
         "client_id": app_id,
         "scope": "https://monitor.azure.com//.default",
         "client_secret": app_secret,
         "grant_type": "client_credentials"
    }
    token_response = requests.post(token_url, data=token_data)
    access_token = token_response.json()["access_token"]
    
    
    # Create event matching your table schema
    
    event = [{
         "TimeGenerated": datetime.now(timezone.utc).isoformat(),
         "EventSeverity": "Medium",
         "EventType": "LoginAlert",
         "UserName": "alice@contoso.com",
         "SourceIP": "192.168.1.100",
         "DeviceId": "device-12345",
         "AlertMessage": "Multiple failed login attempts detected"
    }]
    
    
    # Send to Sentinel
    
    headers = {
         "Authorization": f"Bearer {access_token}",
         "Content-Type": "application/json"
    }
    upload_url = f"{dce_uri}/dataCollectionRules/{dcr_immutable_id}/streams/{stream_name}?api-version=2023-01-01"
    response = requests.post(upload_url, headers=headers, json=event)
    
    print(f"Status: {response.status_code}")
    print("Security alert sent to Sentinel!")
    
  13. Verilerinizi sorgulama

    Uyarı gönderdikten sonra Sentinel'de sorgu oluşturun. İlk alım için 5-10 dakika izin verin.

    // View all recent alerts
    ContosoSecurityAlerts_CL
    | where TimeGenerated > ago(1h)
    | order by TimeGenerated desc
    
    // High severity alerts
    ContosoSecurityAlerts_CL
    | where EventSeverity == "High"
    | project TimeGenerated, EventType, UserName, SourceIP, AlertMessage
    
    // Alert summary by severity
    ContosoSecurityAlerts_CL
    | where TimeGenerated > ago(7d)
    | summarize Count=count() by EventSeverity
    

CCF Anında İletme bağlayıcılarını anladığınıza göre aşağıdaki adımları uygulayın:

  1. Veri şemanızı tasarlama - Göndermek istediğiniz olayları ve bunların alanlarını belirleyin.
  2. Bağlayıcı yapıtları oluşturma - Dört JSON dosyasını (tablo, DCR, bağlayıcı tanımı, veri bağlayıcısı) oluşturun.
  3. Çözüm yapısını düzenleme - Düzgün adlandırma ile Veri/ ve Veri Bağlayıcıları/ klasörlerini ayarlayın.
  4. Çözümünüzü paketleme - Dağıtım şablonları oluşturmak için kullanın createSolutionV3.ps1 .
  5. Dağıtma ve test etme - Sentinel çalışma alanınıza dağıtın ve veri akışını doğrulayın.
  6. Uygulamanızla tümleştirme - Olayları gerçek zamanlı olarak göndermek için kod ekleyin.
  7. Uyarılar ve çalışma kitapları oluşturma - Verilerinizi güvenlik izleme için kullanın.

Ek kaynaklar

CCF belgeleri

Azure İzleyici ve veri toplama

Kimlik doğrulaması ve güvenlik

Microsoft Sentinel

Yardım alın

  • ISV iş ortaklarının tümleştirme oluşturması için şu bağlantılara başvurun: azuresentinelpartner@microsoft.com
  • Teknik sorular için Microsoft Soru-Cevap'ı 'azure-sentinel' etiketiyle kullanın.