Bagikan melalui


Mengautentikasi mode untuk menangkap peristiwa ke tujuan di Azure Event Hubs

Azure Event Hubs memungkinkan Anda memilih mode autentikasi yang berbeda saat mengambil peristiwa ke tujuan seperti penyimpanan Azure Blob atau akun Azure Data Lake Storage Gen 1 atau Gen 2 pilihan Anda. Mode autentikasi menentukan bagaimana agen pengambilan yang berjalan di Azure Event Hubs mengautentikasi dengan tujuan penangkapan.

Autentikasi berbasis SAS

Metode autentikasi default adalah menggunakan Tanda Tangan Akses Bersama (SAS) untuk mengakses tujuan pengambilan dari layanan Azure Event Hubs.

Gambar memperlihatkan pengambilan data Azure Event Hubs ke Azure Storage atau Azure Data Lake Storage menggunakan mode autentikasi SAS default

Dengan pendekatan ini, Anda dapat mengambil data ke sumber daya tujuan yang hanya berada dalam langganan yang sama.

Gunakan identitas terkelola

Dengan identitas terkelola, pengguna dapat mengambil data dengan mulus ke tujuan pilihan dengan menggunakan autentikasi dan otorisasi berbasis ID Microsoft Entra.

Gambar memperlihatkan pengambilan data Azure Event Hubs ke Azure Storage atau Azure Data Lake Storage menggunakan Identitas Terkelola

Anda dapat menggunakan identitas terkelola yang ditetapkan sistem atau ditetapkan pengguna dengan tujuan Azure Event Hubs Capture.

Menggunakan identitas terkelola yang ditetapkan sistem untuk mengambil peristiwa

Identitas Terkelola yang ditetapkan sistem secara otomatis dibuat dan dikaitkan dengan sumber daya Azure, yang merupakan namespace Layanan Pusat Aktivitas dalam kasus ini.

Untuk menggunakan identitas yang ditetapkan sistem, tujuan pengambilan harus mengaktifkan penetapan peran yang diperlukan untuk identitas yang ditetapkan sistem yang sesuai. Kemudian Anda dapat memilih System Assigned opsi identitas terkelola saat mengaktifkan fitur pengambilan di pusat aktivitas.

Gambar memperlihatkan pengambilan data Azure Event Hubs ke Azure Storage atau Azure Data Lake Storage menggunakan identitas terkelola yang Ditetapkan Sistem.

Kemudian agen penangkapan akan menggunakan identitas namespace layanan untuk autentikasi dan otorisasi dengan tujuan penangkapan.

Templat Azure Resource Manager

Berikut adalah contoh templat Azure Resource Manager untuk mengonfigurasi pengambilan data menggunakan identitas terkelola yang ditetapkan sistem.

{
    "$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"
        }
    }
}

Menggunakan identitas terkelola yang ditetapkan pengguna untuk mengambil peristiwa

Anda dapat membuat identitas terkelola yang ditetapkan pengguna dan menggunakannya untuk mengautentikasi dan mengotorisasi dengan tujuan penangkapan Hub peristiwa. Setelah identitas terkelola dibuat, Anda dapat menetapkannya ke namespace Layanan Pusat Aktivitas dan memastikan bahwa tujuan penangkapan memiliki penetapan peran yang diperlukan yang diaktifkan untuk identitas yang ditetapkan pengguna yang sesuai.

Kemudian Anda dapat memilih User Assigned opsi identitas terkelola saat mengaktifkan fitur pengambilan di hub peristiwa dan menetapkan identitas yang ditetapkan pengguna yang diperlukan saat mengaktifkan fitur pengambilan.

Gambar menunjukkan pengambilan data Azure Event Hubs ke Azure Storage atau Azure Data Lake Storage Kemudian, agen penangkapan akan menggunakan identitas yang ditetapkan pengguna yang dikonfigurasi untuk autentikasi dan otorisasi dengan tujuan penangkapan.

Menangkap peristiwa ke tujuan penangkapan dalam langganan yang berbeda

Fitur Azure Event Hubs Capture juga mendukung pengambilan data ke tujuan pengambilan dalam langganan yang berbeda dengan penggunaan identitas terkelola.

Penting

Memilih tujuan pengambilan dari langganan lain tidak didukung oleh Portal Microsoft Azure. Anda perlu menggunakan templat ARM untuk tujuan tersebut.

Untuk itu Anda dapat menggunakan templat ARM yang sama yang diberikan dalam mengaktifkan pengambilan dengan panduan templat ARM dengan identitas terkelola yang sesuai.

Misalnya, templat ARM berikut dapat digunakan untuk membuat pusat aktivitas dengan tangkapan diaktifkan. Azure Storage atau Azure Data Lake Storage Gen 2 dapat digunakan sebagai tujuan penangkapan dan identitas yang ditetapkan pengguna digunakan sebagai metode autentikasi. ID sumber daya tujuan dapat menunjuk ke sumber daya dalam langganan yang berbeda.

"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": {}
                  }
          						}
              }
            }
          }
        }
      ]
    }
  ]