从未与 EventBridge 直接集成的 APM 摄取警报
AWS 事件检测及响应服务支持使用 Webhook 从未与 Amazon EventBridge 直接集成的第三方 APM 摄取警报。
您可以部署 CloudFormation 模板或手动设置集成。在设置集成之前,请确认在您的账户中创建了 AWS 服务相关角色(SLR)AWSServiceRoleForHealth_EventProcessor。
选项 1:使用 CloudFormation 模板
可以使用 CloudFormation 模板来简化创建集成基础设施的过程,该基础设施是从未与 Amazon EventBridge 直接集成的 APM 中将警报摄取到 AWS 事件检测及响应服务所必需的。
部署此 CloudFormation 模板之前的注意事项
-
此解决方案使用 API Gateway Lambda 授权方,来将在 APM 的有效载荷中传递的密钥令牌与 AWS Secrets Manager 中的令牌进行比较。如果令牌不匹配,则将返回带有显式拒绝的策略。有关更多信息,请参阅 Lambda 授权方。
-
在 AWS 责任共担模式下,您有责任确保您使用的身份验证方法符合组织的安全要求。我们建议使用 AWS Secrets Manager 或类似的服务,而不是将 API 密钥或授权令牌等敏感信息存储为硬编码变量。有关更多信息,请参阅使用 AWS Secrets Manager 创建和管理密钥。
-
有关实施 HMAC 散列消息认证码(HMAC)的其它示例,请参阅 aws-samples Github 页面上的 receive-webhooks
。有关实施令牌授权的更多信息,请参阅 API Gateway 文档中的 TOKEN 授权方 Lambda 函数示例。 -
该解决方案使用 API Gateway 中的 RateLimit、BurstLimit 和 Quota 来控制请求量。这些工具限制了在设定的时间内可以处理的请求数量。这有助于防止系统过载并保持服务稳定。有关节流的更多信息,请参阅 API Gateway 开发人员指南。
-
考虑使用 AWS Web 应用程序防火墙(WAF)来保护 API Gateway 免受已知的错误 IP 地址侵害。这降低了攻击者向 API 发出大量虚假请求以阻止真实日志事件的风险。
-
AWS Secrets Manager 令牌值应作为 HTTP 标头存储在应用程序性能监控(APM)工具中。作为最佳安全实践,请确保定期轮换令牌。
-
通过此 CloudFormation 模板部署的资源(例如:Lambda 和 EventBridge)将产生额外费用。有关这些服务的定价的更多信息,请参阅 AWS 定价
。 -
测试集成后,从
TransformLambdaFunction(Lambda 函数)中移除 logger.info() 语句,以防止有效载荷出现在 Amazon CloudWatch Logs 中。 -
在 AWS 事件检测及响应服务需要从中摄取警报的每个 AWS 账户和区域中部署此 CloudFormation 模板。
准备 CloudFormation 模板:
注意:集成步骤以 Dynatrace 为例,但是此模板可用于任何可以向 API Gateway 发送有效载荷的 APM。
-
下载并打开 CloudFormation 模板
。 -
在模板中找到
APIGWUsagePlan。查看为RateLimit、BurstLimit和Quota Limit配置的值,这些值默认设置为 20、50 和 2000。调整这些值以满足您的要求。 -
在模板中找到
AuthorizerLambdaFunction。此 Lambda 函数用作身份验证机制的示例。它从名为authorizationToken的标头中提取一个令牌值,该标头是从您的 APM 中传递的。您可以修改此代码,使其符合贵组织的安全策略和 APM 要求。 -
在模板中找到
TransformLambdaFunction。将字典路径raw_json["detail"]["ProblemTitle"]替换为指向警报名称的路径(警报名称在 APM 的 JSON 有效载荷中发送)。对于 Dynatrace,将其保持原样。
部署 CloudFormation 模板:
-
在目标账户和 AWS 区域中打开 CloudFormation 控制台。
-
依次选择创建堆栈、使用新资源(标准)。
-
选择选择现有模板、上传模板文件、选择文件,然后上传您本地保存的 CloudFormation 模板。
-
-
指定堆栈详细信息:
-
输入堆栈名称(示例:
DynatraceIntegrationForIDR。) -
APMNameParameter(示例:
Dynatrace。) -
选择下一步。
-
-
配置堆栈选项:
-
滚动到页面底部,然后选中支持 CloudFormation 使用自定义名称创建 IAM 资源的框。
-
-
审核和创建:
-
验证参数值是否正确配置,然后选择“提交”。
-
-
CloudFormation 堆栈会部署必要的资源,来将您的 APM 事件集成到 AWS 事件检测及响应服务。等待直到 CloudFormation 堆栈状态变为 CREATE_COMPLETE。
-
假设示例值
Dynatrace输入到参数中并在 US-EAST-1 区域中执行,CloudFormation 堆栈会创建以下资源。-
密钥名称:DynatraceMySecretTokenName(将针对密钥 APMSecureToken 创建随机密钥值)
-
API Gateway 资源:
-
API 名称:Dynatrace-AWSIncidentDetectionResponse-APIGW
-
阶段名称:Dynatrace-Stage-Prod
-
授权方:Dynatrace-APIGW-Authorizer
-
使用计划:APIGW_Throttling_Plan
-
-
Lambda 函数:
-
用于授权的函数:Dynatrace-AWSIncidentDetectionResponse-Lambda-Authorizer
-
用于转换的函数:Dynatrace-AWSIncidentDetectionResponse-Lambda-Transform
-
-
自定义事件总线名称:Dynatrace-AWSIncidentDetectionResponse-EventBus
-
IAM 角色:
-
TransformLambdaExecutionRole:IDR-TransformLambdaExecutionRole-us-east-1
-
AuthorizerLambdaExecutionRole:IDR-AuthorizerLambdaExecutionRole-us-east-1
-
-
-
记录 Webhook URL 和令牌值:
-
打开 API Gateway 控制台,然后选择作为 CloudFormation 堆栈一部分创建的 API 名称。
-
从左侧导航栏中选择“阶段”,使用 + 号展开阶段名称,然后选择 POST。记录调用 URL。将 APM 中的此 URL 配置为发送警报事件的 Webhook 的目标。
-
打开 AWS Secrets Manager 控制台并选择作为 CloudFormation 堆栈一部分创建的密钥名称。(示例:DynatraceMySecretTokenName。)
-
在“密钥值”选项卡中,选择检索密钥值。您将看到“密钥”为 APMSecureToken。记录密钥值。请勿与任何人分享此密钥值。
-
-
集成测试
部署堆栈后,通过从 APM 发送测试有效载荷来测试集成:
-
导航到 Lambda 控制台并选择
APMNameParameter-AWSIncidentDetectionResponse-Lambda-Transform函数。选择监控选项卡。 -
在指标图表中寻找成功的调用。
-
选择查看 Amazon CloudWatch Logs,以检查日志流中是否有您的测试有效载荷或是否存在任何错误。
与 AWS 事件检测及响应服务共享您的事件总线 ARN
-
打开 Amazon EventBridge 控制台。选择事件总线。
-
复制作为 CloudFormation 堆栈一部分创建的自定义事件总线的 ARN,示例:
arn:aws:events:us-east-1:123456789123:event-bus/Dynatrace-AWSIncidentDetectionResponse-EventBus。-
将此 ARN 添加到警报摄取问卷 - 概述的“第三方 APM 警报”部分中的“EventBridge 事件总线 ARN”字段。
-
-
在接入过程中,AWS 事件检测及响应服务将在此自定义事件总线上创建托管式 EventBridge 规则,以摄取您的 APM 警报。
选项 2:手动集成
使用以下步骤设置与 AWS 事件检测及响应服务的集成。
-
创建 Amazon API Gateway 以接受来自 APM 的有效载荷。
-
定义 Lambda 函数,以便使用身份验证令牌进行授权。
-
执行下列操作之一:
-
(建议)创建名为
$YourApmName-AWSIncidentDetectionResponse-EventBus的 EventBridge 自定义事件总线。 -
(替代)使用默认的 EventBridge 事件总线,而非自定义事件总线。
-
-
定义转换 Lambda 函数来将 AWS 事件检测及响应服务标识符附加到您的有效载荷。您还可以使用此函数筛选要发送到 AWS 事件检测及响应服务的事件。
-
API Gateway 必须调用转换 Lambda 函数,该函数将转换由 API Gateway 传递的有效载荷。
-
转换 Lambda 函数必须在上面第 3 点定义的事件总线中写入转换后的事件。
-
-
将您的 APM 设置为向 API Gateway 生成的 URL 发送通知。