收集 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 存储账号

创建存储账号

  1. 在 Azure 门户中,搜索存储账号。
  2. 点击 + 创建。
  3. 提供以下配置详细信息:

    设置 值
    订阅 选择您的 Azure 订阅
    资源组 选择现有组或创建新组
    存储账号名称 输入一个唯一名称(例如 cosmosdbsecops)
    区域 选择区域(例如 East US)
    性能 标准(推荐)
    冗余 GRS(地理位置冗余存储)或 LRS(本地冗余存储)
  4. 点击检查 + 创建。

  5. 查看账号概览,然后点击创建。

  6. 等待部署完成。

获取存储账号凭据

  1. 前往您刚刚创建的存储账号。
  2. 在左侧导航栏中,选择安全性 + 网络下的访问密钥。
  3. 点击显示密钥。
  4. 复制并保存以下内容以供日后使用:
    • 存储账号名称:您的存储账号名称(例如 cosmosdbsecops)
    • 密钥 1 或密钥 2:共享访问密钥(采用 base-64 编码的 512 位随机字符串)

获取 Blob 服务端点

  1. 在同一存储账号中,从左侧导航栏中选择端点。
  2. 复制并保存 Blob 服务端点网址。
    • 示例:https://cosmosdbsecops.blob.core.windows.net/

配置 Azure Cosmos DB 诊断设置

  1. 在 Azure 门户中,搜索 Azure Cosmos DB。
  2. 选择您的 Azure Cosmos DB 账号。
  3. 在左侧导航栏中,选择监控下的诊断设置。
  4. 点击 + 添加诊断设置。
  5. 提供以下配置详细信息:
    • 诊断设置名称:输入一个描述性名称(例如 cosmosdb-to-secops)。
    • 在日志部分,选择以下类别:
      • DataPlaneRequests:数据平面操作日志,包括读取、写入和删除请求
      • QueryRuntimeStatistics:已执行查询的查询文本和运行时统计信息
      • PartitionKeyStatistics:逻辑分区键的存储空间消耗统计信息
      • PartitionKeyRUConsumption:每个逻辑分区键的请求单位消耗量
      • ControlPlaneRequests:控制平面操作,包括账号修改、故障切换政策变更、索引政策更新、虚拟网络和防火墙规则变更以及 IAM 角色分配
      • TableApiRequests:Table API 账号(如果适用)的数据平面请求
      • MongoRequests:MongoDB API 账号(如果适用)的数据平面请求
      • CassandraRequests:Cassandra API 账号(如果适用)的数据平面请求
      • GremlinRequests:Gremlin API 账号的数据平面请求(如果适用)
    • 在目标详细信息部分中,选中归档到存储账号复选框。
    • 订阅:选择包含您的存储空间的订阅。
    • 存储账号:选择您创建的存储账号(例如 cosmosdbsecops)。
  6. 点击保存。

了解 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-dataplanerequests
  • insights-logs-queryruntimestatistics
  • insights-logs-partitionkeystatistics
  • insights-logs-partitionkeyruconsumption
  • insights-logs-controlplanerequests

在 Google SecOps 中配置 Feed 以注入 Azure Cosmos DB 日志

  1. 前往 SIEM 设置 > Feed。
  2. 点击添加新 Feed。
  3. 在下一页上,点击配置单个 Feed。
  4. 在 Feed 名称字段中,输入 Feed 的名称(例如 Azure Cosmos DB Logs)。
  5. 选择 Microsoft Azure Blob Storage V2 作为来源类型。
  6. 选择 Azure Cosmos DB 作为日志类型。
  7. 点击下一步。
  8. 为以下输入参数指定值:

    • Azure URI:输入包含容器路径的 Blob 服务端点网址:

      https://cosmosdbsecops.blob.core.windows.net/insights-logs-dataplanerequests/
      

    替换以下内容:

    • cosmosdbsecops:您的 Azure 存储账号名称。
    • insights-logs-dataplanerequests:存储日志的 Blob 容器名称。
    • 来源删除选项:根据您的偏好选择删除选项:
      • 永不:转移后永不删除任何文件。
      • 删除已转移的文件:成功转移后删除文件。
      • 删除已转移的文件和空目录:成功转移后删除文件和空目录。
    • 文件存在时间上限:包含在过去指定天数内修改过的文件。默认值为 180 天。
    • 共享密钥:输入您从存储账号中捕获的共享密钥值(访问密钥)。
    • 资源命名空间:资源命名空间。
    • 注入标签:要应用于此 Feed 中事件的标签。
  9. 点击下一步。

  10. 在最终确定界面中查看新的 Feed 配置,然后点击提交。

从多个容器提取数据

如果您在诊断设置中选择了多个日志类别,则每个类别都会创建一个单独的 Blob 容器。为要注入的每个容器创建单独的 Feed:

  1. 为主要数据平面日志创建 Feed(如上所示)。
  2. 点击添加新 Feed 以创建其他 Feed。
  3. 在 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 范围。

  1. 在 Azure 门户中,前往您的存储账号。
  2. 在安全和网络下,选择网络。
  3. 在防火墙和虚拟网络下,选择已启用(从所选虚拟网络和 IP 地址)。
  4. 在防火墙部分的地址范围下,点击 + 添加 IP 范围。
  5. 以 CIDR 表示法添加每个 Google SecOps IP 范围。

    如需获取当前的 IP 范围,请执行以下操作:

  6. 点击保存。

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 专业人士的解答。