你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

教程:为 Azure Cloud HSM 配置事件中心

如果为 Azure Cloud HSM 配置了操作事件日志记录,则云 HSM 群集上已有一个工作诊断设置,用于将 HsmServiceOperations 日志路由到存储和日志分析。 若要将事件中心添加为目标,请将第三个目标添加到同一诊断设置,或创建一个面向事件中心的新目标。

Azure Monitor诊断设置同时支持多个目标。 由于您的 Log Analytics 管道已经证明来自 Cloud HSM 的日志排放正常工作,因此 Event Hubs 成为另一个接收相同HsmServiceOperations类别的目的地。

在本教程中,你将了解:

  • 为 Cloud HSM 日志创建 Event Hub 命名空间和事件中心。
  • 使用最小特权原则配置授权规则。
  • 将诊断设置更新为将日志流式传输到事件中心。
  • 验证事件中心是否接收云 HSM 操作事件。

先决条件

  • 已部署和激活Azure云 HSM 资源。 有关详细信息,请参阅 Azure Cloud HSM 载入指南。
  • 将操作事件日志发送到存储和 Log Analytics 的诊断设置。 有关详细信息,请参阅 配置和查询Azure Cloud HSM 操作事件日志记录。
  • Contributor 或 Monitoring Contributor 角色在 Cloud HSM 资源组上。

验证日志资源组是否存在

事件中心应部署到包含存储帐户和日志分析工作区的同一资源组中,用于操作事件日志记录。 如果未设置操作事件日志记录,请先按照配置和查询 Azure Cloud HSM 的操作事件日志记录进行操作。

验证目标资源组是否存在:

az group show --name "<resource-group>" --query "{name:name, location:location}" --output table

创建事件中心命名空间

命名空间是包含一个或多个事件中心的容器。 使用 标准 层,这是诊断设置集成所必需的。

az eventhubs namespace create \
  --name "<eventhub-namespace>" \
  --resource-group "<resource-group>" \
  --location "<location>" \
  --sku Standard \
  --capacity 1 \
  --enable-auto-inflate false

关键选项:

  • 标准 SKU:基本层不支持将诊断设置作为目标。
  • 容量 1:一个吞吐量单位(1 MB/秒入口、2 MB/秒出口)足以满足 HSM 审核日志。
  • 已禁用自动膨胀:HSM 日志卷较低,因此不需要自动膨胀。

在命名空间中创建事件中心

若要接收云 HSM 日志,请在命名空间中创建事件中心。

az eventhubs eventhub create \
  --name "cloudhsm-logs" \
  --namespace-name "<eventhub-namespace>" \
  --resource-group "<resource-group>" \
  --partition-count 2 \
  --retention-time-in-hours 168 \
  --cleanup-policy Delete

关键选项:

  • 分区计数 2:两个分区足以满足 HSM 审核日志吞吐量。
  • 保留时间 168 小时:将消息保留七天(标准层的最大值)。
  • 清理策略删除:在保留期到期后删除消息。

创建使用者组

创建用于下游处理的专用使用者组。 保留默认 $Default 组以供其他使用。

az eventhubs eventhub consumer-group create \
  --name "azure-cloud-hsm" \
  --namespace-name "<eventhub-namespace>" \
  --eventhub-name "cloudhsm-logs" \
  --resource-group "<resource-group>"

创建授权规则

诊断设置需要 发送 权限才能将日志推送到事件中心。 创建仅具有所需权限的共享访问策略。

az eventhubs namespace authorization-rule create \
  --name "DiagnosticSettingsSendRule" \
  --namespace-name "<eventhub-namespace>" \
  --resource-group "<resource-group>" \
  --rights Send

注释

此规则仅授予Send权限,而不授予Listen或Manage权限。 遵循最小特权原则。 下游使用方(例如 Azure Functions 或 Stream Analytics)应使用具有 Listen 权限的单独规则。

获取授权规则资源 ID

检索授权规则资源 ID 以在诊断设置中使用。

authRuleId=$(az eventhubs namespace authorization-rule show \
  --name "DiagnosticSettingsSendRule" \
  --namespace-name "<eventhub-namespace>" \
  --resource-group "<resource-group>" \
  --query id --output tsv)

echo "Auth Rule ID: $authRuleId"

保存此值以供下一步使用。

更新诊断设置以添加事件中心

有两个选项可用于将事件中心添加为目标:

此方法更新现有诊断设置,添加事件中心,同时保留存储和日志分析。

# Set your resource group variables
hsmResourceGroup="<resource-group>"
logsResourceGroup="<resource-group>"

