在使用输入转换器(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"}"
    }
  }
}
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen