在使用输入转换器(Input Transformer)进行去重以及添加类别和严重性值时,无法从EventBridge创建新的OpsItems

0

【以下的问题经过翻译处理】 我可以使用具有以下事件模式的 EventBridge 规则为 EC2、SecurityGroup 或 VPC 配置更改生成新的 OpsItem。

{ "source": "aws.config", "detail-type": "Config Configuration Item Change", "detail": { "messageType": "ConfigurationItemChangeNotification", "configurationItem": { "resourceType": "AWS::EC2::Instance", "AWS::EC2::SecurityGroup", "AWS::EC2::VPC" } } }

当使用匹配事件作为输入时,规则和目标运行得很好,但我注意到使用 AWS 向导启动一个 EC2 至少会创建三个 OpsItems,每个资源类型一个。因此,我想实现重复数据删除字符串,尽可能将生成的 OpsItem 数量减少到一个,我还想为新的 OpsItem 附加类别和严重性。我试图按照 AWS 文档的建议使用输入转换器,但即使是最简单的输入转换器,在应用时也会阻止生成任何新的 OpsItem。在测试时,我还确保之前的所有 OpsItems 都已解决。有谁能告诉我,在使用这种输入转换器配置时,是什么原因阻止了任何新 OpsItems 的创建?

这是我当前配置的内容。

输入路径:

  "awsAccountId": "$.detail.configurationItem.awsAccountId",
  "awsRegion": "$.detail.configurationItem.awsRegion",
  "configurationItemCaptureTime": "$.detail.configurationItem.configurationItemCaptureTime",
  "detail-type": "$.detail-type",
  "messageType": "$.detail.messageType",
  "notificationCreationTime": "$.detail.notificationCreationTime",
  "region": "$.region",
  "resourceId": "$.detail.configurationItem.resourceId",
  "resourceType": "$.detail.configurationItem.resourceType",
  "resources": "$.resources",
  "source": "$.source",
  "time": "$.time"
}

输入模板:

{
  "awsAccountId": "<awsAccountId>",
  "awsRegion": "<awsRegion>",
  "configurationItemCaptureTime": "<configurationItemCaptureTime>",
  "resourceId": "<resourceId>",
  "resourceType": "<resourceType>",
  "title": "Template under ConfigDrift-EC2-Dedup4",
  "description": "Configuration Drift Detected.",
  "category": "Security",
  "severity": "3",
  "origination": "EventBridge Rule - ConfigDrift-EC2-Dedup",
  "detail-type": "<detail-type>",
  "source": "<source>",
  "time": "<time>",
  "region": "<region>",
  "resources": "<resources>",
  "messageType": "<messageType>",
  "notificationCreationTime": "<notificationCreationTime>",
  "operationalData": {
    "/aws/dedup": {
      "type": "SearchableString",
      "value": "{"dedupString":"ConfigurationItemChangeNotification"}"
    }
  }
}

这些配置涵盖了输入路径和输入模板,用于设置OpsItems的属性,包括类别(category)和严重性(severity)等信息。如果你的OpsItems在应用这些配置后仍然无法生成,请检查AWS X-Ray和AWS CloudWatch Logs等日志,以查看是否有任何有用的错误或日志消息,以帮助进一步调试问题。

以下是使用AWS提供的示例事件"Config Configuration Item Change"时的输出示例:

  "awsAccountId": "123456789012",
  "awsRegion": "us-east-1",
  "configurationItemCaptureTime": "2022-03-16T01:10:50.837Z",
  "resourceId": "fs-01f0d526165b57f95",
  "resourceType": "AWS::EFS::FileSystem",
  "title": "Template under ConfigDrift-EC2-Dedup4",
  "description": "Configuration Drift Detected.",
  "category": "Security",
  "severity": "3",
  "origination": "EventBridge Rule - ConfigDrift-EC2-Dedup",
  "detail-type": "Config Configuration Item Change",
  "source": "aws.config",
  "time": "2022-03-16T01:10:51Z",
  "region": "us-east-1",
  "resources": "arn:aws:elasticfilesystem:us-east-1:123456789012:file-system/fs-01f0d526165b57f95",
  "messageType": "ConfigurationItemChangeNotification",
  "notificationCreationTime": "2022-03-16T01:10:51.976Z",
  "operationalData": {
    "/aws/dedup": {
      "type": "SearchableString",
      "value": "{"dedupString":"ConfigurationItemChangeNotification"}"
    }
  }
}
profile picture
专家
已提问 5 个月前47 查看次数
1 回答
0

