收集 Azure API 管理日志
解析器版本:1.0
本文档介绍了如何创建 Azure 事件中心 Feed,以将 Azure API 管理日志注入到 Google Security Operations。
Azure API 管理是一个混合式多云管理平台,可用于管理所有环境中的 API。它可帮助组织向外部、合作伙伴和内部开发者发布 API,以充分发挥其数据和服务的潜力。API 管理提供用于 API 发现、网关功能、安全政策、分析和开发者互动的工具。诊断日志会捕获有关 API 网关操作的详细信息,包括请求、响应和错误。
准备工作
请确保您满足以下前提条件:
- Google SecOps 实例
- 对 Microsoft Azure 门户的特权访问权限,包括:
- 创建事件中心命名空间
- 创建事件中心
- 为 Azure API 管理配置诊断设置
- 管理访问权限政策
现有的 Azure API 管理服务实例
创建事件中心命名空间
事件中心命名空间是一个管理容器,用于容纳一个或多个事件中心。
- 在 Azure 门户中,搜索事件中心。
- 点击 + 创建。
提供以下配置详细信息:
设置 值 订阅 选择您的 Azure 订阅 资源组 选择现有组或创建新组 命名空间名称 输入唯一名称(例如 secops-apim-eventhub)位置 选择区域(例如 East US)价格层级 标准(建议用于生产环境) 吞吐量单位 从 1 开始,启用自动充气功能(推荐) 点击 Review + create(检查 + 创建)。
查看概览,然后点击创建。
等待部署完成(1-2 分钟)。
创建事件中心
- 部署命名空间后,前往事件中心命名空间。
- 在左侧导航栏中,选择实体下的事件中心。
- 点击 + 活动中心。
提供以下配置详细信息:
设置 值 名称 输入唯一名称(例如 apim-logs)分区数 40(建议采用此值,以便实现最佳的 Google SecOps 伸缩) 消息保留 7 天(建议的最低限度) 拍摄 已停用(Google SecOps 不需要) 点击创建。
获取事件中心连接字符串
Google SecOps 需要连接字符串才能向事件中心进行身份验证。
方案 A:命名空间级连接字符串(推荐)
- 前往事件中心命名空间。
- 在左侧导航栏中,选择设置下的共享访问权限政策。
- 点击默认政策 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:事件中心级连接字符串
- 前往事件中心(而非命名空间)。
- 在左侧导航栏中,选择设置下的共享访问权限政策。
- 点击 + 添加以创建新政策。
- 提供以下配置详细信息:
- 政策名称:输入一个描述性名称(例如
chronicle-read) - 权限:仅选择收听(只读权限)
- 政策名称:输入一个描述性名称(例如
- 点击创建。
- 点击新创建的政策。
- 复制连接字符串 - 主密钥。
请妥善保存此连接字符串。
将 Azure API 管理配置为流式传输到事件中心
- 在 Azure 门户中,搜索 API 管理服务。
- 选择您的 API 管理服务实例。
- 在左侧导航栏中,选择监控下的诊断设置。
- 点击 + 添加诊断设置。
- 提供以下配置详细信息:
- 诊断设置名称:输入一个描述性名称(例如
apim-to-secops)。 - 在日志部分,选择以下类别:
- GatewayLogs:API 网关请求和响应日志
- WebSocketConnectionLogs:WebSocket 连接日志(如果适用)
- DeveloperPortalAuditLogs:开发者门户审核日志(如果适用)
- GatewayLlmLogs:生成式 AI 网关日志(如果适用)
- GatewayMCPLogs:Model Context Protocol (MCP) 服务器日志(如果适用)
- 在目标详细信息部分中,选中流式传输到事件中心复选框。
- 订阅:选择包含 Event Hub 命名空间的订阅。
- 事件中心命名空间:选择您之前创建的命名空间(例如
secops-apim-eventhub)。 - 事件中心名称:选择您创建的事件中心(例如
apim-logs)。 - 事件中心政策名称:选择 RootManageSharedAccessKey 或具有发送权限的自定义政策。
- 诊断设置名称:输入一个描述性名称(例如
点击保存。
(可选)配置 Azure Blob Storage 以进行检查点设置
Google SecOps 可以使用 Azure Blob Storage 来存储事件中心检查点,这些检查点用于跟踪已处理的事件。这样可以防止在 Feed 暂时中断时重复提取数据。
创建用于检查点设置的存储账号
- 在 Azure 门户中,搜索存储账号。
- 点击 + 创建。
提供以下配置详细信息:
设置 值 订阅 选择您的 Azure 订阅 资源组 使用与事件中心相同的资源组 存储账号名称 输入唯一名称(例如 secopsapimcheckpoint)区域 与事件中心位于同一区域 性能 标准 冗余 LRS(本地冗余存储) 点击 Review + create(检查 + 创建)。
点击创建。
创建 Blob 容器
- 前往您刚刚创建的存储账号。
- 在左侧导航栏中,选择数据存储区下的容器。
- 点击 + 容器。
- 提供以下配置详细信息:
- 名称:输入
checkpoints - 公开访问权限级别:私密(不允许匿名访问)
- 名称:输入
- 点击创建。
获取存储账号凭据
- 在存储账号中,选择安全性 + 网络下的访问密钥。
- 点击显示密钥。
- 复制并保存:
- 存储账号名称:存储账号的名称
- 密钥 1:访问密钥值
您将在创建 Google SecOps Feed 时提供这些值。
(可选)创建专用消费者群组
默认情况下,事件中心提供名为 $Default 的消费者群组。对于生产环境,建议为 Google SecOps 创建专用消费者群组。
- 前往事件中心(而非命名空间)。
- 在左侧导航栏中,选择实体下的消费群体。
- 点击 + 消费群体。
- 提供以下配置详细信息:
- 名称:输入一个描述性名称(例如
chronicle)
- 名称:输入一个描述性名称(例如
点击创建。
在 Google SecOps 中配置 Feed 以注入 Azure API 管理日志
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
Azure API Management Logs)。 - 选择 Microsoft Azure Event Hub 作为来源类型。
- 选择 Azure API 管理作为日志类型。
- 点击下一步。
为以下输入参数指定值:
Event Hub 连接字符串:输入您之前捕获的 Event Hub 连接字符串
如果使用命名空间级连接字符串:
- 确保您已移除
EntityPath参数 - 您还必须在下一个字段中提供事件中心名称
- 确保您已移除
如果使用 Event Hub 级连接字符串:
- 按原样使用连接字符串(包括
EntityPath) - 事件中心名称字段可以留空
- 按原样使用连接字符串(包括
Event Hub 名称:输入 Event Hub 名称(例如
apim-logs)- 如果使用命名空间级连接字符串,则为必需属性。
- 如果使用事件中心级连接字符串,则为可选。
消费群体(可选):输入消费群体名称
- 留空可使用默认的
$Default使用方群组 - 如果您创建了专用消费群组,请输入其名称(例如
chronicle)
- 留空可使用默认的
Blob Storage 容器名称(可选):对于检查点,请输入容器名称(例如
checkpoints)
如果提供 Blob 存储空间用于检查点设置:
- Azure 存储账号名称:输入来自检查点配置的存储账号名称
Azure 存储账号密钥:输入来自检查点配置的访问密钥
资产命名空间:资产命名空间
注入标签:要应用于此 Feed 中事件的标签
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
如需详细了解 Google SecOps Feed,请参阅 Google SecOps Feed 文档。
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 专业人士的解答。