如何配置OpenSearch发送安全告警

前提条件

  • 一个 AWS 账户

  • 账号中已经部署用来收集日志的 OpenSearch 服务

  • 账号中的 CloudTrail 日志已经注入到 OpenSearch 中

部署过程

1- 创建 Amazon SNS 主题,并使用 Email 订阅

1. 打开亚马逊云科技控制台,进入 Amazon SNS 服务,创建 Amazon SNS 主题,选择标准主题,输入主题名称。

2. 打开创建的主题,点击“创建订阅”,选择“电子邮件”协议,在终端节点中输入要订阅的邮箱地址,点击“创建订阅”。

3. 检查订阅该主题的邮箱,点击“完成订阅”链接,SNS 主题中的订阅状态变成“已确认”,如下图所示。

2- 创建 IAM 角色,该角色授予 OpenSearch 访问 SNS 发送通知的权限

1. 打开 IAM 控制台,选择角色,点击创建角色,在使用案例中点击“自定义信任策略”,输入如下的自定义策略,点击下一步。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "opensearchservice.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

2. 创建 IAM 策略,把下面模版中的“REPLACE_CREATED_SNS_ARN”替换为上一步骤中创建 SNS 主题的 ARN,点击“下一步”,给策略命名,来创建 IAM 策略。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "VisualEditor0",
			"Effect": "Allow",
			"Action": "sns:Publish",
			"Resource": "REPLACE_CREATED_SNS_ARN"
		}
	]
}

3. 在创建角色的面板中,选择创建的策略,点击下一步,输入角色名称,点击下一步完成角色创建,记录创建角色的 ARN。

3-在 OpenSearch 控制面板中创建发送通知的通道

打开 OpenSearch 控制面板,选择 “Notification”-> “Channels”,点击“Create Channel”,如下图所示输入 Channel 名称,上面创建的 SNS 主题 ARN 和 IAM 角色 ARN。

4-创建告警

接下来我们通过配置告警,结合 SNS 服务自动化发送警报给安全和运维团队。

1. 假设创建查询异常 IP 的告警

告警信息需要 OpenSearch 专用的 Query DSL 查询语句来获取,此处我们可以通过 OpenSearch 自带的功能生成 DSL 语句,获取上一个步骤中告警视图得到的 IP 和访问统计信息。

点击 “Inspect”-> “View:Requests”-> “Request”-> “Copy”我们很容易就得到了生成这个聚合查询的 DSL 查询语句模版。我们也可以点击 “Save”保存这个聚合视图,方便后续使用。

2. 创建告警:打开 OpenSearch 控制面板,选择 “Alerting”-> “Monitors”,点击“Create Monitor”,如下图所示输入 Monitor 名称。按照如下图所示分别输入。

  • 监控类型,按查询语句进行监控

  • 监控的频率,此处定义为每 2 分钟运行一次

  • 数据源,选择 CloudTrail 对应的索引或者别名

3. 输入查询语句,在 Query 输入框中复制在步骤 Query DSL 查询语句,因为自动生成的查询语句使用的是固定时间,我们需要将查询的固定时间修改为相对时间,比如修改为查询过去 10 分钟的聚合数据。

固定时间查询的语句段如下:

{
    "range": {
      "@timestamp": {
        "gte": "2023-09-01T08:15:00.323Z",
        "lte": "2023-09-01T08:30:00.323Z",
        "format": "strict_date_optional_time"
      }
    }
}

相对时间查询过去 10 分钟的的语句段如下:

{
    "range": {
        "@timestamp": {
            "from": "{{period_end}}||-10m",
            "to": "{{period_end}}",
            "include_lower": true,
            "include_upper": true,
            "format": "epoch_millis",
            "boost": 1
        }
    }
}

4. 执行查询,点击右边的 Run 按钮,我们可以得到过去 10 分钟内的聚合查询结果,如下图所示:

5. 创建触发器,本例中过去 10 分钟出现不在规定范围内的 IP 为触发条件。点击 “Add Trigger”,输入触发器名称,以及对应的触发条件,本例的条件为默认值(ctx.results[0].hits.total.value > 0),点击 “Preview condition response”, 我们可以看到条件是否被满足。

6. 创建告警邮件信息,点击 “Add Action”,输入名称,选择我们在上面步骤创建的通道,输入我们发送邮件的主题后,在消息体里面,我们可以编辑消息体的内容,把找到的 IP 地址以及命中的次数发送到邮件中,见如下截图。

参考资料

[blog] 借助 Amazon OpenSearch Service 实现持续安全审计和自动告警

[docs] Configuring alerts in Amazon OpenSearch Service

最后更新于