【以下的回答经过翻译处理】 为了调查这个问题,我设置了与你类似的工作流程:

  1. 使用与你相同的事件模式,设置EventBridge规则以侦测Config服务中的 "Config Configuration Item Change" 事件。
  2. 目标是Systems Manager Ops Item。
  3. 使用输入转换器配置目标,以按照你指定的格式发送数据。

我能够复制你所描述的相同行为:在我的前几个测试中,没有使用输入转换器,Ops项目被正确创建(我只是通过修改安全组来触发规则)。但是,当实施你提供的输入转换器配置时,我遇到了同样的阻碍,Ops项目未被创建,规则报告了一个 "Failed Invocation" 错误。

我在 EventBridge 规则目标上设置了DLQ,并发现 Failed Invocation 是由以下错误引发的:

'ERROR_MESSAGE': {'stringValue': 'Invalid input for target.'}

检查 CreateOpsItem API 的必需参数,原来Ops Items创建失败是因为事件规则传递的参数不符合要求。创建Ops Items需要一组特定的参数,其中一些由你的输入转换器提供,但传递的其余字段不受支持,不适用于CreateOpsItem调用的一部分。

没有输入转换器(Input Transformer,)时,原始事件数据似乎只会作为 "operationalData" 字段传递。但是,在使用输入转换器时,似乎需要指定正确的期望字段。

为了测试这一点,我将输入路径简化为仅包括CreateOpsItem调用的顶级字段所期望的字段。此外,为了确保你可以将其他自定义事件数据作为Ops项目的一部分传递,我使用了其他可变的事件数据作为操作数据键。请注意:操作数据键不能以以下内容开头:amazon、aws、amzn、ssm、/amazon、/aws、/amzn、/ssm,因此我将它们更改为简单的 "account" 和 "region"。

输入路径:

{
  "awsAccountId": "$.detail.configurationItem.awsAccountId",
  "awsRegion": "$.detail.configurationItem.awsRegion",
  "configurationItemCaptureTime": "$.detail.configurationItem.configurationItemCaptureTime",
  "detail-type": "$.detail-type",
  "messageType": "$.detail.messageType",
  "notificationCreationTime": "$.detail.notificationCreationTime",
  "region": "$.region",
  "resourceId": "$.detail.configurationItem.resourceId",
  "resourceType": "$.detail.configurationItem.resourceType",
  "resources": "$.resources",
  "source": "$.source",
  "time": "$.time"
}

输入模版:

{
	"title": "Template under ConfigDrift-EC2-Dedup4",
	"description": "Configuration Drift Detected.",
	"category": "Security",
	"source": "EC2",
	"severity": "3",
	"operationalData": {
		"/aws/dedup": {
			"type": "SearchableString",
			"value": "{\"dedupString\":\"ConfigurationItemChangeNotification\"}"
		},
		"account": {
			"value": "<awsAccountId>"
		},
		"region": {
			"value": "<awsRegion>"
		}
	}
}

使用这个输入转换器(Input Transformer )配置再次触发规则,Ops Item成功创建,其中包括dedupString作为OpsItem详情,以及通过操作数据字段传递的account和region变量。

如果你希望传递更多原始的自定义字段,而这些字段不是CreateOpsItem调用的顶级字段,你可以像上面所示一样将它们作为自定义操作数据键值对传递。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则