收集 Azure Cosmos DB 日志
解析器版本:1.0
本文档介绍了如何使用 Microsoft Azure Blob Storage 设置 Google Security Operations Feed 来收集 Azure Cosmos DB 日志。
Azure Cosmos DB 是一项全代管式全球分布式多模型数据库服务,专为低延迟、弹性可伸缩性和高可用性而设计。它支持多种 API,包括 NoSQL、MongoDB、Apache Cassandra、Apache Gremlin 和 Table。诊断日志会捕获数据平面请求、控制平面操作、查询运行时统计信息和分区键消耗指标。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 对 Microsoft Azure 门户的特权访问权限,包括:
- 创建存储账号
- 为 Azure Cosmos DB 配置诊断设置
- 管理访问密钥
- 具有适当权限来配置诊断设置的现有 Azure Cosmos DB 账号
配置 Azure 存储账号
创建存储账号
- 在 Azure 门户中,搜索存储账号。
- 点击 + 创建。
提供以下配置详细信息:
设置 值 订阅 选择您的 Azure 订阅 资源组 选择现有组或创建新组 存储账号名称 输入唯一名称(例如 cosmosdbsecops)区域 选择区域(例如 East US)性能 标准(推荐) 冗余 GRS(地理位置冗余存储)或 LRS(本地冗余存储) 点击检查 + 创建。
查看账号概览,然后点击创建。
等待部署完成。
获取存储账号凭据
- 前往您刚刚创建的存储账号。
- 在左侧导航栏中,选择安全性 + 网络下的访问密钥。
- 点击显示密钥。
- 复制并保存以下内容以供日后使用:
- 存储账号名称:您的存储账号名称(例如
cosmosdbsecops) - 密钥 1 或密钥 2:共享访问密钥(采用 base-64 编码的 512 位随机字符串)
- 存储账号名称:您的存储账号名称(例如
获取 Blob 服务端点
- 在同一存储账号中,从左侧导航栏中选择端点。
- 复制并保存 Blob 服务端点网址。
- 示例:
https://cosmosdbsecops.blob.core.windows.net/
- 示例:
配置 Azure Cosmos DB 诊断设置
- 在 Azure 门户中,搜索 Azure Cosmos DB。
- 选择您的 Azure Cosmos DB 账号。
- 在左侧导航栏中,选择监控下的诊断设置。
- 点击 + 添加诊断设置。
- 提供以下配置详细信息:
- 诊断设置名称:输入一个描述性名称(例如
cosmosdb-to-secops)。 - 在日志部分,选择以下类别:
- DataPlaneRequests:数据平面操作日志,包括读取、写入和删除请求
- QueryRuntimeStatistics:已执行查询的查询文本和运行时统计信息
- PartitionKeyStatistics:逻辑分区键的存储空间消耗统计信息
- PartitionKeyRUConsumption:每个逻辑分区键的请求单位消耗量
- ControlPlaneRequests:控制平面操作,包括账号修改、故障切换政策变更、索引编制政策更新、虚拟网络和防火墙规则变更以及 IAM 角色分配
- TableApiRequests:Table API 账号的数据平面请求(如果适用)
- MongoRequests:MongoDB API 账号(如果适用)的数据平面请求
- CassandraRequests:Cassandra API 账号(如果适用)的数据平面请求
- GremlinRequests:Gremlin API 账号(如果适用)的数据平面请求
- 在目标详细信息部分中,选中归档到存储账号复选框。
- 订阅:选择包含您的存储空间的订阅。
- 存储账号:选择您创建的存储账号(例如
cosmosdbsecops)。
- 诊断设置名称:输入一个描述性名称(例如
点击保存。
了解 Blob 容器结构
配置完成后,日志会按以下结构存储:
https://<storage-account>.blob.core.windows.net/ insights-logs-<log-category>/ resourceId=/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/ y=<year>/m=<month>/d=<day>/h=<hour>/m=<minute>/ PT1H.json
诊断设置创建的容器示例:
insights-logs-dataplanerequestsinsights-logs-queryruntimestatisticsinsights-logs-partitionkeystatisticsinsights-logs-partitionkeyruconsumptioninsights-logs-controlplanerequests
在 Google SecOps 中配置 Feed 以注入 Azure Cosmos DB 日志
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
Azure Cosmos DB Logs)。 - 选择 Microsoft Azure Blob Storage V2 作为来源类型。
- 选择 Azure Cosmos DB 作为日志类型。
- 点击下一步。
为以下输入参数指定值:
Azure URI:输入包含容器路径的 Blob 服务端点网址:
https://cosmosdbsecops.blob.core.windows.net/insights-logs-dataplanerequests/
替换以下内容:
cosmosdbsecops:您的 Azure 存储账号名称。insights-logs-dataplanerequests:存储日志的 Blob 容器名称。
- 来源删除选项:根据您的偏好选择删除选项:
- 永不:转移后永不删除任何文件。
- 删除已转移的文件:在成功转移后删除文件。
- 删除已转移的文件和空目录:成功转移后删除文件和空目录。
- 文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。
- 共享密钥:输入您从存储账号中捕获的共享密钥值(访问密钥)。
- 资产命名空间:资产命名空间。
- 注入标签:要应用于此 Feed 中事件的标签。
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
从多个容器提取数据
如果您在诊断设置中选择了多个日志类别,则每个类别都会创建一个单独的 Blob 容器。为要注入的每个容器分别创建一个 Feed:
- 为主要数据平面日志创建 Feed(如上所示)。
- 点击添加新 Feed 以创建其他 Feed。
- 在 Azure URI 中使用相同的存储账号凭据,但使用不同的容器路径。
示例:
- Feed 1(数据平面请求):
https://cosmosdbsecops.blob.core.windows.net/insights-logs-dataplanerequests/ - Feed 2(查询运行时统计信息):
https://cosmosdbsecops.blob.core.windows.net/insights-logs-queryruntimestatistics/ - Feed 3(控制平面请求):
https://cosmosdbsecops.blob.core.windows.net/insights-logs-controlplanerequests/ - Feed 4(分区键 RU 消耗量):
https://cosmosdbsecops.blob.core.windows.net/insights-logs-partitionkeyruconsumption/ Feed 5(分区键统计信息):
https://cosmosdbsecops.blob.core.windows.net/insights-logs-partitionkeystatistics/
配置 Azure 存储防火墙(如果已启用)
如果您的 Azure 存储账号使用防火墙,则必须添加 Google SecOps IP 范围。
- 在 Azure 门户中,前往您的存储账号。
- 在安全性 + 网络下,选择网络。
- 在防火墙和虚拟网络下,选择从所选虚拟网络和 IP 地址启用。
- 在防火墙部分的地址范围下,点击 + 添加 IP 范围。
以 CIDR 表示法添加每个 Google SecOps IP 范围。
如需获取当前的 IP 范围,请执行以下操作:
- 请参阅 IP 许可名单文档
- 或者使用 Feed Management API 以编程方式检索这些信息
点击保存。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
activity_id_label |
additional.fields |
已合并 |
additional_Channel |
additional.fields |
已合并 |
additional_Event_Origin_Id |
additional.fields |
已合并 |
additional_Management_Group_Name |
additional.fields |
已合并 |
additional_Source_System |
additional.fields |
已合并 |
additional_Task |
additional.fields |
已合并 |
auth_token_type_label |
additional.fields |
已合并 |
collection_rid_label |
additional.fields |
已合并 |
connection_mode_label |
additional.fields |
已合并 |
key_type_label |
additional.fields |
已合并 |
number_of_rows_returned_label |
additional.fields |
已合并 |
operation_name_label |
additional.fields |
已合并 |
param_value |
additional.fields |
已映射:true → parameter_label |
parameter_label |
additional.fields |
已合并 |
partition_id_label |
additional.fields |
已合并 |
shapesignature_label |
additional.fields |
已合并 |
signature_label |
additional.fields |
已合并 |
properties.partialipaddress |
intermediary.ip |
已合并 |
Activity |
metadata.description |
直接映射 |
time |
metadata.event_timestamp |
解析为 ISO8601 |
TenantId |
metadata.product_deployment_id |
直接映射 |
EventSourceName |
metadata.product_event_type |
直接映射 |
category |
metadata.product_event_type |
直接映射 |
EventID |
metadata.product_log_id |
直接映射 |
properties.statusCode |
network.http.response_code |
直接映射 |
properties.userAgent |
network.http.user_agent |
直接映射 |
properties.useragent |
network.http.user_agent |
直接映射 |
properties.responseLength |
network.received_bytes |
直接映射 |
properties.requestLength |
network.sent_bytes |
直接映射 |
SubjectDomainName |
principal.administrative_domain |
直接映射 |
domain |
principal.administrative_domain |
直接映射 |
SourceComputerId |
principal.asset.asset_id |
直接映射 |
Computer |
principal.hostname |
直接映射 |
properties.clientIpAddress |
principal.ip |
已合并 |
EventSourceName |
principal.platform |
映射:(?i)Windows → WINDOWS、(?i)mac → MAC、(?i)Linux → LINUX |
SubjectUserName |
principal.user.user_display_name |
直接映射 |
user_name |
principal.user.user_display_name |
直接映射 |
Account |
principal.user.userid |
直接映射 |
SubjectLogonId |
principal.user.userid |
直接映射 |
SubjectUserSid |
principal.user.windows_sid |
直接映射 |
properties.queryexecutionstatus |
security_result.summary |
直接映射 |
TargetDomainName |
target.administrative_domain |
直接映射 |
target_application |
target.application |
已重命名/已映射 |
FilePath |
target.file.full_path |
直接映射 |
FileHash |
target.file.sha256 |
直接映射 |
properties.region |
target.location.country_or_region |
直接映射 |
CommandLine |
target.process.command_line |
直接映射 |
properties.querytext.query |
target.process.command_line |
直接映射 |
Process |
target.process.file.full_path |
直接映射 |
ParentProcessName |
target.process.parent_process.file.full_path |
直接映射 |
ProcessId |
target.process.pid |
直接映射 |
Token_Elevation_Type |
target.resource.attribute.labels |
已合并 |
Workspace_Resource_Id |
target.resource.attribute.labels |
已合并 |
resource_attribute_labels |
target.resource.attribute.labels |
已重命名/已映射 |
properties.databaseName |
target.resource.name |
直接映射 |
properties.databasename |
target.resource.name |
直接映射 |
_ResourceId |
target.resource.product_object_id |
直接映射 |
resourceId |
target.resource.product_object_id |
直接映射 |
properties.collectionName |
target.resource.resource_subtype |
直接映射 |
properties.collectionname |
target.resource.resource_subtype |
直接映射 |
TargetUserName |
target.user.user_display_name |
直接映射 |
TargetLogonId |
target.user.userid |
直接映射 |
TargetUserSid |
target.user.windows_sid |
直接映射 |
| 不适用 | metadata.event_type |
常量:USER_RESOURCE_ACCESS |
| 不适用 | metadata.product_name |
常量:Azure Cosmos DB |
| 不适用 | metadata.vendor_name |
常量:Microsoft |
| 不适用 | principal.platform |
常量:WINDOWS |
| 不适用 | target.resource.resource_type |
常量:DATABASE |
_Internal_WorkspaceResourceId", "TokenElevationType |
target.resource.attribute.labels |
从变更日志映射 |
Channel", "Task", "SourceSystem", "EventOriginId", "ManagementGroupName |
additional.fields |
从变更日志映射 |
更新日志
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。