如何配置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 地址以及命中的次数发送到邮件中,见如下截图。

参考资料
最后更新于