AWS SQS

AWS SQS或Amazon Simple Queue Services是一种托管队列服务,当以事件的形式发送消息时,它与InsightIDR一起工作。你也可以使用EC2 IAM Roles访问AWS资源

AWS SQS配置

在开始之前,必须为InsightIDR创建一个独占使用的SQS队列。你可以在这里找到如何做到这一点的说明:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html

配置AWS SQS。

  1. 创建一个新的IAM Policy,以便InsightIDR在向该SQS队列发送HTTP请求时使用,示例如下:
         
1
2
“版本”:“2012-10-17”,
3.
“声明”:[
4
5
“效应”:“允许”,
6
“行动”(
7
“sqs: ReceiveMessage”,
8
“sqs: DeleteMessage”
9
],
10
“资源”:(
11
“攻击:aws: sqs::: SqsQueueNameGoesHere”
12
13
14
15
  1. 创建一个新的IAM Group,包含刚才创建的策略。
  2. 创建新的IAM User,只属于新创建的IAM组。确保给这个用户权限receiveMessagedeleteMessage来自SQS队列的调用。

这将被InsightIDR用于访问您的数据,所以建议限制对IAM Group的访问。

  1. 将密钥复制到一个安全的地方,以便稍后配置SQS。

如何配置事件源

  1. 从仪表板中选择数据收集在左边的菜单上。
  2. 当出现“数据采集”页面时,单击设置事件源下拉选择添加事件源
  3. 从“原始数据”部分,单击自定义日志图标。出现“添加事件源”面板。
  4. 选择收集器和事件源。如果需要,还可以命名事件源。
  5. 选择时区与事件源日志的位置匹配。
  1. 选择SQS消息作为集合方法。
  2. 选择您的凭据,或可选创建一个新的凭证.您输入的凭证将是访问密钥和秘密密钥,它们对应于具有权限的AWS IAM角色receiveMessagedeleteMessage调用来自上面的SQS队列。
    • Access Key:您创建的具有IAM权限的用户名
    • Secret Key:用户创建的与IAM权限对应的密码
    • URL:您的AWS控制台中的URL,看起来类似于https://sqs.us-east-1.amazonaws.com/your-queue-name
    • 包含属性:指示Rapid7是否也将获取SQS消息的属性,并将它们与SQS消息体一起发送
  3. 你也可以用EC2我角色
  4. 选择保存

SQS消息结构

SQS在它的消息中发送信息有几种不同的方式:

  • 使用消息属性
  • 没有消息属性
  • 使用消息属性,消息主体是一个JSON对象
  • 没有消息属性,并且消息体是一个JSON对象

带有属性的消息结构

当您使用SQS消息作为Collection方法时,您可以单击包括属性盒子。当您这样做时,发送的消息将如下所示:

         
1
2
“身体”:“MyMessageBody”,
3.
“message_attributes”:(
4
5
“名称”:“MyAttribute1”,
6
“价值”:{
7
“数据类型”:“MyDataType1”,
8
:“stringValue MyStringValue1”
9
10
},
11
12
“名称”:“MyAttribute2”,
13
“价值”:{
14
“数据类型”:“MyDataType2”,
15
:“stringValue MyStringValue2”
16
17
18
19

消息体不包括属性

如果SQS消息体可以解析为JSON,那么它将在Log Search中显示为JSON,而不是字符串中的转义JSON。

当您使用不包含属性的SQS消息作为Collection方法时,消息看起来如下所示:

         
1
2
“身体”:“MyMessageBody”
3.

消息结构是一个JSON对象,包括属性

使用SQS消息作为收集方法时,可以单击包括属性盒子。当你这样做时,如果它们也是一个JSON对象并包含属性,则发送的消息看起来像以下内容:

         
1
2
“身体”:{
3.
“myField”:“括号”
4
" anotherField ": {
5
"anotherNestedField":"嵌套值"
6
7
8
“message_attributes”:(
9
10
“名称”:“MyAttribute1”,
11
“价值”:{
12
“数据类型”:“MyDataType1”,
13
:“stringValue MyStringValue1”
14
15
},
16
17
“名称”:“MyAttribute2”,
18
“价值”:{
19
“数据类型”:“MyDataType2”,
20.
:“stringValue MyStringValue2”
21
22
23
24

消息体是一个没有属性的JSON对象

如果SQS消息体可以解析为JSON,那么它将在Log Search中显示为JSON,而不是字符串中的转义JSON。

当您使用SQS消息作为集合方法,但不包含属性时,如果消息是JSON对象,则发送的消息将如下所示:

         
1
2
“身体”:{
3.
“myField”:“括号”
4
" anotherField ": {
5
"anotherNestedField":"嵌套值"
6
7
8

故障排除

使用以下信息帮助您解决问题:

  • SQS致命错误

致命的SQS错误:签名尚未生效

如果您看到上述错误,则运行此事件源的收集器的系统时间可能与运行SQS的Amazon服务器不同步。在尝试重新配置此事件源之前,请确保正确配置了收集器上的时间同步。