チュートリアル: Azure Cloud HSM 用に Event Hubs を構成する

Azure Cloud HSM の操作イベント ログを構成した場合は、HsmServiceOperations ログをストレージとLog Analyticsにルーティングする、Cloud HSM クラスターで動作する診断設定が既にあります。 Event Hubs を宛先として追加するには、同じ診断設定に 3 番目の宛先を追加するか、Event Hubs を対象とする新しいターゲットを作成します。

Azure Monitor診断設定では、複数の宛先が同時にサポートされます。 Log Analytics パイプラインは既に Cloud HSM からのログの出力が機能していることを証明しているため、Event Hubs は同じ HsmServiceOperations カテゴリを受け取る別の宛先になります。

このチュートリアルでは、次の操作を行います。

  • Cloud HSM ログ用のイベント ハブ名前空間とイベント ハブを作成します。
  • 最小特権のアクセス許可を使用して承認規則を構成します。
  • 診断設定を更新して、ログを Event Hubs にストリーミングします。
  • Event Hubs が Cloud HSM 操作イベントを受信することを確認します。

前提条件

リソース グループが存在するログの確認

Event Hubs は、運用イベント ログ記録のために、ストレージ アカウントとLog Analytics ワークスペースを含む同じリソース グループにデプロイする必要があります。 運用イベント ログを設定していない場合は、まず、 Cloud HSM の Azure構成とクエリ操作のイベント ログ記録のガイダンスに従います。

対象のリソース グループが存在することを確認します。

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

Event Hubs 名前空間を作成する

名前空間は、1 つ以上のイベント ハブを保持するコンテナーです。 診断設定の統合に必要な Standard レベルを使用します。

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

主なオプション:

  • Standard SKU: Basic レベルでは、送信先としての診断設定はサポートされていません。
  • 容量 1: HSM 監査ログには、1 つのスループット ユニット (1 MB/秒のイングレス、2 MB/秒のエグレス) で十分です。
  • 自動拡張が無効: HSM ログ ボリュームが少ないため、自動拡張は必要ありません。

名前空間内にイベント ハブを作成する

Cloud 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 監査ログのスループットには、2 つのパーティションで十分です。
  • 保持時間 168 時間: メッセージを 7 日間保持します (Standard レベルの場合は最大)。
  • クリーンアップ ポリシーの削除: 保持期間が経過した後にメッセージを削除します。

コンシューマー グループを作成する

ダウンストリーム処理用の専用コンシューマー グループを作成します。 既定の $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

この規則では、SendListenではなく、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"

次の手順で使用するために、この値を保存します。

診断設定を更新して Event Hubs を追加する

Event Hubs を宛先として追加するには、次の 2 つのオプションがあります。

この方法では、ストレージとLog Analyticsを維持しながら、既存の診断設定を更新して Event Hubs を追加します。

# 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}]'

Important

名前が既存の名前と一致する場合は、CLI と PowerShell の両方のコマンドによって診断設定全体が置き換えられます。 ストレージ アカウントとワークスペースをもう一度含める必要があります。または、それらの宛先が削除されます。

オプション B: Event Hubs 専用の個別の診断設定を作成する

既存の設定を変更せずに 2 つ目の設定を追加する場合は、

# 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では、リソースごとに最大 5 つの診断設定がサポートされます。 2 つ目の設定は有効であり、懸念事項は分離された状態を維持します。

Event Hubs がメッセージを受信することを確認する

診断設定を構成したら、Event Hubs が Cloud HSM ログを受信していることを確認します。

ポータルで診断設定を確認する

  1. Azure ポータルで、Cloud HSM クラスターに移動します。
  2. [監視][診断設定] を選択します。
  3. Event Hubs が宛先として一覧表示されていることを確認します。

Event Hubs メトリックを確認する

次のコマンドを実行して、過去 1 時間の受信メッセージを確認します。

# 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 Event Hubs Explorer、Visual Studio Code Event Hubs 拡張機能、またはPython スクリプトを使用してメッセージを表示できます。