Microsoft Sentinel için kodsuz veri çekme bağlayıcısı oluşturma

Kodsuz Bağlayıcı Çerçevesi (CCF), iş ortaklarına, ileri düzey kullanıcılara ve geliştiricilere Microsoft Sentinel'e veri almak için özel bağlayıcılar oluşturma olanağı sağlar.

Bağlayıcılar, veri kaynağına ve geliştiricinin tercihine bağlı olarak çekme/yoklama bağlayıcıları veya itme bağlayıcıları olabilir. Bu makale, yoklama tabanlı olan ve API'ler aracılığıyla düzenli aralıklarla veri getiren çekme bağlayıcılarına odaklanır. Gönderim bağlayıcıları hakkında bilgi için bkz. Microsoft Sentinel için kodsuz gönderim bağlayıcısı oluşturma.

CCF kullanılarak oluşturulan bağlayıcılar tamamen SaaS'dir ve hizmet yüklemeleri için gerekli değildir. Bunlar ayrıca sistem durumu izleme ve Microsoft Sentinel'den tam destek içerir.

CCF bağlayıcınızı oluşturmak ve veri kaynağınızı Microsoft Sentinel bağlamak için aşağıdaki adımları kullanın:

  • Veri bağlayıcısını oluşturma
  • ARM şablonunu oluşturma
  • Bağlayıcıyı dağıtın
  • Microsoft Sentinel'i veri kaynağınıza bağlama ve veri alımına başlama

Her adım, adım adım oluşturabileceğiniz bir örnek kodsuz bağlayıcı içerir.

Yazılım geliştirme iş ortağıysanız ve CCF veri bağlayıcısı oluşturmak için desteğe ihtiyacınız varsa yardım için adresinden Microsoft Sentinel İş Ortakları ile AzureSentinelPartner@microsoft.com iletişime geçin.

Önceki CCF sürümüne göre iyileştirmeler

CCF'nin ilk sürümü Ocak 2022'de Microsoft Tech Community blogunda duyuruldu. O zamandan beri platform geliştirilmiştir ve eski sürüm artık önerilmez. CCF'nin bu yeni sürümünde aşağıdaki önemli geliştirmeler vardır:

  1. Çeşitli kimlik doğrulaması ve sayfalandırma türleri için daha iyi destek.

  2. Standart veri toplama kurallarını (DCR) destekler.

  3. Kodsuz bağlayıcının kullanıcı arabirimi ve bağlantı yapılandırma bölümleri artık ayrıdır. Bu, daha önce mümkün olmayan birden çok bağlantıya sahip bağlayıcıların oluşturulmasına olanak tanır.

Prerequisites

Bağlayıcı oluşturmadan önce veri kaynağınızı ve Microsoft Sentinel'in nasıl bağlanması gerektiğini anlayın.

  1. Veri Toplama Uç Noktası (DCE)

    DCE, DCR için bir gereksinimdir. Log Analytics çalışma alanı DCR dağıtımı başına yalnızca bir DCE oluşturulur. Bir Microsoft Sentinel çalışma alanı için dağıtılan her DCR aynı DCE'yi kullanır. Bir tane oluşturma veya yeni bir taneye ihtiyacınız olup olmadığı hakkında daha fazla bilgi için Azure İzleyici'de Veri Toplama Uç Noktaları kısmına bakın.

  2. Çıkış tablolarının şeması.

    Veri akışınızın şeklini ve çıkış tablosuna eklemek istediğiniz alanları anlamak önemlidir. Veri kaynağı belgelerinize başvurun veya yeterli çıktı örneklerini analiz edin.

Veri Bağlayıcısı API başvurusunda aşağıdaki bileşenleri araştırın ve bunlar için desteği doğrulayın:

  1. Veri kaynağına HTTP isteği ve yanıt yapısı

  2. Veri kaynağında kimlik doğrulaması gerekir.
    Örneğin, veri kaynağınız sertifikayla imzalanan bir belirteç gerektiriyorsa veri bağlayıcısı API başvurusu sertifika kimlik doğrulamasının desteklenmediğini belirtir.

  3. Veri kaynağına sayfalandırma seçenekleri

API'leri test etme

Bileşenlerinizi aşağıdakilerden biri gibi bir API test aracıyla test edin:

Caution

Kimlik bilgileri, gizli diziler, erişim belirteçleri, API anahtarları ve diğer benzer bilgiler gibi hassas verileriniz olduğu senaryolarda, verilerinizi gerekli güvenlik özellikleriyle koruyan, çevrimdışı veya yerel olarak çalışan, verilerinizi bulutla eşitlemeyen ve çevrimiçi bir hesapta oturum açmanızı gerektirmeyen bir araç kullandığınızdan emin olun. Bu şekilde, hassas verileri herkese açık hale getirmekle ilgili riski azaltırsınız.

Veri bağlayıcısını oluşturma

Tip

Bağımsız Yazılım Satıcısı (ISV) iseniz ve Microsoft Sentinel Kodsuz Bağlayıcı Çerçevesi'ni kullanarak Microsoft Sentinel tümleştirmesi oluştururken desteğe ihtiyacınız varsa, Microsoft App Assure ekibi size yardımcı olabilir. App Assure ekibiyle etkileşim kurmak için adresine azuresentinelpartner@microsoft.combir e-posta gönderin.

CCF veri bağlayıcısını oluşturmak için gereken dört bileşen vardır.

  1. Çıkış tablosu tanımı
  2. Veri Toplama Kuralı (DCR)
  3. Veri bağlayıcısı kullanıcı arabirimi
  4. Veri bağlayıcısı bağlantı kuralları

Her bileşenin oluşturma ve doğrulama işleminin ayrıntılarını içeren bir bölümü vardır. ARM şablonunun son paketlemesi için her bileşenden JSON alın.

Çıkış tablosu tanımı

Tip

Verileriniz yalnızca standart Log Analytics tablolarına alınıyorsa bu adımı atlayın. Standart tablolara örnek olarak CommonSecurityLog ve ASimDnsActivityLogs verilebilir. Desteklenen standart veri türlerinin tam listesi hakkında daha fazla bilgi için bkz . Özel veri bağlayıcıları için veri dönüştürme desteği.

Veri kaynağınız standart bir tablonun şemasına uymuyorsa iki seçeneğiniz vardır:

  • Tüm veriler için özel tablo oluşturma
  • Bazı veriler için özel tablo oluşturma ve uyumlu verileri standart tabloya bölme

DCR ile birlikte özel tablo oluşturmak için basit bir yöntem için Log Analytics kullanıcı arabirimini kullanın. Tablolar API'sini veya başka bir programlama yöntemini kullanarak özel tablo oluşturursanız, soneki _CL tablo adına el ile ekleyin. Daha fazla bilgi için bkz . Özel tablo oluşturma.

Verilerinizi birden fazla tabloya bölme hakkında daha fazla bilgi için örnek verilere ve bu veriler için oluşturulan örnek özel tabloya bakın.

Veri toplama kuralı

Veri toplama kuralları (DCR) Azure İzleyici'de veri toplama işlemini tanımlar. DCR'ler hangi verilerin toplanması gerektiğini, bu verilerin nasıl dönüştürüleceğini ve bu verilerin nereye gönderileceğini belirler.

  • Veri bağlayıcısı başına dağıtılan tek bir DCR vardır.
  • DCR'nin aynı bölgede karşılık gelen bir DCE'ye sahip olması gerekir.
  • CCF veri bağlayıcısı dağıtıldığında, henüz yoksa DCR oluşturulur.

Bu makalelerde DCR'ler hakkında en son bilgilere başvurun:

DCE oluşturmayı gösteren ve özel tablo ile DCR oluşturmak için örnek verileri kullanmayı içeren bir öğretici için, Öğretici: Günlük alma API'si (Azure portalı) ile Azure İzleyici Günlüklerine veri gönderme bölümüne bakın. Verilerin DCR'nizle tablonuza doğru şekilde alındığını doğrulamak için bu öğreticideki işlemi kullanın.

Birden çok veri akışıyla karmaşık bir DCR oluşturmayı anlamak için DCR örnek bölümüne bakın.

Veri bağlayıcısı kullanıcı arabirimi

Bu bileşen, Microsoft Sentinel Veri Bağlayıcı Galerisi'nde veri bağlayıcısının kullanıcı arabirimi bölümünü işler. Her veri bağlayıcısı yalnızca bir kullanıcı arabirimi tanımına sahip olabilir.

Veri Bağlayıcısı Tanım API'siyle veri bağlayıcısı kullanıcı arabirimini oluşturun. API öğelerini daha ayrıntılı açıklamak için Veri bağlayıcısı tanımları başvurusunu ek olarak kullanın.

Notlar:

  1. API yoklama bağlayıcısının kind özelliği her zaman Customizable olmalıdır.
  2. Bu, bir API yoklama bağlayıcısı türü olduğundan, connectivityCriteria türünü hasDataConnectors olarak ayarlayın.
  3. Örnek instructionSteps , türünde ConnectionToggleButtonbir düğme içerir. Bu düğme, belirtilen bağlantı parametrelerine göre veri bağlayıcısı kurallarının dağıtımını tetiklemeye yardımcı olur.

Veri bağlayıcısı kullanıcı arabirimini oluşturmak ve veri bağlayıcıları galerisinde doğrulamak üzere veri bağlayıcısı tanımları API'sini çağırmak için bir API test aracı kullanın.

Bir örnekten bilgi edinmek için Veri bağlayıcısı tanımları başvuru örneği bölümüne bakın.

Veri bağlantısı kuralları

Şu anda CCF veri bağlayıcınızı tanımlamak için üç tür veri bağlantısı kuralı vardır.

Bağlantı kurallarını ve önceki bileşenleri birleştiren veri bağlayıcısını oluşturmak üzere veri bağlayıcısı API'sini çağırmak için bir API test aracı kullanın. Bağlayıcının artık kullanıcı arabirimine bağlı olduğunu doğrulayın.

Gizli girişin güvenliğini sağlama

CCF veri bağlayıcınız tarafından kullanılan kimlik doğrulaması her ne olursa olsun, gizli bilgilerin güvende tutulduğundan emin olmak için bu adımları uygulayın. Amaç, dağıtım geçmişinizde okunabilir gizli nesneler bırakmadan kimlik bilgilerini ARM şablonundan CCF'ye aktarmaktır.

Bağlayıcı kullanıcı arabiriminde kimlik bilgisi etiketi oluşturma

Veri bağlayıcısı tanımı, güvenlik kimlik bilgilerini soran bir kullanıcı arabirimi öğesi oluşturur. Örneğin, veri bağlayıcınız OAuth ile bir günlük kaynağında kimlik doğrulaması yaparsa, veri bağlayıcısı tanımı bölümünüz yönergelerdeki türü içerir OAuthForm . Bu işlem ARM şablonunu kimlik bilgilerini isteyecek şekilde ayarlar.

"instructions": [
    {
        "type": "OAuthForm",
        "parameters": {
        "UsernameLabel": "Username",
        "PasswordLabel": "Password",
        "connectButtonLabel": "Connect",
        "disconnectButtonLabel": "Disconnect"
        }
    }
],

Gizli bilgiyi depola

ARM dağıtım şablonunun bir bölümü, veri bağlayıcısını dağıtan yöneticinin parolayı girmesi için bir yer sağlar. Gizli bilgileri dağıtımdan sonra okunamayan bir nesnede güvenli tutmak için kullanın securestring . Daha fazla bilgi için bkz . Parametreler için güvenlik önerileri.

"mainTemplate": {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "[variables('dataConnectorCCPVersion')]",
    "parameters": {
        "Username": {
            "type": "securestring",
            "minLength": 1,
            "metadata": {
                "description": "Enter the username to connect to your data source."
        },
        "Password": {
            "type": "securestring",
            "minLength": 1,
            "metadata": {
                "description": "Enter the API key, client secret or password required to connect."
            }
        },
    }
}

Securestring nesnelerini kullanma

Son olarak CCF, veri bağlayıcısı bölümündeki kimlik bilgisi nesnelerini kullanır.

"auth": {
    "type": "OAuth2",
    "ClientSecret": "[[parameters('Password')]",
    "ClientId": "[[parameters('Username')]",
    "GrantType": "client_credentials",
    "TokenEndpoint": "https://api.contoso.com/oauth/token",
    "TokenEndpointHeaders": {
        "Content-Type": "application/x-www-form-urlencoded"
    },
    "TokenEndpointQueryParameters": {
        "grant_type": "client_credentials"
    }
}

Note

Kimlik bilgisi nesnesinin "ClientSecret": "[[parameters('Password')]", garip söz dizimi bir yazım hatası değildir. Parametreleri de kullanan dağıtım şablonunu oluşturmak için, bu bölümdeki parametrelerden ek bir başlangıçla[ kaçış yapın. Bu, parametrelerin bağlayıcıyla kullanıcı etkileşimini temel alan bir değer atamasına olanak tanır.

Daha fazla bilgi için bkz Şablon ifadeleri kaçış karakterleri.

Dağıtım şablonunu oluşturma

Kılavuz olarak örnek şablon kodu örneklerini kullanarak bir Azure Kaynak Yönetimi (ARM) şablonunu el ile paketle. Bu kod örnekleri, birlikte birleştirmeniz gereken ARM şablonu bölümlerine bölünür.

Google Cloud Platform (GCP) CCF veri bağlayıcısı oluşturuyorsanız örnek GCP CCF şablonunu kullanarak dağıtım şablonunu paketleyin. GCP CCF şablonunu doldurma hakkında bilgi için bkz. GCP veri bağlayıcısı bağlantı kuralları başvurusu.

Örnek şablonlara ek olarak, Microsoft Sentinel içerik hub'ında bulunan yayımlanmış çözümler, veri bağlayıcıları için CCF'yi kullanır. Bileşenleri bir ARM şablonuna birleştirme hakkında daha fazla örnek olarak aşağıdaki çözümleri gözden geçirin.

RestApiPoller CCF veri bağlayıcısı örnekleri

GCP CCF veri bağlayıcısı örnekleri

Bağlayıcıyı dağıtın

Kodsuz bağlayıcınızı özel şablon olarak dağıtın.

Tip

Önceki adımlarda oluşturduğunuz kaynakları silin. DCR ve özel tablo dağıtımla oluşturulur. Dağıtmadan önce bu kaynakları kaldırmazsanız, şablonunuzu doğrulamak daha zordur.

  1. ARM dağıtım şablonunun içeriğini kopyalayın.
  2. Hızlı Başlangıç: Azure portalını kullanarak ARM şablonları oluşturma ve dağıtma makalesindeki Şablon düzenleme ve dağıtma yönergelerini izleyin.

Günlüğe kaydetme kaynağı için ağ yalıtımını koruma

Eğer günlük kaynağınız ağ izolasyonu gerektiriyorsa, CCF tarafından kullanılan genel IP adreslerinin izin listesini yapılandırın.

Azure sanal ağları, ağ erişim denetimlerini tanımlamak için hizmet etiketlerini kullanır. CCF için bu hizmet etiketi Scuba'dır.

Scuba hizmet etiketi ile ilgili mevcut IP aralığını bulmak için Hizmet Etiketi Keşif API'sini kullanma konusuna bakın.

Kodsuz bağlayıcıyı doğrulama

Kodsuz bağlayıcınızı veri bağlayıcısı galerisinde görüntüleyin. Veri bağlayıcısını açın ve bağlanmak için gereken tüm kimlik doğrulama parametrelerini tamamlayın. Başarıyla bağlandıktan sonra DCR ve özel tablolar oluşturulur. Kaynak grubunuzdaki DCR kaynağını ve günlük analizi çalışma alanından tüm özel tabloları görüntüleyin.

Note

Verilerin alımının başlaması 30 dakika kadar sürebilir.

Example

Kodsuz bağlayıcı oluşturma adımlarının her biri aşağıdaki örnek bölümlerde gösterilir.

Birden fazla tabloya veri alımıyla karmaşık bir veri kaynağını göstermek için, bu örnekte bir çıkış tablosu şeması ve birden çok çıkış akışına sahip bir DCR bulunur. DCR örneği bunları KQL dönüşümleriyle birlikte bir araya getirir. Veri bağlayıcısı kullanıcı arabirimi tanımı ve bağlantı kuralları örnekleri bu örnek veri kaynağından devam ediyor. Son olarak çözüm şablonu, örnek CCF veri bağlayıcısının nasıl oluşturulacağını uçtan uca göstermek için tüm bu örnek bileşenleri kullanır.

Örnek veriler

Veri kaynağı, uç noktasına bağlanırken aşağıdaki JSON'u döndürür.

[
        {
        "ts": "3/6/2023 8:15:15 AM",
        "eventType": "Alert",
        "deviceMac": "bc:27:c6:21:1c:70",
        "clientMac": "",
        "srcIp": "10.12.11.106",
        "destIp": "121.93.178.13",
        "protocol": "tcp/ip",
        "priority": "0",
        "message": "This is an alert message"
        },
        {
        "ts": "3/6/2023 8:14:54 AM",
        "eventType": "File",
        "srcIp": "178.175.128.249",
        "destIp": "234.113.125.105",
        "fileType": "MS_EXE",
        "fileSizeBytes": 193688,
        "disposition": "Malicious"
        }
]

Bu yanıt eventType içerir. Dosya olayları normalleştirilmiş standart tablo olan AsimFileEventLogs'a alınırken, uyarı olayları özel bir tabloya alınmalıdır.

Örnek özel tablo

Bu tablonun yapısı hakkında daha fazla bilgi için bkz . Tablolar API'si. Özel günlük tablosu adlarının sonunda _CL eki olmalıdır.

{
"properties": {
    "schema": {
        "name": "ExampleConnectorAlerts_CL",
        "columns": [
        {
          "name": "TimeGenerated",
          "type": "datetime"
        },
        {
          "name": "SourceIP",
          "type": "string"
        },
        {
          "name": "DestIP",
          "type": "string"
        },
        {
          "name": "Message",
          "type": "string"
        },
        {
          "name": "Priority",
          "type": "int"
        }
        ]
      }
    }
}

Örnek veri toplama kuralı

Aşağıdaki DCR, örnek veri kaynağını kullanarak tek bir akış Custom-ExampleConnectorInput tanımlar ve çıkışı iki tabloya dönüştürür.

  1. İlk veri akışı eventType = Uyarıyı özel ExampleConnectorAlerts_CL tabloya yönlendirir.
  2. İkinci veri akışıeventType normalleştirilmiş standart tabloya = yönlendirirASimFileEventLogs.

Bu örneğin yapısı hakkında daha fazla bilgi için bkz . Veri toplama kuralının yapısı.

Bu DCR'yi bir test ortamında oluşturmak için Veri Toplama Kuralları API'sini izleyin. içindeki {{double curly braces}} örneğin öğeleri, API test aracıyla kullanım kolaylığı için değer gerektiren değişkenleri gösterir. ARM şablonunda bu kaynağı oluşturduğunuzda, burada ifade edilen değişkenler parametrelerle değiştirilir.

{
  "location": "{{location}}",
  "properties": {
    "dataCollectionEndpointId": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Insights/dataCollectionEndpoints/{{dataCollectionEndpointName}}",
    "streamDeclarations": {
      "Custom-ExampleConnectorInput": {
        "columns": [
          {
            "name": "ts",
            "type": "datetime"
          },
          {
            "name": "eventType",
            "type": "string"
          },
          {
            "name": "deviceMac",
            "type": "string"
          },
          {
            "name": "clientMac",
            "type": "string"
          },
          {
            "name": "srcIp",
            "type": "string"
          },
          {
            "name": "destIp",
            "type": "string"
          },
          {
            "name": "protocol",
            "type": "string"
          },
          {
            "name": "priority",
            "type": "string"
          },
          {
            "name": "message",
            "type": "string"
          },
          {
            "name": "fileType",
            "type": "string"
          },
          {
            "name": "fileSizeBytes",
            "type": "int"
          },
          {
            "name": "disposition",
            "type": "string"
          }
        ]
      }
    },
    "destinations": {
      "logAnalytics": [
        {
          "workspaceResourceId": "/subscriptions/{{subscriptionId}}/resourcegroups/{{resourceGroupName}}/providers/microsoft.operationalinsights/workspaces/{{workspaceName}}",
          "name": "{{uniqueFriendlyDestinationName}}"
        }
      ]
    },
    "dataFlows": [
      {
        "streams": [
          "Custom-ExampleConnectorInput"
        ],
        "destinations": [
          "{{uniqueFriendlyDestinationName}}"
        ],
        "transformKql": "source | where eventType == \"Alert\" | project TimeGenerated = ts, SourceIP = srcIp, DestIP = destIp, Message = message, Priority = priority \n",
        "outputStream": "Custom-ExampleConnectorAlerts_CL"
      },
      {
        "streams": [
          "Custom-ExampleConnectorInput"
        ],
        "destinations": [
          "{{uniqueFriendlyDestinationName}}"
        ],
        "transformKql": "source | where eventType == \"File\" | project-rename TimeGenerated = ts, EventOriginalType = eventType, SrcIpAddr = srcIp, DstIpAddr = destIp, FileContentType = fileType, FileSize = fileSizeBytes, EventOriginalSeverity = disposition \n",
        "outputStream": "Microsoft-ASimFileEventLogs"
      }
    ]
  }
}

Örnek veri bağlayıcısı kullanıcı arabirimi tanımı

Bu örnek, Veri bağlayıcısı tanımları başvurusunda bulunur.

Örnek veri bağlayıcısı bağlantı kuralları

Bu örnek, Veri bağlayıcıları referansında bulunur.

Örnek ARM şablonu

CCF veri bağlayıcısını oluşturmak için gereken JSON bileşenlerinin 4 bölümünü içeren arm dağıtım şablonunu aşağıdaki yapıyla derleyin:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [],
}

Virgüller, köşeli ayraçlar ve parantezler gibi söz dizimi hatalarını en aza indirmek için bölümleri Visual Studio Code gibi JSON kullanan bir düzenleyiciyle birleştirin.

Şablon oluşturma işlemine yol göstermek için açıklamalar meta verilerde description veya satır içinde açıklama gösterimiyle birlikte // görünür. Daha fazla bilgi için bkz . ARM şablonu en iyi yöntemleri - açıklamalar.

Oluşturduğunuz şablonu doğrulamak için ARM şablonu test araç setini (arm-ttk) kullanmayı göz önünde bulundurun. Daha fazla bilgi için bkz . arm-ttk.

Örnek ARM şablonu - parametreler

Daha fazla bilgi için bkz . ARM şablonlarındaki parametreler.

Warning

Tüm parolalar ve gizli bilgiler için kaynak dağıtımı sonrasında okunabilir nesnelerde securestring kullanın. Daha fazla bilgi için bkz . Gizli girişin güvenliğini sağlama ve Parametreler için güvenlik önerileri.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "type": "string",
            "minLength": 1,
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
                "description": "Not used, but needed to pass the arm-ttk test, 'Location-Should-Not-Be-Hardcoded'. Instead the `workspace-location` derived from the log analytics workspace is used."
            }
        },
        "workspace-location": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "[concat('Region to deploy solution resources -- separate from location selection',parameters('location'))]"
            }
        },
        "subscription": {
            "defaultValue": "[last(split(subscription().id, '/'))]",
            "type": "string",
            "metadata": {
                "description": "subscription id where Microsoft Sentinel is configured"
            }
        },
        "resourceGroupName": {
            "defaultValue": "[resourceGroup().name]",
            "type": "string",
            "metadata": {
                "description": "resource group name where Microsoft Sentinel is configured"
            }
        },
        "workspace": {
            "defaultValue": "",
            "type": "string",
            "metadata": {
                "description": "the log analytics workspace enabled for Microsoft Sentinel"
            }
        }
    },
    // Next is the variables section here
}

Örnek ARM şablonu - değişkenler

Bu önerilen değişkenler şablonu basitleştirmeye yardımcı olur. Gerektiğinde daha fazla veya daha az kullanın. Daha fazla bilgi için bkz . ARM şablonlarındaki değişkenler.

    "variables": {
        "workspaceResourceId": "[resourceId('microsoft.OperationalInsights/Workspaces', parameters('workspace'))]",
        "_solutionName": "Solution name", // Enter your solution name 
        "_solutionVersion": "3.0.0", // must be 3.0.0 or above
        "_solutionAuthor": "Contoso", // Enter the name of the author
        "_packageIcon": "<img src=\"{LogoLink}\" width=\"75px\" height=\"75px\">", // Enter the http link for the logo. NOTE: This field is only recommended for Azure Global Cloud.
        "_solutionId": "azuresentinel.azure-sentinel-solution-azuresentinel.azure-sentinel-MySolution", // Enter a name for your solution with this format but exchange the 'MySolution' portion
        "dataConnectorVersionConnectorDefinition": "1.0.0",
        "dataConnectorVersionConnections": "1.0.0",
        "_solutionTier": "Community", // This designates the appropriate support - all custom data connectors are "Community"
        "_dataConnectorContentIdConnectorDefinition": "MySolutionTemplateConnectorDefinition", // Enter a name for the connector
        "dataConnectorTemplateNameConnectorDefinition": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnectorDefinition')))]",
        "_dataConnectorContentIdConnections": "MySolutionTemplateConnections", // Enter a name for the connections this connector makes
        "dataConnectorTemplateNameConnections": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnections')))]",
        "_logAnalyticsTableId1": "ExampleConnectorAlerts_CL" // Enter the custom table name - not needed if you are ingesting data into standard tables
		// Enter more variables as needed "":""
    },
    // Next is the resources sections here

