Share via


Microsoft Sentinel için kodsuz bağlayıcı oluşturma (Genel önizleme)

Kodsuz Bağlan or Platformu (CCP), 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.

CCP kullanılarak oluşturulan Bağlan, hizmet yüklemeleri için hiçbir gereksinim olmadan tamamen SaaS'dir. Bunlar ayrıca sistem durumu izleme ve Microsoft Sentinel'den tam destek içerir.

Önemli

Kodsuz Bağlan or Platformu (CCP) şu anda ÖNİzLEME aşamasındadır. Azure Önizleme Ek Koşulları, beta, önizleme aşamasında olan veya henüz genel kullanıma sunulmamış Azure özellikleri için geçerli olan ek yasal koşulları içerir.

CCP bağlayıcınızı oluşturmak ve veri kaynağınızı Microsoft Sentinel'e 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ğıtma
  • Microsoft Sentinel'i veri kaynağınıza Bağlan ve veri alımına başlayın

Bu makalede her adımın nasıl tamamlanacağı ve yol boyunca derlenecek kodsuz bağlayıcının nasıl sağlanacağı gösterilmektedir.

Bu CCP'nin önceki sürümden farkı nedir?

CCP'nin ilk sürümü Ocak 2022'de duyuruldu. O zamandan beri platformu geliştirdik ve eski sürüm artık önerilmez. CCP'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.

Önkoşullar

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 yenisine ihtiyacınız olup olmadığı hakkında daha fazla bilgi için bkz . Azure İzleyici'de veri toplama uç noktaları.

  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ğlan veya 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ğı için 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

Veri bağlayıcısı bileşenlerini doğrulamak için Postman gibi bir araç da öneririz. Daha fazla bilgi için bkz . Postman'i Microsoft Graph API'siyle kullanma.

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

CCP veri bağlayıcısını oluşturmak için gereken 4 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ı

İpucu

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 bir tablo oluşturmak için doğrudan 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 belirtir.

  • 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.
  • CCP 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:

Özel tablo ve DCR oluşturmak için örnek verileri kullanma da dahil olmak üzere DCE oluşturmayı gösteren bir öğretici için bkz . Öğretici: Günlük alma API'si (Azure portalı) ile Azure İzleyici Günlüklerine veri gönderme. 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ısı galerisinde veri bağlayıcısı kullanıcı arabirimini işler. Her veri bağlayıcısı yalnızca bir kullanıcı arabirimi tanımına sahip olabilir.

Veri Bağlan veya 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. kind API yoklama bağlayıcısının özelliği her zaman olmalıdırCustomizable.
  2. Bu bir API yoklama bağlayıcısı türü olduğundan türü olarak ayarlayın connectivityCriteriahasDataConnectors
  3. Örnek instructionsSteps , 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ı tanımları API'sini çağırmak için Postman'i kullanarak veri bağlayıcısı kullanıcı arabirimini veri bağlayıcıları galerisinde doğrulayı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ı

Bu bölüm, aşağıdakiler dahil olmak üzere bağlantı kurallarını tanımlar:

  • Yoklama
  • kimlik doğrulaması
  • Sayfalama

Bu bölümü oluşturma hakkında daha fazla bilgi için bkz . Veri bağlayıcısı bağlantı kuralları başvurusu.

Bir örnekten bilgi edinmek için Bkz . Veri bağlayıcısı bağlantı kuralları başvuru örneği.

Postman'i kullanarak veri bağlayıcısı API'sini çağırarak bağlantı kurallarını ve önceki bileşenleri birleştiren veri bağlayıcısını oluşturun. 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

CCP 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 CCP'ye geçirmektir.

Etiket 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 girişi depolama

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."
            }
        },
    // more deployment template information
    }
}

Securestring nesnelerini kullanma

Son olarak, CCP 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"
    }
},

Not

Kimlik bilgisi nesnesinin "ClientSecret": "[[parameters('Password')]", garip söz dizimi bir yazım hatası değil! Parametreleri de kullanan dağıtım şablonunu oluşturmak için bu bölümdeki parametrelerden ek bir başlangıçla[ kaçış yapmanız gerekir. 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 şablonu kullanarak bir Azure Kaynak Yönetimi (ARM) şablonunu el ile paketle.

Örnek şablona ek olarak, Microsoft Sentinel içerik hub'ında bulunan yayımlanmış çözümler, veri bağlayıcısı için CCP'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.

Bağlayıcıyı dağıtma

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

İpucu

Önceki adımlarda oluşturduğunuz kaynakları silin. DCR ve özel tablo dağıtım ile 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

Günlük kaynağınız ağ yalıtımı gerektiriyorsa CCP tarafından kullanılan genel IP adreslerinin izin verilenler listesini yapılandırın.

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

Scuba hizmet etiketiyle ilişkili geçerli IP aralığını bulmak için bkz. Hizmet Etiketi Bulma API'sini kullanma.

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.

Not

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

Örnek

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 CCP 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 Uyarı ve Dosya içerir eventType. 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 son _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ışı Uyarıyı özel tabloya yönlendirireventType = .ExampleConnectorAlerts_CL
  2. ikinci veri akışı, Dosya'yı normalleştirilmiş standart tabloyaASimFileEventLogs yönlendirir = eventType.

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, Postman için kullanım kolaylığıyla 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ı başvurusunda bulunur.

Örnek ARM şablonu

CCP 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 Görsel Kod 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.

Uyarı

Kaynak dağıtımı sonrasında okunabilir nesnelerdeki tüm parolalar ve gizli diziler için kullanın securestring . 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 CCP 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. data Bağlan orDefinitions - Daha fazla bilgi için bkz. Veri bağlayıcısı kullanıcı arabirimi.
  3. meta veriler
  4. contentTemplates
  5. contentPackages
    "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')]"
            }
        }
        // that's the end!
    ]
}

Sonraki adımlar

Daha fazla bilgi için bkz.