Azure API 管理ログを収集する
パーサーのバージョン: 1.0
このドキュメントでは、Azure Event Hub フィードを作成して Azure API Management ログを Google Security Operations に取り込む方法について説明します。
Azure API Management は、すべての環境の API を対象としたハイブリッド マルチクラウド管理プラットフォームです。組織は、API を外部、パートナー、内部のデベロッパーに公開して、データとサービスの可能性を最大限に引き出すことができます。API 管理は、API の検出、ゲートウェイ機能、セキュリティ ポリシー、分析、デベロッパー エンゲージメントのためのツールを提供します。診断ログには、リクエスト、レスポンス、エラーなど、API Gateway オペレーションに関する詳細情報が記録されます。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- Microsoft Azure ポータルへの特権アクセス。次の権限が必要です。
- Event Hub 名前空間を作成する
- Event Hubs を作成する
- Azure API Management の診断設定を構成する
- アクセス ポリシーを管理する
既存の Azure API Management サービス インスタンス
Event Hub 名前空間を作成する
Event Hubs 名前空間は、1 つ以上の Event Hubs の管理コンテナです。
- Azure ポータルで、Event Hubs を検索します。
- [+ 作成] をクリックします。
次の構成情報を提供してください。
設定 値 サブスクリプション Azure サブスクリプションを選択する リソース グループ 既存のものを選択するか、新しいものを作成 Namespace name 一意の名前を入力します(例: secops-apim-eventhub)。ロケーション リージョンを選択します(例: East US)。料金ティア Standard(本番環境に推奨) スループット単位 1 から開始し、自動インフレを有効にする(推奨) [Review + create] をクリックします。
概要を確認し、[作成] をクリックします。
デプロイが完了するまで待ちます(1 ~ 2 分)。
イベントハブを作成する
- 名前空間がデプロイされたら、Event Hub 名前空間に移動します。
- 左側のナビゲーションで、[エンティティ] の [Event Hubs] を選択します。
- [+ Event Hub] をクリックします。
次の構成情報を提供してください。
設定 値 名前 一意の名前を入力します(例: apim-logs)。パーティション数 40(Google SecOps の最適なスケーリングに推奨) メッセージの保持 7 日間(推奨される最小値) キャプチャ 無効(Google SecOps では不要) [作成] をクリックします。
Event Hub 接続文字列を取得する
Google SecOps では、Event Hub の認証に接続文字列が必要です。
オプション A: Namespace レベルの接続文字列(推奨)
- Event Hub 名前空間に移動します。
- 左側のナビゲーションで、[設定] の [共有アクセス ポリシー] を選択します。
- デフォルト ポリシーの RootManageSharedAccessKey をクリックします。
- 接続文字列の主キーをコピーします。
- この接続文字列を安全に保存します。
例:
Original: Endpoint=sb://secops-apim-eventhub.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==;EntityPath=apim-logs Remove EntityPath: Endpoint=sb://secops-apim-eventhub.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==
オプション B: Event Hub レベルの接続文字列
- (名前空間ではなく)イベント ハブに移動します。
- 左側のナビゲーションで、[設定] の [共有アクセス ポリシー] を選択します。
- [+ 追加] をクリックして、新しいポリシーを作成します。
- 次の構成情報を指定します。
- ポリシー名: わかりやすい名前を入力します(例:
chronicle-read)。 - 権限: [聴取] のみを選択します(読み取り専用アクセス)。
- ポリシー名: わかりやすい名前を入力します(例:
- [作成] をクリックします。
- 新しく作成したポリシーをクリックします。
- 接続文字列 - プライマリ キーをコピーします。
この接続文字列は安全に保存してください。
Event Hub にストリーミングするように Azure API Management を構成する
- Azure ポータルで、API Management サービスを検索します。
- API Management サービス インスタンスを選択します。
- 左側のナビゲーションで、[モニタリング] の [診断設定] を選択します。
- [+ 診断設定を追加] をクリックします。
- 次の構成情報を指定します。
- 診断設定名: わかりやすい名前を入力します(例:
apim-to-secops)。 - [ログ] セクションで、次のカテゴリを選択します。
- GatewayLogs: API Gateway のリクエストとレスポンスのログ
- WebSocketConnectionLogs: WebSocket 接続ログ(該当する場合)
- DeveloperPortalAuditLogs: デベロッパー ポータルの監査ログ(該当する場合)
- GatewayLlmLogs: 生成 AI ゲートウェイ ログ(該当する場合)
- GatewayMCPLogs: Model Context Protocol(MCP)サーバーログ(該当する場合)
- [宛先の詳細] セクションで、[イベント ハブにストリーミングする] チェックボックスをオンにします。
- サブスクリプション: Event Hubs の名前空間を含むサブスクリプションを選択します。
- イベント ハブの名前空間: 前に作成した名前空間を選択します(
secops-apim-eventhubなど)。 - イベントハブ名: 作成したイベントハブを選択します(例:
apim-logs)。 - イベント ハブ ポリシー名: [RootManageSharedAccessKey] または送信権限を持つカスタム ポリシーを選択します。
- 診断設定名: わかりやすい名前を入力します(例:
[保存] をクリックします。
(省略可)チェックポイント処理用に Azure Blob Storage を構成する
Google SecOps は、Azure Blob Storage を使用して、処理されたイベントを追跡する Event Hub チェックポイントを保存できます。これにより、フィードが一時的に中断された場合に、重複して取り込まれるのを防ぐことができます。
チェックポイント処理用のストレージ アカウントを作成する
- Azure ポータルで、[ストレージ アカウント] を検索します。
- [+ 作成] をクリックします。
次の構成情報を提供してください。
設定 値 サブスクリプション Azure サブスクリプションを選択する リソース グループ Event Hub と同じリソース グループを使用する ストレージ アカウント名 一意の名前を入力します(例: secopsapimcheckpoint)。リージョン Event Hub と同じリージョン パフォーマンス 標準 冗長性 LRS(ローカル冗長ストレージ) [Review + create] をクリックします。
[作成] をクリックします。
Blob コンテナを作成する
- 作成したストレージ アカウントに移動します。
- 左側のナビゲーションで、[データ ストレージ] の [コンテナ] を選択します。
- [+ コンテナ] をクリックします。
- 次の構成情報を指定します。
- 名前: 「
checkpoints」と入力します。 - 公開アクセスレベル: 非公開(匿名アクセスなし)
- 名前: 「
- [作成] をクリックします。
ストレージ アカウントの認証情報を取得する
- ストレージ アカウントで、[セキュリティ + ネットワーキング] の [アクセスキー] を選択します。
- [キーを表示] をクリックします。
- コピーして保存します。
- ストレージ アカウント名: ストレージ アカウントの名前
- キー 1: アクセスキーの値
これらの値は、Google SecOps フィードの作成時に指定します。
(省略可)専用のコンシューマー グループを作成する
デフォルトでは、Event Hub は $Default という名前のコンシューマー グループを提供します。本番環境では、Google SecOps 専用のコンシューマ グループを作成することをおすすめします。
- (名前空間ではなく)イベント ハブに移動します。
- 左側のナビゲーションで、[エンティティ] の [コンシューマー グループ] を選択します。
- [+ コンシューマ グループ] をクリックします。
- 次の構成情報を指定します。
- 名前: わかりやすい名前を入力します(例:
chronicle)。
- 名前: わかりやすい名前を入力します(例:
[作成] をクリックします。
Azure API Management のログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで、[単一のフィードを構成する] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Azure API Management Logs)。 - [ソースタイプ] として [Microsoft Azure Event Hub] を選択します。
- [ログタイプ] として [Azure API Management] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
Event Hub 接続文字列: 以前に記録した Event Hub 接続文字列を入力します。
Namespace レベルの接続文字列を使用している場合:
EntityPathパラメータを削除したことを確認します。- 次のフィールドでイベントハブ名も指定する必要があります。
イベントハブ レベルの接続文字列を使用している場合:
- 接続文字列をそのまま使用する(
EntityPathを含む) - [イベント ハブ名] フィールドは空白のままにできます。
- 接続文字列をそのまま使用する(
イベントハブ名: イベントハブ名を入力します(例:
apim-logs)。- 名前空間レベルの接続文字列を使用する場合は必須。
- イベントハブ レベルの接続文字列を使用する場合は省略可。
コンシューマー グループ(省略可): コンシューマー グループ名を入力します。
- デフォルトの
$Defaultコンシューマー グループを使用する場合は空白のままにします - 専用のコンシューマー グループを作成した場合は、その名前(
chronicleなど)を入力します。
- デフォルトの
Blob Storage コンテナ名(省略可): チェックポイント設定の場合は、コンテナ名(
checkpointsなど)を入力します。
チェックポイント処理に blob ストレージを提供する場合:
- Azure ストレージ アカウント名: チェックポイント構成のストレージ アカウント名を入力します。
Azure ストレージ アカウント キー: チェックポイント構成のアクセスキーを入力します。
アセットの名前空間: アセットの名前空間
Ingestion labels: このフィードのイベントに適用されるラベル
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
Google SecOps フィードの詳細については、Google SecOps フィードのドキュメントをご覧ください。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
Level_label |
additional.fields |
統合済み |
Sku_label |
additional.fields |
統合済み |
apiId_label |
additional.fields |
統合済み |
apiRevision_label |
additional.fields |
統合済み |
apimSubscriptionId_label |
additional.fields |
統合済み |
backendMethod_label |
additional.fields |
統合済み |
backendProtocol_label |
additional.fields |
統合済み |
backendResponseCode_label |
additional.fields |
統合済み |
backendTime_label |
additional.fields |
統合済み |
cache_label |
additional.fields |
統合済み |
clientProtocol_label |
additional.fields |
統合済み |
durationMs_label |
additional.fields |
統合済み |
eventName_label |
additional.fields |
統合済み |
eventid_label |
additional.fields |
統合済み |
functionInvocationId_label |
additional.fields |
統合済み |
functionName_label |
additional.fields |
統合済み |
hostInstanceId_label |
additional.fields |
統合済み |
hostVersion_label |
additional.fields |
統合済み |
isRequestSuccess_label |
additional.fields |
統合済み |
operationId_label |
additional.fields |
統合済み |
productId_label |
additional.fields |
統合済み |
properties.message |
metadata.description |
直接マッピングされます。 |
time |
metadata.event_timestamp |
ISO8601 として解析 |
has_principal |
metadata.event_type |
マッピング: true → STATUS_UPDATE |
operationName |
metadata.product_event_type |
直接マッピングされます。 |
DeploymentVersion |
metadata.product_version |
直接マッピングされます。 |
properties.method |
network.http.method |
直接マッピングされます。 |
properties.responseCode |
network.http.response_code |
直接マッピングされます。 |
properties.responseSize |
network.received_bytes |
直接マッピングされます。 |
properties.requestSize |
network.sent_bytes |
直接マッピングされます。 |
correlationId |
network.session_id |
直接マッピングされます。 |
properties.clientTlsCipherSuite |
network.tls.cipher |
直接マッピングされます。 |
properties.clientTlsVersion |
network.tls.version |
直接マッピングされます。 |
callerIpAddress |
principal.asset.ip |
統合済み |
callerIpAddress |
principal.ip |
統合済み |
location |
principal.location.name |
直接マッピングされます。 |
properties.url |
principal.url |
直接マッピングされます。 |
properties.userId |
principal.user.userid |
直接マッピングされます。 |
action |
security_result.action |
統合済み |
resultType |
security_result.action |
マッピング: Succeeded → action |
category |
security_result.category_details |
統合済み |
properties.category |
security_result.category_details |
統合済み |
level |
security_result.severity |
直接マッピングされます。 |
resultType |
security_result.summary |
直接マッピングされます。 |
properties.appName |
target.application |
直接マッピングされます。 |
properties.processId |
target.process.pid |
直接マッピングされます。 |
roleInstance_label |
target.resource.attribute.labels |
統合済み |
resourceId |
target.resource.product_object_id |
直接マッピングされます。 |
properties.backendUrl |
target.url |
直接マッピングされます。 |
| なし | metadata.event_type |
定数: GENERIC_EVENT |
| なし | metadata.product_name |
定数: AZURE API MANAGEMENT |
| なし | metadata.vendor_name |
定数: AZURE_API_MANAGEMENT |
| なし | network.tls.version_protocol |
定数: HTTP |
変更ログ
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。