Örnek ARM şablonu - kaynaklar

Bu şablon kılavuzunda 4 CCF veri bağlayıcısı oluşturma bileşenlerini barındıran 5 ARM dağıtım kaynağı vardır.

  1. contentTemplates (üst kaynak)
  2. dataConnectorDefinitions - Daha fazla bilgi için bkz . Veri bağlayıcısı kullanıcı arabirimi.
  3. meta veriler
  4. contentTemplates
  5. içerikPaketler
    "resources": [
        // resource section 1 - contentTemplates
        {
            "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates",
            "apiVersion": "2023-04-01-preview",
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnectorDefinition'), variables('dataConnectorVersionConnectorDefinition'))]",
            "location": "[parameters('workspace-location')]",
            "dependsOn": [
                "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]"
            ],
            "properties": {
                "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
                "displayName": "[concat(variables('_solutionName'), variables('dataConnectorTemplateNameConnectorDefinition'))]",
                "contentKind": "DataConnector",
                "mainTemplate": {
                    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
                    "contentVersion": "[variables('dataConnectorVersionConnectorDefinition')]",
                    "parameters": {},
                    "variables": {},
                    "resources": [
                        {
                            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition')))]",
                            "apiVersion": "2022-01-01-preview",
                            "type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
                            "properties": {
                                "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]",
                                "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
                                "kind": "DataConnector",
                                "version": "[variables('dataConnectorVersionConnectorDefinition')]",
                                "source": {
                                    "sourceId": "[variables('_solutionId')]",
                                    "name": "[variables('_solutionName')]",
                                    "kind": "Solution"
                                },
                                "author": {
                                    "name": "[variables('_solutionAuthor')]"
                                },
                                "support": {
                                    "name": "[variables('_solutionAuthor')]",
                                    "tier": "[variables('_solutionTier')]"
                                },
                                "dependencies": {
                                    "criteria": [
                                        {
                                            "version": "[variables('dataConnectorVersionConnections')]",
                                            "contentId": "[variables('_dataConnectorContentIdConnections')]",
                                            "kind": "ResourcesDataConnector"
                                        }
                                    ]
                                }
                            }
                        },
                        {
                            "name": "MyDCRV1", // Enter your DCR name
                            "apiVersion": "2021-09-01-preview",
                            "type": "Microsoft.Insights/dataCollectionRules",
                            "location": "[parameters('workspace-location')]",
                            "kind": null,
                            "properties": 
							{ 
                                // Enter your DCR properties here.
                                //  Consider using these variables:
                                //  "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]",
                                //  "workspaceResourceId": "[variables('workspaceResourceId')]",
							}
                        },
                        {
                            "name": "[variables('_logAnalyticsTableId1')]",
                            "apiVersion": "2022-10-01",
                            "type": "Microsoft.OperationalInsights/workspaces/tables",
                            "location": "[parameters('workspace-location')]",
                            "kind": null,
                            "properties": 
							{
								// Enter your log analytics table schema here. 
                                //  Consider using this variable for the name property:
                                //  "name": "[variables('_logAnalyticsTableId1')]",
							}			
                        }
						// Enter more tables if needed.
                    ]
                },
                "packageKind": "Solution",
                "packageVersion": "[variables('_solutionVersion')]",
                "packageName": "[variables('_solutionName')]",
                "contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition'),'-', variables('dataConnectorVersionConnectorDefinition'))))]",
                "packageId": "[variables('_solutionId')]",
                "contentSchemaVersion": "3.0.0",
                "version": "[variables('_solutionVersion')]"
            }
        },
        // resource 2 section here
        // resource section 2 - dataConnectorDefinitions
        {
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentIdConnectorDefinition'))]",
            "apiVersion": "2022-09-01-preview",
            "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions",
            "location": "[parameters('workspace-location')]",
            "kind": "Customizable",
            "properties": 
			{
				//Enter your data connector definition properties here
				//"connectorUiConfig": {
				//	"graphQueriesTableName": "[variables('_logAnalyticsTableId1')]",
                //}, 
			}
        },
        // resource 3 section here
        // resource section 3 - metadata
        {
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition')))]",
            "apiVersion": "2022-01-01-preview",
            "type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
            "properties": {
                "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]",
                "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
                "kind": "DataConnector",
                "version": "[variables('dataConnectorVersionConnectorDefinition')]",
                "source": {
                    "sourceId": "[variables('_solutionId')]",
                    "name": "[variables('_solutionName')]",
                    "kind": "Solution"
                },
                "author": {
                    "name": "[variables('_solutionAuthor')]"
                },
                "support": {
                    "name": "[variables('_solutionAuthor')]",
                    "tier": "[variables('_solutionTier')]"
                },
                "dependencies": {
                    "criteria": [
                        {
                            "version": "[variables('dataConnectorVersionConnections')]",
                            "contentId": "[variables('_dataConnectorContentIdConnections')]",
                            "kind": "ResourcesDataConnector"
                        }
                    ]
                }
            }
        },
        // resource 4 section here
        // resource section 4 - contentTemplates
        {
            "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates",
            "apiVersion": "2023-04-01-preview",
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnections'), variables('dataConnectorVersionConnections'))]",
            "location": "[parameters('workspace-location')]",
            "dependsOn": [
                "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]"
            ],
            "properties": {
                "contentId": "[variables('_dataConnectorContentIdConnections')]",
                "displayName": "[concat(variables('_solutionName'), variables('dataConnectorTemplateNameConnections'))]",
                "contentKind": "ResourcesDataConnector",
                "mainTemplate": {
                    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
                    "contentVersion": "[variables('dataConnectorVersionConnections')]",
                    "parameters":
                    // These parameters are used by the data connector primarily as properties for the administrator to enter in the UI when configuring the connector
					{
                        "connectorDefinitionName": {
                            "defaultValue": "connectorDefinitionName",
                            "type": "string",
                            "minLength": 1
                        },
                        "workspace": {
                            "defaultValue": "[parameters('workspace')]",
                            "type": "string"
                        },
                        "dcrConfig": {
                            "defaultValue": {
                                "dataCollectionEndpoint": "data collection Endpoint",
                                "dataCollectionRuleImmutableId": "data collection rule immutableId"
                            },
                            "type": "object"
                        }
						// Enter additional parameters, for example:
						//"domainname": {
                        //    "defaultValue": "domain name",
                        //    "type": "string",
                        //    "minLength": 1
                        //},
                        //"apikey": {
                        //    "defaultValue": "",
                        //    "type": "securestring",
                        //    "minLength": 1
                        //}
                    },
                    "variables": {
                        "_dataConnectorContentIdConnections": "[variables('_dataConnectorContentIdConnections')]"
                    },
                    "resources": [
                        {
                            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnections')))]",
                            "apiVersion": "2022-01-01-preview",
                            "type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
                            "properties": {
                                "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections'))]",
                                "contentId": "[variables('_dataConnectorContentIdConnections')]",
                                "kind": "ResourcesDataConnector",
                                "version": "[variables('dataConnectorVersionConnections')]",
                                "source": {
                                    "sourceId": "[variables('_solutionId')]",
                                    "name": "[variables('_solutionName')]",
                                    "kind": "Solution"
                                },
                                "author": {
                                    "name": "[variables('_solutionAuthor')]"
                                },
                                "support": {
                                    "name": "[variables('_solutionAuthor')]",
                                    "tier": "[variables('_solutionTier')]"
                                }
                            }
                        },
                        {
                            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', 'MyDataConnector')]", // Replace the last part of the name with your data connector name
                            //  To create several connections using this template, make the name dynamic. For example, use the 'concat' function to add the connector name with a GUID using the 'guid' function.
                            "apiVersion": "2022-12-01-preview",
                            "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors",
                            "location": "[parameters('workspace-location')]",
                            "kind": "RestApiPoller",
                            "properties": 
							{
								// Enter your data connector properties here. If you want to use UI parameters remember to escape the parameter like this: "[[parameters('paramName')]"
								//  Use parameters as needed. For example:	
                                // "dataType": "My product security event API",
                                // "response": {
                                //   "eventsJsonPaths": [
                                //        "$"
                                //    ],
                                //    "format": "json"
                                // },
                                // "paging": {
                                //    "pagingType": "LinkHeader"
                                // },
                                // "connectorDefinitionName": "[[parameters('connectorDefinitionName')]",
                                // "auth": {
                                //   "apiKeyName": "Authorization",
                                //    "ApiKey": "[[parameters('apikey')]",
                                //    "apiKeyIdentifier": "SSWS",
                                //    "type": "APIKey"
                                //} ,
                                // "request": {
                                //   "apiEndpoint": "[[concat('https://',parameters('domainname'),'/api/v1/logs')]",
                                //    "rateLimitQPS": 10,
                                //   "queryWindowInMin": 5,
                                //   "httpMethod": "GET",
                                //    "retryCount": 3,
                                //    "timeoutInSeconds": 60,
                                //    "headers": {
                                //        "Accept": "application/json",
                                //        "User-Agent": "My-Data-Source"
                                //    },
                                //    "startTimeAttributeName": "since",
								//    "endTimeAttributeName": "until"		     
                                // },
                                // "dcrConfig": {
                                //    "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]",
                                //    "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]",
                                //    "streamName": "Custom-ExampleConnectorAlerts_CL" //This input stream should be the same as the inputStream property configured for the DataCollectionRule 
                                // },
                                // "isActive": true
                            }
                        }
                    ]
                },
                "packageKind": "Solution",
                "packageVersion": "[variables('_solutionVersion')]",
                "packageName": "[variables('_solutionName')]",
                "contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections'),'-', variables('dataConnectorVersionConnections'))))]",
                "packageId": "[variables('_solutionId')]",
                "contentSchemaVersion": "3.0.0",
                "version": "[variables('_solutionVersion')]"
            }
        },
        // resource 5 section here
        // resource section 5 - contentPackages
        {
            "type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages",
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('_solutionId'))]",
            "location": "[parameters('workspace-location')]",
            "apiVersion": "2023-04-01-preview",
            "properties": {
                "version": "[variables('_solutionVersion')]",
                "kind": "Solution",
                "contentSchemaVersion": "3.0.0",
                "contentId": "[variables('_solutionId')]",
                "source": {
                    "kind": "Solution",
                    "name": "[variables('_solutionName')]",
                    "sourceId": "[variables('_solutionId')]"
                },
                "author": {
                    "name": "[variables('_solutionAuthor')]"
                },
                "support": {
                    "name": "[variables('_solutionAuthor')]"
                },
                "dependencies": {
                    "operator": "AND",
                    "criteria": [
                        {
                            "kind": "DataConnector",
                            "contentId": "[variables('dataConnectorVersionConnectorDefinition')]",
                            "version": "[variables('_dataConnectorContentIdConnectorDefinition')]"
                        }
                    ]
                },
                "firstPublishDate": "2023-12-05",
                "providers": [
                    "[variables('_solutionAuthor')]"
                ],
                "contentKind": "Solution",
                "packageId": "[variables('_solutionId')]",
                "contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]",
                "displayName": "[variables('_solutionName')]",
                "publisherDisplayName": "[variables('_solutionId')]",
                "descriptionHtml": "test",
                "icon": "[variables('_packageIcon')]"
            }
        }
        
    ]
}