检测告警迁移 API

编辑

升级 Kibana 后,最新的 Elastic 安全功能将适用于任何新生成的检测告警。但是,为了为现有检测告警启用新功能,可能需要进行迁移。有关特定于您升级的说明,请参阅 升级 Elastic 安全

检测告警的迁移是在索引级别执行的,需要以下步骤

确定要迁移的索引

编辑

您可以使用迁移状态 API 来确定哪些索引包含特定时间段的检测告警,以及每个索引的迁移信息。

请求

编辑

GET <kibana host>:<port>/api/detection_engine/signals/migration_status?from=now-30d

请求查询参数

编辑
名称 类型 描述

from

datemath

符合条件的检测告警的最大存在时间

响应示例

编辑
{
  "indices": [
    {
      "index": ".siem-signals-default-000002",
      "version": 15,
      "signal_versions": [
        {
          "version": 15,
          "count": 100
        },
        {
          "version": 16,
          "count": 87
        }
      ],
      "migrations": [
        {
          "id": "924f7c50-505f-11eb-ae0a-3fa2e626a51d",
          "status": "pending",
          "version": 16,
          "updated": "2021-01-06T20:41:37.173Z"
        }
      ],
      "is_outdated": true
    },
    {
      "index": ".siem-signals-default-000003",
      "version": 16,
      "signal_versions": [
        {
          "version": 16,
          "count": 54
        }
      ],
      "migrations": [],
      "is_outdated": false
    }
  ]
}

上面的响应显示了两个索引:.siem-signals-default-000002 已过时,具有多个版本的检测告警和待处理的迁移,以及 .siem-signals-default-000003,它是当前写入索引,因此是最新的。

未在指定范围内包含检测告警的索引将从响应中过滤掉。

通过以上信息,我们可以编译一个我们希望迁移的索引列表。

查找具有威胁情报数据的过时检测告警

从 7.12.0 到 7.14.2 版本升级到 Elastic Stack 版本 7.15.x 后,您需要迁移使用威胁情报数据丰富过的检测告警,以确保威胁情报在 Elastic Security 中正确显示。运行此查询以查找具有威胁情报数据的过时检测告警

GET .siem-signals-{KIBANA SPACE ID}/_search
{
  "query": {
    "nested": {
      "path": "threat.indicator",
      "query": {
        "exists": {
          "field": "threat.indicator.matched.*"
        }
      }
    }
  }
}

启动迁移

编辑

迁移是按索引启动的。虽然该过程既不具有破坏性,也不会干扰现有数据,但它可能占用大量资源。因此,建议您相应地计划迁移。

请求

编辑

POST <kibana host>:<port>/api/detection_engine/signals/migration

请求主体

编辑
名称 类型 描述 必需

index

String[]

要迁移的索引名称数组

size

Integer

每个批次要迁移的告警数量。对应于 Reindex API 上的 source.size 选项

requests_per_second

Integer

迁移任务的节流,以每秒子请求数表示。对应于 Reindex API 上的 requests_per_second

slices

Integer

迁移任务的子任务数。对应于 Reindex API 上的 slices

响应示例

编辑
{
  "indices": [
    {
      "index": ".siem-signals-default-000001",
      "migration_id": "923f7c50-505f-11eb-ae0a-3fa2e626a51d",
      "migration_index": ".siem-signals-default-000001-r000016"
    }
  ]
}

响应将包括针对每个指定的索引的迁移 ID 和目标索引,以及错误(如果迁移失败)。

完成迁移

编辑

完成端点会将原始索引的别名替换为成功迁移的索引的别名。该端点是幂等的;因此,它可以安全地用于轮询给定的迁移,并在完成后完成它。

原始索引不作为此步骤的一部分删除。在验证迁移索引的完整性后,您可以使用 迁移清理 端点将 30 天删除策略应用于原始的、过时的索引。

如果未成功的迁移已完成,则删除策略将应用于其索引,导致它在 30 天后被删除。

请求

编辑

POST <kibana host>:<port>/api/detection_engine/signals/finalize_migration

请求主体

编辑
名称 类型 描述 必需

migration_ids

String[]

要完成的 `migration_id` 数组

响应示例

编辑
{
  "migrations": [
    {
      "id": "924f7c50-505f-11eb-ae0a-3fa2e626a51d",
      "completed": true,
      "destinationIndex": ".siem-signals-default-000002-r000016",
      "status": "success",
      "sourceIndex": ".siem-signals-default-000002",
      "version": 16,
      "updated": "2021-01-06T22:05:56.859Z"
    }
  ]
}

完成的迁移将显示 completed: true 的响应,并带有相应的 status。如果您在尝试完成迁移时迁移仍在运行,则其响应将显示为 completed: false

迁移清理

编辑

迁移倾向于数据完整性而不是分片大小。因此,未使用或孤立的索引是迁移过程的产物。成功的迁移将导致旧索引和新索引都存在。因此,旧的、孤立的索引可以(并且很可能应该)被删除。

虽然您可以手动删除这些索引,但该端点通过将删除策略应用于相关索引来完成此任务,从而导致它在 30 天后被删除。它还会删除特定于迁移实现的其他工件。

请求

编辑

DELETE <kibana host>:<port>/api/detection_engine/signals/migration

请求主体

编辑
名称 类型 描述 必需

migration_ids

String[]

要完成的 `migration_id` 数组

响应示例

编辑
 {
  "migrations": [
    {
      "id": "924f7c50-505f-11eb-ae0a-3fa2e626a51d",
      "destinationIndex": ".siem-signals-default-000002-r000016",
      "status": "success",
      "sourceIndex": ".siem-signals-default-000002",
      "version": 16,
      "updated": "2021-01-06T22:05:56.859Z"
    }
  ]
}

响应将包括所有已成功删除的迁移。