Authentifizierungsmodi zum Erfassen von Ereignissen für Ziele in Azure Event Hubs
Mit Azure Event Hubs können Sie verschiedene Authentifizierungsmodi auswählen, wenn Sie Ereignisse für ein Ziel wie Azure Blob Storage oder ein Azure Data Lake Storage Gen1- oder Gen2-Konto Ihrer Wahl erfassen. Der Authentifizierungsmodus bestimmt, wie sich der in Event Hubs ausgeführte Capture-Agent beim Erfassungsziel authentifiziert.
Verwenden der verwalteten Identität
Die verwaltete Identität ist die bevorzugte Methode, um nahtlos auf das Erfassungsziel von Ihrem Event Hub aus zuzugreifen, indem Sie die auf Microsoft Entra ID basierende Authentifizierung und Autorisierung verwenden.
Sie können systemseitig zugewiesene oder benutzerseitig zugewiesene verwaltete Identitäten mit Event Hubs Capture-Zielen verwenden.
Verwenden einer systemseitig zugewiesenen verwalteten Identität zum Erfassen von Ereignissen
Die systemseitig zugewiesene verwaltete Identität wird automatisch erstellt und einer Azure-Ressource zugeordnet. In diesem Fall handelt es sich dabei um einen Event Hubs-Namespace.
Um die systemseitig zugewiesene Identität verwenden zu können, muss für das Erfassungsziel die erforderliche Rollenzuweisung für die entsprechende systemseitig zugewiesene Identität aktiviert sein.
Anschließend können Sie die Option System Assigned
verwaltete Identität auswählen, wenn Sie die Erfassungsfunktion in einem Event Hub aktivieren.
Dann verwendet der Capture-Agent die Identität des Namespace für die Authentifizierung und Autorisierung mit dem Erfassungsziel.
Azure Resource Manager-Vorlage
Hier finden Sie eine Beispielvorlage für Azure Resource Manager (ARM) zum Konfigurieren der Erfassung von Daten mithilfe einer systemseitig zugewiesenen verwalteten Identität.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"namespaces_eventhubcapture_name": {
"defaultValue": "eventhubcapturens",
"type": "String"
},
"captureEnabled": {
"defaultValue": true,
"type": "Bool",
"metadata": {
"description": "Enable or disable the Capture feature for your event hub."
}
},
"captureEncodingFormat": {
"defaultValue": "Avro",
"allowedValues": [
"Avro"
],
"type": "String",
"metadata": {
"description": "The encoding format that Event Hubs Capture uses to serialize the event data when archiving to your storage."
}
},
"captureTime": {
"defaultValue": 300,
"minValue": 60,
"maxValue": 900,
"type": "Int",
"metadata": {
"description": "the time window in seconds for the archival."
}
},
"captureSize": {
"defaultValue": 314572800,
"minValue": 10485760,
"maxValue": 524288000,
"type": "Int",
"metadata": {
"description": "the size window in bytes for the capture."
}
},
"blobContainerName": {
"type": "String",
"metadata": {
"description": "Your existing storage container that you want the blobs archived in."
}
},
"captureNameFormat": {
"defaultValue": "{Namespace}/{EventHub}/{PartitionId}/{Year}/{Month}/{Day}/{Hour}/{Minute}/{Second}",
"type": "String",
"metadata": {
"description": "A Capture Name Format must contain {Namespace}, {EventHub}, {PartitionId}, {Year}, {Month}, {Day}, {Hour}, {Minute} and {Second} fields. These can be arranged in any order with or without delimiters. E.g. Prod_{EventHub}/{Namespace}\\{PartitionId}_{Year}_{Month}/{Day}/{Hour}/{Minute}/{Second}"
}
},
"existingStgSubId": {
"type": "String",
"metadata": {
"description": "The ID of the Azure subscription that has your existing storage account."
}
},
"existingStgAccRG": {
"type": "String",
"metadata": {
"description": "The resource group that has the storage account."
}
},
"existingStgAcctName": {
"type": "String",
"metadata": {
"description": "The name of the storage account."
}
}
},
"variables":
{
"roleAssignmentId": "[guid(resourceId('Microsoft.EventHub/namespaces/',parameters('namespaces_eventhubcapture_name')))]",
"storageBlobDataOwnerId": "[concat(subscription().Id, '/providers/Microsoft.Authorization/roleDefinitions/', 'b7e6dc6d-f1e8-4753-8033-0f276bb0955b')]",
"ehId": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/', 'Microsoft.EventHub/namespaces/',parameters('namespaces_eventhubcapture_name')) ]",
"existingStorageAcctResourceId" : "[concat('/subscriptions/', parameters('existingStgSubId'), '/resourceGroups/', parameters('existingStgAccRG'), '/providers/', 'Microsoft.Storage/storageAccounts/',parameters('existingStgAcctName')) ]"
},
"resources": [
{
"type": "Microsoft.EventHub/namespaces",
"apiVersion": "2023-01-01-preview",
"name": "[parameters('namespaces_eventhubcapture_name')]",
"location": "eastus",
"sku": {
"name": "Standard",
"tier": "Standard",
"capacity": 1
},
"identity": {
"type": "SystemAssigned"
},
"properties": {
"minimumTlsVersion": "1.2",
"publicNetworkAccess": "Enabled",
"disableLocalAuth": false,
"zoneRedundant": true,
"isAutoInflateEnabled": false,
"maximumThroughputUnits": 0,
"kafkaEnabled": true
}
},
{
"type": "Microsoft.EventHub/namespaces/authorizationrules",
"apiVersion": "2023-01-01-preview",
"name": "[concat(parameters('namespaces_eventhubcapture_name'), '/RootManageSharedAccessKey')]",
"location": "eastus",
"dependsOn": [
"[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_eventhubcapture_name'))]"
],
"properties": {
"rights": [
"Listen",
"Manage",
"Send"
]
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "nestedStgTemplate",
"subscriptionId": "[parameters('existingStgSubId')]",
"resourceGroup": "[parameters('existingStgAccRG')]",
"properties": {
"expressionEvaluationOptions": {
"scope": "outer"
},
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"name": "C0F7F914-0FF9-47B2-9960-1D64D97FF594",
"apiVersion": "2018-01-01-preview",
"scope": "[variables('existingStorageAcctResourceId')]",
"properties": {
"roleDefinitionId": "[variables('storageBlobDataOwnerId')]",
"principalId": "[reference(variables('ehId'), '2021-11-01', 'Full').identity.principalId]"
}
}
]
}
}
},
{
"type": "Microsoft.EventHub/namespaces/eventhubs",
"apiVersion": "2023-01-01-preview",
"name": "[concat(parameters('namespaces_eventhubcapture_name'), '/capture')]",
"location": "eastus",
"dependsOn": [
"[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_eventhubcapture_name'))]",
"nestedStgTemplate"
],
"properties": {
"retentionDescription": {
"cleanupPolicy": "Delete",
"retentionTimeInHours": 24
},
"messageRetentionInDays": 1,
"partitionCount": 1,
"status": "Active",
"captureDescription": {
"enabled": "[parameters('captureEnabled')]",
"skipEmptyArchives": false,
"encoding": "[parameters('captureEncodingFormat')]",
"intervalInSeconds": "[parameters('captureTime')]",
"sizeLimitInBytes": "[parameters('captureSize')]",
"destination": {
"name": "EventHubArchive.AzureBlockBlob",
"properties": {
"storageAccountResourceId": "[variables('existingStorageAcctResourceId')]",
"blobContainer": "[parameters('blobContainerName')]",
"archiveNameFormat": "[parameters('captureNameFormat')]"
},
"identity": {
"type": "SystemAssigned"
}
}
}
}
},
{
"type": "Microsoft.EventHub/namespaces/networkRuleSets",
"apiVersion": "2023-01-01-preview",
"name": "[concat(parameters('namespaces_eventhubcapture_name'), '/default')]",
"location": "eastus",
"dependsOn": [
"[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_eventhubcapture_name'))]"
],
"properties": {
"publicNetworkAccess": "Enabled",
"defaultAction": "Allow",
"virtualNetworkRules": [],
"ipRules": []
}
},
{
"type": "Microsoft.EventHub/namespaces/eventhubs/consumergroups",
"apiVersion": "2023-01-01-preview",
"name": "[concat(parameters('namespaces_eventhubcapture_name'), '/capture/$Default')]",
"location": "eastus",
"dependsOn": [
"[resourceId('Microsoft.EventHub/namespaces/eventhubs', parameters('namespaces_eventhubcapture_name'), 'capture')]",
"[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_eventhubcapture_name'))]"
],
"properties": {}
}
]
}
Parameters.json:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"namespaces_eventhubcapture_name": {
"value": "NAMESPACENAME"
},
"captureEnabled": {
"value": true
},
"captureEncodingFormat": {
"value": "Avro"
},
"captureTime": {
"value": 300
},
"captureSize": {
"value": 314572800
},
"blobContainerName": {
"value": "BLOBCONTAINERNAME"
},
"captureNameFormat": {
"value": "{Namespace}/{EventHub}/{PartitionId}/{Year}/{Month}/{Day}/{Hour}/{Minute}/{Second}"
},
"existingStgSubId": {
"value": "00000000-0000-0000-0000-00000000000000"
},
"existingStgAccRG": {
"value": "STORAGERESOURCEGROUPNAME"
},
"existingStgAcctName": {
"value": "STORAGEACCOUNTNAME"
}
}
}
Verwenden einer benutzerseitig zugewiesenen verwalteten Identität zum Erfassen von Ereignissen
Sie können eine benutzerseitig zugewiesene verwaltete Identität erstellen und sie für die Authentifizierung und Autorisierung mit dem Erfassungsziel von Event Hubs verwenden. Nachdem die verwaltete Identität erstellt wurde, können Sie sie dem Event Hubs-Namespace zuweisen und sicherstellen, dass für das Erfassungsziel die erforderliche Rollenzuweisung für die entsprechende benutzerseitig zugewiesene Identität aktiviert ist.
Anschließend können Sie beim Aktivieren des Erfassungsfeatures in einem Event Hub die Option User Assigned
verwaltete Identität auswählen und beim Aktivieren des Erfassungsfeatures die erforderliche benutzerseitig zugewiesene Identität zuweisen.
Dann verwendet der Capture-Agent die konfigurierte benutzerseitig zugewiesene Identität für die Authentifizierung und Autorisierung mit dem Erfassungsziel.
Erfassen von Ereignissen für ein Erfassungsziel in einem anderen Abonnement
Das Event Hubs Capture-Feature unterstützt auch das Erfassen von Daten in einem Erfassungsziel in einem anderen Abonnement unter Verwendung einer verwalteten Identität.
Wichtig
Das Auswählen eines Erfassungsziels aus einem anderen Abonnement wird vom Azure-Portal nicht unterstützt. Zu diesem Zweck müssen Sie ARM-Vorlagen verwenden.
Hierzu können Sie dieselben ARM-Vorlagen verwenden, die im Leitfaden zum Aktivieren der Erfassung mit ARM-Vorlagen mit der entsprechenden verwalteten Identität angegeben sind.
Beispielsweise können Sie mit der folgenden ARM-Vorlage mit aktivierter Erfassungsfunktion einen Event Hub erstellen. Azure Storage oder Azure Data Lake Storage Gen 2 kann als Erfassungsziel verwendet werden, und die benutzerseitig zugewiesene Identität wird als Authentifizierungsmethode verwendet. Die Ressourcen-ID des Ziels kann auf eine Ressource in einem anderen Abonnement verweisen.
"resources":[
{
"apiVersion":"[variables('ehVersion')]",
"name":"[parameters('eventHubNamespaceName')]",
"type":"Microsoft.EventHub/Namespaces",
"location":"[variables('location')]",
"sku":{
"name":"Standard",
"tier":"Standard"
},
"resources": [
{
"apiVersion": "2017-04-01",
"name": "[parameters('eventHubNamespaceName')]",
"type": "Microsoft.EventHub/Namespaces",
"location": "[resourceGroup().location]",
"sku": {
"name": "Standard"
},
"properties": {
"isAutoInflateEnabled": "true",
"maximumThroughputUnits": "7"
},
"resources": [
{
"apiVersion": "2017-04-01",
"name": "[parameters('eventHubName')]",
"type": "EventHubs",
"dependsOn": [
"[concat('Microsoft.EventHub/namespaces/', parameters('eventHubNamespaceName'))]"
],
"properties": {
"messageRetentionInDays": "[parameters('messageRetentionInDays')]",
"partitionCount": "[parameters('partitionCount')]",
"captureDescription": {
"enabled": "true",
"skipEmptyArchives": false,
"encoding": "[parameters('captureEncodingFormat')]",
"intervalInSeconds": "[parameters('captureTime')]",
"sizeLimitInBytes": "[parameters('captureSize')]",
"destination": {
"name": "EventHubArchive.AzureBlockBlob",
"properties": {
"storageAccountResourceId": "[parameters('destinationStorageAccountResourceId')]",
"blobContainer": "[parameters('blobContainerName')]",
"archiveNameFormat": "[parameters('captureNameFormat')]"
},
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"xxxxxxxx": {}
}
}
}
}
}
}
]
}
]
Zugehöriger Inhalt
Erfahren Sie mehr über das Feature und wie Sie es über das Azure-Portal und mit einer Azure Resource Manager-Vorlage aktivieren können: