

# 從未與 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) 的其他範例，請參閱 [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 Application Firewall (WAF) 來保護 API Gateway 免受已知的不良 IP 位址威脅。這可降低攻擊者利用假造請求封鎖真實的日誌事件，造成請求大量湧入 API 的風險。
+ AWS Secrets Manager 權杖值應儲存在您的應用程式效能監控 (APM) 工具中，作為 HTTP 標頭。務必確實定期輪換權杖，這是安全最佳實務。
+ 透過此 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. CloudFormation 堆疊會建立下列資源，假設範例值 `Dynatrace` 已輸入參數中，且在 US-EAST-1 區域中執行。
   + 機密名稱：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
   + 自訂 EventBus 名稱：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**，以查看測試承載的日誌串流或任何錯誤。

**將您的事件匯流排 ARN 與 AWS 事件偵測與回應共用**

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_tw/IDR/latest/userguide/images/example-int-api-gateway.png)


使用下列步驟來設定與 AWS 事件偵測與回應的整合。

1. 建立 Amazon API Gateway 以接受來自 APM 的承載。

1. 定義 Lambda 函式以使用身分驗證權杖進行授權。

1. 執行下列其中一項：
   + (建議方法) 建立 EventBridge 自訂事件匯流排，名為 `$YourApmName-AWSIncidentDetectionResponse-EventBus`。
   + (替代方法) 使用預設 EventBridge 事件匯流排，而不使用自訂事件匯流排。

1. 定義轉換 Lambda 函式來將 AWS 事件偵測與回應識別碼附加至您的承載。您也可以使用此函式來篩選出您要傳送至 AWS 事件偵測與回應的事件。
   + API Gateway 必須調用轉換 Lambda 函式，該函式將會轉換 API Gateway 傳遞的承載。
   + 轉換 Lambda 函式必須在上面第 3 點定義的事件匯流排中寫入轉換後的事件。

1. 設定您的 APM，以將通知傳送至從 API Gateway 產生的 URL。