

# 从未与 EventBridge 直接集成的 APM 摄取警报
<a name="idr-gs-ingest-apm-webhooks"></a>

AWS 事件检测及响应服务支持使用 Webhook 从未与 Amazon EventBridge 直接集成的第三方 APM 摄取警报。

您可以部署 CloudFormation 模板或手动设置集成。在设置集成之前，请确认在您的账户中[创建了](https://docs.aws.amazon.com/IDR/latest/userguide/idr-gs-access-prov.html) AWS 服务相关角色（SLR）`AWSServiceRoleForHealth_EventProcessor`。

## 选项 1：使用 CloudFormation 模板
<a name="idr-gs-apm-webhook-cfn"></a>

可以使用 CloudFormation 模板来简化创建集成基础设施的过程，该基础设施是从未与 Amazon EventBridge 直接集成的 APM 中将警报摄取到 AWS 事件检测及响应服务所必需的。

**部署此 CloudFormation 模板之前的注意事项**
+ 此解决方案使用 API Gateway Lambda 授权方，来将在 APM 的有效载荷中传递的密钥令牌与 AWS Secrets Manager 中的令牌进行比较。如果令牌不匹配，则将返回带有显式拒绝的策略。有关更多信息，请参阅 [Lambda 授权方](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html)。
+ 在 AWS 责任共担模式下，您有责任确保您使用的身份验证方法符合组织的安全要求。我们建议使用 AWS Secrets Manager 或类似的服务，而不是将 API 密钥或授权令牌等敏感信息存储为硬编码变量。有关更多信息，请参阅[使用 AWS Secrets Manager 创建和管理密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/managing-secrets.html)。
+ 有关实施 HMAC 散列消息认证码（HMAC）的其它示例，请参阅 [aws-samples Github 页面上的 receive-webhooks](https://github.com/aws-samples/webhooks/tree/main/receive-webhooks)。有关实施令牌授权的更多信息，请参阅 API Gateway 文档中的 [TOKEN 授权方 Lambda 函数示例](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html#api-gateway-lambda-authorizer-token-lambda-function-create)。
+ 该解决方案使用 API Gateway 中的 **RateLimit**、**BurstLimit** 和 **Quota** 来控制请求量。这些工具限制了在设定的时间内可以处理的请求数量。这有助于防止系统过载并保持服务稳定。有关节流的更多信息，请参阅 [API Gateway 开发人员指南](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-request-throttling.html)。
+ 考虑使用 AWS Web 应用程序防火墙（WAF）来保护 API Gateway 免受已知的错误 IP 地址侵害。这降低了攻击者向 API 发出大量虚假请求以阻止真实日志事件的风险。
+ AWS Secrets Manager 令牌值应作为 HTTP 标头存储在应用程序性能监控（APM）工具中。作为最佳安全实践，请确保定期轮换令牌。
+ 通过此 CloudFormation 模板部署的资源（例如：Lambda 和 EventBridge）将产生额外费用。有关这些服务的定价的更多信息，请参阅 [AWS 定价](https://aws.amazon.com/pricing/)。
+ 测试集成后，从 `TransformLambdaFunction`（Lambda 函数）中移除 logger.info() 语句，以防止有效载荷出现在 Amazon CloudWatch Logs 中。
+ 在 AWS 事件检测及响应服务需要从中摄取警报的每个 AWS 账户和区域中部署此 CloudFormation 模板。

**准备 CloudFormation 模板：**

**注意：**集成步骤以 Dynatrace 为例，但是此模板可用于任何可以向 API Gateway 发送有效载荷的 APM。

1. 下载并打开 [CloudFormation 模板](https://dcl74d3hc5lj1.cloudfront.net/apms/ThirdPartyApmWebhookIntegration.json)。

1. 在模板中找到 `APIGWUsagePlan`。查看为 `RateLimit`、`BurstLimit` 和 `Quota Limit` 配置的值，这些值默认设置为 20、50 和 2000。调整这些值以满足您的要求。

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

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

**部署 CloudFormation 模板：**

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

1. 依次选择**创建堆栈、使用新资源（标准）**。
   + 选择**选择现有模板**、**上传模板文件**、**选择文件**，然后上传您本地保存的 CloudFormation 模板。

1. 指定堆栈详细信息：
   + 输入堆栈名称（*示例：`DynatraceIntegrationForIDR`*。）
   + APMNameParameter（*示例：`Dynatrace`*。）
   + 选择**下一步**。

1. 配置堆栈选项：
   + 滚动到页面底部，然后选中支持 CloudFormation 使用自定义名称创建 IAM 资源的框。

1. 审核和创建：
   + 验证参数值是否正确配置，然后选择“提交”。

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

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

1. 记录 Webhook URL 和令牌值：
   + 打开 API Gateway 控制台，然后选择作为 CloudFormation 堆栈一部分创建的 API 名称。
   + 从左侧导航栏中选择“阶段”，使用 \+ 号展开阶段名称，然后选择 POST。记录**调用 URL**。将 APM 中的此 URL 配置为发送警报事件的 Webhook 的目标。
   + 打开 AWS Secrets Manager 控制台并选择作为 CloudFormation 堆栈一部分创建的密钥名称。（*示例：DynatraceMySecretTokenName。*）
     + 在“密钥值”选项卡中，选择**检索密钥值**。您将看到“密钥”为 APMSecureToken。记录密钥值。请勿与任何人分享此密钥值。

**集成测试**

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

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

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

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

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

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

1. 复制作为 CloudFormation 堆栈一部分创建的**自定义事件总线**的 ARN，*示例：`arn:aws:events:us-east-1:123456789123:event-bus/Dynatrace-AWSIncidentDetectionResponse-EventBus`*。
   + 将此 ARN 添加到[警报摄取问卷 - 概述](idr-gs-questionnaire.md#idr-gs-alarm-questionnaire)的“第三方 APM 警报”部分中的“EventBridge 事件总线 ARN”字段。

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

## 选项 2：手动集成
<a name="idr-gs-apm-webhook-manual"></a>

![该图显示了使用 API Gateway 进行集成的示例。](http://docs.aws.amazon.com/zh_cn/IDR/latest/userguide/images/example-int-api-gateway.png)


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

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

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

1. 执行下列操作之一：
   + （建议）创建名为 `$YourApmName-AWSIncidentDetectionResponse-EventBus` 的 EventBridge 自定义事件总线。
   + （替代）使用默认的 EventBridge 事件总线，而非自定义事件总线。

1. 定义转换 Lambda 函数来将 AWS 事件检测及响应服务标识符附加到您的有效载荷。您还可以使用此函数筛选要发送到 AWS 事件检测及响应服务的事件。
   + API Gateway 必须调用转换 Lambda 函数，该函数将转换由 API Gateway 传递的有效载荷。
   + 转换 Lambda 函数必须在上面第 3 点定义的事件总线中写入转换后的事件。

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