View a markdown version of this page

从未与 EventBridge 直接集成的 APM 摄取警报 - AWS 事件检测及响应服务用户指南

从未与 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 中的 RateLimitBurstLimitQuota 来控制请求量。这些工具限制了在设定的时间内可以处理的请求数量。这有助于防止系统过载并保持服务稳定。有关节流的更多信息,请参阅 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。

  1. 下载并打开 CloudFormation 模板

  2. 在模板中找到 APIGWUsagePlan。查看为 RateLimitBurstLimitQuota Limit 配置的值,这些值默认设置为 20、50 和 2000。调整这些值以满足您的要求。

  3. 在模板中找到 AuthorizerLambdaFunction。此 Lambda 函数用作身份验证机制的示例。它从名为 authorizationToken 的标头中提取一个令牌值,该标头是从您的 APM 中传递的。您可以修改此代码,使其符合贵组织的安全策略和 APM 要求。

  4. 在模板中找到 TransformLambdaFunction。将字典路径 raw_json["detail"]["ProblemTitle"] 替换为指向警报名称的路径(警报名称在 APM 的 JSON 有效载荷中发送)。对于 Dynatrace,将其保持原样。

部署 CloudFormation 模板:

  1. 在目标账户和 AWS 区域中打开 CloudFormation 控制台。

  2. 依次选择创建堆栈、使用新资源(标准)

    • 选择选择现有模板上传模板文件选择文件,然后上传您本地保存的 CloudFormation 模板。

  3. 指定堆栈详细信息:

    • 输入堆栈名称(示例:DynatraceIntegrationForIDR。)

    • APMNameParameter(示例:Dynatrace。)

    • 选择下一步

  4. 配置堆栈选项:

    • 滚动到页面底部,然后选中支持 CloudFormation 使用自定义名称创建 IAM 资源的框。

  5. 审核和创建:

    • 验证参数值是否正确配置,然后选择“提交”。

  6. CloudFormation 堆栈会部署必要的资源,来将您的 APM 事件集成到 AWS 事件检测及响应服务。等待直到 CloudFormation 堆栈状态变为 CREATE_COMPLETE

  7. 假设示例值 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

  8. 记录 Webhook URL 和令牌值:

    • 打开 API Gateway 控制台,然后选择作为 CloudFormation 堆栈一部分创建的 API 名称。

    • 从左侧导航栏中选择“阶段”,使用 + 号展开阶段名称,然后选择 POST。记录调用 URL。将 APM 中的此 URL 配置为发送警报事件的 Webhook 的目标。

    • 打开 AWS Secrets Manager 控制台并选择作为 CloudFormation 堆栈一部分创建的密钥名称。(示例:DynatraceMySecretTokenName。

      • 在“密钥值”选项卡中,选择检索密钥值。您将看到“密钥”为 APMSecureToken。记录密钥值。请勿与任何人分享此密钥值。

集成测试

部署堆栈后,通过从 APM 发送测试有效载荷来测试集成:

  1. 导航到 Lambda 控制台并选择 APMNameParameter-AWSIncidentDetectionResponse-Lambda-Transform 函数。选择监控选项卡。

  2. 在指标图表中寻找成功的调用。

  3. 选择查看 Amazon CloudWatch Logs,以检查日志流中是否有您的测试有效载荷或是否存在任何错误。

与 AWS 事件检测及响应服务共享您的事件总线 ARN

  1. 打开 Amazon EventBridge 控制台。选择事件总线。

  2. 复制作为 CloudFormation 堆栈一部分创建的自定义事件总线的 ARN,示例:arn:aws:events:us-east-1:123456789123:event-bus/Dynatrace-AWSIncidentDetectionResponse-EventBus

  3. 在接入过程中,AWS 事件检测及响应服务将在此自定义事件总线上创建托管式 EventBridge 规则,以摄取您的 APM 警报。

选项 2:手动集成

该图显示了使用 API Gateway 进行集成的示例。

使用以下步骤设置与 AWS 事件检测及响应服务的集成。

  1. 创建 Amazon API Gateway 以接受来自 APM 的有效载荷。

  2. 定义 Lambda 函数,以便使用身份验证令牌进行授权。

  3. 执行下列操作之一:

    • (建议)创建名为 $YourApmName-AWSIncidentDetectionResponse-EventBus 的 EventBridge 自定义事件总线。

    • (替代)使用默认的 EventBridge 事件总线,而非自定义事件总线。

  4. 定义转换 Lambda 函数来将 AWS 事件检测及响应服务标识符附加到您的有效载荷。您还可以使用此函数筛选要发送到 AWS 事件检测及响应服务的事件。

    • API Gateway 必须调用转换 Lambda 函数,该函数将转换由 API Gateway 传递的有效载荷。

    • 转换 Lambda 函数必须在上面第 3 点定义的事件总线中写入转换后的事件。

  5. 将您的 APM 设置为向 API Gateway 生成的 URL 发送通知。