# Find the HSM cluster name (auto-generated during deployment)
hsmClusterName=$(az resource list \
  --resource-group $hsmResourceGroup \
  --resource-type Microsoft.HardwareSecurityModules/cloudHsmClusters \
  --query "[0].name" --output tsv)
echo "HSM Cluster: $hsmClusterName"

# Get the HSM cluster resource ID
hsmResourceId=$(az resource show \
  --resource-group $hsmResourceGroup \
  --resource-type Microsoft.HardwareSecurityModules/cloudHsmClusters \
  --name $hsmClusterName \
  --query id --output tsv)

# Get your existing storage account ID
storageAccountId=$(az storage account list \
  --resource-group $logsResourceGroup \
  --query "[0].id" --output tsv)

# Get your existing Log Analytics workspace ID
workspaceId=$(az monitor log-analytics workspace list \
  --resource-group $logsResourceGroup \
  --query "[0].id" --output tsv)

# Get the Event Hub auth rule ID
authRuleId=$(az eventhubs namespace authorization-rule show \
  --name "DiagnosticSettingsSendRule" \
  --namespace-name "<eventhub-namespace>" \
  --resource-group $logsResourceGroup \
  --query id --output tsv)

# Update the diagnostic setting with all three destinations
az monitor diagnostic-settings create \
  --name "<diagnostic-setting-name>" \
  --resource $hsmResourceId \
  --storage-account $storageAccountId \
  --workspace $workspaceId \
  --event-hub "cloudhsm-logs" \
  --event-hub-rule $authRuleId \
  --logs '[{"category":"HsmServiceOperations","enabled":true}]'

重要

如果名称与现有诊断设置匹配,CLI 和 PowerShell 命令将替换整个诊断设置。 您必须再次添加存储帐户和工作区,否则这些目标将被删除。

选项 B:仅为事件中心创建单独的诊断设置

如果希望保持现有设置不变,并添加第二个设置,

# Find the HSM cluster name
hsmClusterName=$(az resource list \
  --resource-group "<resource-group>" \
  --resource-type Microsoft.HardwareSecurityModules/cloudHsmClusters \
  --query "[0].name" --output tsv)

hsmResourceId=$(az resource show \
  --resource-group "<resource-group>" \
  --resource-type Microsoft.HardwareSecurityModules/cloudHsmClusters \
  --name $hsmClusterName \
  --query id --output tsv)

authRuleId=$(az eventhubs namespace authorization-rule show \
  --name "DiagnosticSettingsSendRule" \
  --namespace-name "<eventhub-namespace>" \
  --resource-group "<resource-group>" \
  --query id --output tsv)

az monitor diagnostic-settings create \
  --name "chsm-eventhub-diagnostic-setting" \
  --resource $hsmResourceId \
  --event-hub "cloudhsm-logs" \
  --event-hub-rule $authRuleId \
  --logs '[{"category":"HsmServiceOperations","enabled":true}]'

注释

Azure每个资源最多支持五个诊断设置。 第二个设置是有效的,并可实现关注点分离。

验证事件中心是否正在接收消息

配置诊断设置后,验证事件中心是否正在接收云 HSM 日志。

在门户中检查诊断设置

  1. 在Azure门户中,转到云 HSM 群集。
  2. 在“监视”下,选择“诊断设置”。
  3. 确认“Event Hubs”已列为目标。

检查事件中心指标

运行以下命令,检查过去一小时内传入的消息:

# Get your subscription ID
subId=$(az account show --query id --output tsv)

# Check incoming messages (last 1 hour)
az monitor metrics list \
  --resource "/subscriptions/$subId/resourceGroups/<resource-group>/providers/Microsoft.EventHub/namespaces/<eventhub-namespace>" \
  --metric "SuccessfulRequests" \
  --interval PT1H \
  --output table

查看消息(可选)

如果要阅读一些消息以确认内容,请创建 侦听 规则:

# Create a Listen rule for your consumer
az eventhubs namespace authorization-rule create \
  --name "ConsumerListenRule" \
  --namespace-name "<eventhub-namespace>" \
  --resource-group "<resource-group>" \
  --rights Listen

# Get the connection string
az eventhubs namespace authorization-rule keys list \
  --name "ConsumerListenRule" \
  --namespace-name "<eventhub-namespace>" \
  --resource-group "<resource-group>" \
  --query primaryConnectionString --output tsv

可以将此连接字符串与 Azure 事件中心资源管理器、Visual Studio Code 的事件中心扩展或 Python 脚本配合使用来查看消息。