Modes d’authentification pour la capture d’événements vers des destinations dans Azure Event Hubs
Azure Event Hubs vous permet de sélectionner différents modes d’authentification lors de la capture d’événements vers une destination telle qu’un compte Stockage Blob Azure ou Azure Data Lake Storage Gen 1 ou Gen 2 de votre choix. Le mode d’authentification détermine comment l’agent de capture en cours d’exécution dans Event Hubs s’authentifie auprès de la destination de capture.
Utiliser l’identité managée
L’identité managée est le moyen recommandé pour accéder de manière transparente à la destination de capture à partir de votre Event Hub à l’aide de l’authentification et de l’autorisation basées sur Microsoft Entra ID.
Vous pouvez utiliser des identités managées affectées par le système ou par l’utilisateur avec des destinations de capture Event Hubs.
Utiliser une identité managée affectée par le système pour capturer des événements
L’identité managée affectée par le système est automatiquement créée et associée à une ressource Azure, qui est un espace de noms Event Hubs dans ce cas.
Pour utiliser l’identité affectée par le système, l’attribution de rôle requise pour l’identité affectée par le système correspondante doit être activée pour la destination de capture.
Vous pouvez ensuite sélectionner l’option d’identité managée System Assigned
lors de l’activation de la fonctionnalité de capture dans un Event Hub.
Ensuite, l’agent de capture utilise l’identité de l’espace de noms pour l’authentification et l’autorisation auprès de la destination de capture.
Modèle Azure Resource Manager
Voici un exemple de modèle Azure Resource Manager (ARM) pour configurer la capture de données avec une identité managée affectée par le système.
{
"$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"
}
}
}
Utiliser une identité managée affectée par l’utilisateur pour capturer des événements
Vous pouvez créer une identité managée affectée par l’utilisateur et l’utiliser pour l’authentification et l’autorisation auprès de la destination de capture d’Event Hubs. Une fois l’identité managée créée, vous pouvez l’affecter à l’espace de noms Event Hubs et vous assurer que l’attribution de rôle requise pour l’identité affectée par l’utilisateur correspondante est activée dans la destination de capture.
Vous pouvez ensuite sélectionner l’option d’identité managée User Assigned
lors de l’activation de la fonctionnalité de capture dans un Event Hub et attribuer l’identité affectée par l’utilisateur requise lors de l’activation de la fonctionnalité de capture.
Ensuite, l’agent de capture utilisera l’identité managée affectée par l’utilisateur pour l’authentification et l’autorisation auprès de la destination de capture.
Capturer des événements vers une destination de capture dans un autre abonnement
La fonctionnalité de capture Event Hubs prend également en charge la capture de données vers une destination de capture dans un autre abonnement avec l’utilisation d’une identité managée.
Important
La sélection d’une destination de capture à partir d’un autre abonnement n’est pas prise en charge par le portail Azure. Vous devez utiliser des modèles ARM à cette fin.
Pour cela, vous pouvez utiliser les mêmes modèles ARM que dans le guide Activer la capture avec le modèle ARM avec l’identité managée correspondante.
Par exemple, le modèle ARM suivant peut être utilisé pour créer un Event Hub avec la capture activée. L’option Stockage Azure ou Azure Data Lake Storage Gen 2 peut être utilisée comme destination de capture, et l’identité affectée par l’utilisateur est utilisée comme méthode d’authentification. L’ID de ressource de la destination peut pointer vers une ressource dans un autre abonnement.
"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": {}
}
}
}
}
}
}
]
}
]
Contenu connexe
Découvrez-en plus sur la fonctionnalité et son activation à l’aide du Portail Azure et du modèle Azure Resource Manager :