자습서: Azure Cloud HSM용 Event Hubs 구성

Azure Cloud HSM에 대한 작업 이벤트 로깅을 구성한 경우 클라우드 HSM 클러스터에서 HsmServiceOperations 로그를 Storage 및 Log Analytics 라우팅하는 작업 진단 설정이 이미 있습니다. Event Hubs를 대상으로 추가하려면 동일한 진단 설정에 세 번째 대상을 추가하거나 Event Hubs를 대상으로 하는 새 대상을 만듭니다.

Azure Monitor 진단 설정은 동시에 여러 대상을 지원합니다. Log Analytics 파이프라인은 이미 Cloud HSM의 로그 배출이 작동하고 있음을 증명하므로 Event Hubs는 동일한 HsmServiceOperations 범주를 수신하는 다른 대상이 됩니다.

이 자습서에서는 다음을 수행합니다.

  • 클라우드 HSM 로그에 대한 Event Hub 네임스페이스 및 이벤트 허브를 만듭니다.
  • 최소 권한 권한으로 권한 부여 규칙을 구성합니다.
  • Event Hubs로 로그를 스트리밍하도록 진단 설정을 업데이트합니다.
  • Event Hubs가 클라우드 HSM 작업 이벤트를 수신했는지 확인합니다.

사전 요구 사항

  • 배포되고 활성화된 Azure Cloud HSM 리소스입니다. 자세한 내용은 Azure Cloud HSM 온보딩 가이드 참조하세요.
  • 스토리지와 로그 분석에 작업 이벤트 로그를 내보내는 진단 설정입니다. 자세한 내용은 Azure Cloud HSM 대한 구성 및 쿼리 작업 이벤트 로깅을 참조하세요.
  • Cloud HSM 리소스 그룹에서 Contributor 또는 Monitoring Contributor 역할

로그 리소스 그룹이 있는지 확인

Event Hubs는 작업 이벤트 로깅을 위해 스토리지 계정 및 Log Analytics 작업 영역을 포함하는 동일한 리소스 그룹에 배포해야 합니다. 운영 이벤트 로깅을 설정하지 않은 경우 먼저 Azure Cloud HSM 대한 구성 및 쿼리 작업 이벤트 로깅의 지침을 따릅니다.

대상 리소스 그룹이 있는지 확인합니다.

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

Event Hubs 네임스페이스 만들기

네임스페이스는 하나 이상의 이벤트 허브를 보유하는 컨테이너입니다. 진단 설정 통합에 필요한 표준 계층을 사용합니다.

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/s 수신, 2-MB/s 송신)는 HSM 감사 로그에 충분합니다.
  • 자동 인플레이트 사용 안 함: HSM 로그 볼륨이 낮으므로 autoinflate가 필요하지 않습니다.

네임스페이스 내에 이벤트 허브 만들기

클라우드 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시간: 7일 동안 메시지를 유지합니다(표준 계층의 최대값).
  • 정리 정책 삭제: 보존 기간이 만료된 후 메시지를 삭제합니다.

소비자 그룹 만들기

다운스트림 처리를 위한 전용 소비자 그룹을 만듭니다. 다른 용도로 기본 $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"

다음 단계에서 사용하기 위해 이 값을 저장합니다.

Event Hubs를 추가하도록 진단 설정 업데이트

Event Hubs를 대상지로 추가할 수 있는 두 가지 옵션이 있습니다.

이 방법은 스토리지 및 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}]'

중요합니다

이름이 기존 이름과 일치하는 경우 CLI 및 PowerShell 명령 모두 전체 진단 설정을 바꿉니다. 스토리지 계정 및 작업 영역을 다시 포함해야 합니다. 그렇지 않으면 해당 대상이 제거됩니다.

옵션 B: Event Hubs에 대해서만 별도의 진단 설정 만들기

기존 설정을 변경하지 않고 두 번째 설정을 추가하려는 경우

# 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개의 진단 설정을 지원합니다. 두 번째 설정은 유효하며 문제를 구분하여 유지합니다.

Event Hubs가 메시지를 수신하고 있는지 확인

진단 설정을 구성한 후 Event Hubs가 클라우드 HSM 로그를 수신하고 있는지 확인합니다.

포털에서 진단 설정 확인

  1. Azure 포털에서 클라우드 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 탐색기, Visual Studio Code의 Event Hubs 확장 또는 Python 스크립트와 함께 사용하여 메시지를 볼 수 있습니다.