

# EventBridge と直接統合していない APM からアラームを取り込む
<a name="idr-gs-ingest-apm-webhooks"></a>

AWS Incident Detection and Response では、Amazon EventBridge と直接統合していないサードパーティーの APM からアラームを取り込む場合のウェブフックの使用をサポートしています。

CloudFormation テンプレートをデプロイすることも、この統合を手動で設定することもできます。統合を設定する前に、AWS のサービスにリンクされたロール (SLR) `AWSServiceRoleForHealth_EventProcessor` がアカウントに[作成](https://docs.aws.amazon.com/IDR/latest/userguide/idr-gs-access-prov.html)されていることを確認します。

## オプション 1: CloudFormation テンプレートの使用
<a name="idr-gs-apm-webhook-cfn"></a>

CloudFormation テンプレートを使用すると、Amazon EventBridge と直接統合されていない APM から AWS Incident Detection and Response にアラームを取り込むために必要な統合インフラストラクチャを作成するプロセスを簡素化できます。

**この CloudFormation テンプレートをデプロイする前に考慮すべき点**
+ このソリューションでは、API Gateway Lambda オーソライザーを使用して、APM からペイロードに渡されたシークレットトークンを AWS Secrets Manager のトークンと比較します。トークンが一致しない場合、明示的な拒否を含むポリシーが返されます。詳細については、「[Lambda オーソライザー](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html)」を参照してください。
+ AWS の責任共有モデルでは、組織のセキュリティ要件を満たす認証アプローチを使用するのはお客様の責任となります。API キーや認可トークンなどの機密情報をハードコードされた変数として保存する代わりに、AWS Secrets Manager または同様のサービスを使用することをお勧めします。詳細については、「[AWS Secrets Manager を使用したシークレットの作成および管理](https://docs.aws.amazon.com/secretsmanager/latest/userguide/managing-secrets.html)」を参照してください。
+ Hash-based Message Authentication Code (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 ウェブアプリケーションファイアウォール (WAF) を使用して、API Gateway を既知の不正な IP アドレスから保護することを検討してください。これにより、攻撃者が実際のログイベントをブロックする可能性のあるフェイクリクエストで API をフラッディングするリスクが軽減されます。
+ AWS Secrets Manager トークン値は、HTTP ヘッダーとしてアプリケーションパフォーマンスモニタリング (APM) ツールに保存する必要があります。セキュリティのベストプラクティスとして、トークンを定期的にローテーションしてください。
+ この CloudFormation テンプレートを介してデプロイされたリソース (Lambda や EventBridge など) には、追加コストが発生します。これらのサービスの料金の詳細については、「[AWS の料金](https://aws.amazon.com/pricing/)」を参照してください。
+ 統合をテストしたら、logger.info() ステートメントを `TransformLambdaFunction` (Lambda 関数) から削除して、ペイロードが Amazon CloudWatch Logs に表示されないようにします。
+ この CloudFormation テンプレートは、AWS Incident Detection and Response がアラームを取り込む必要があるすべての AWS アカウントとリージョンにデプロイします。

**CloudFormation テンプレートの準備:**

**注意:** 統合ステップでは例として Dynatrace を使用しますが、このテンプレートは API Gateway にペイロードを送信できる任意の APM に使用できます。

1. [CloudFormation テンプレート](https://dcl74d3hc5lj1.cloudfront.net/apms/ThirdPartyApmWebhookIntegration.json)をダウンロードして開きます。

1. テンプレートで `APIGWUsagePlan` を見つけます。デフォルトでは 20、50、2000 に設定されている `RateLimit`、`BurstLimit`、`Quota Limit` に設定された値を確認します。要件を満たすように値を調整します。

1. テンプレートで `AuthorizerLambdaFunction` を見つけます。この Lambda 関数は、認証メカニズムの例となります。APM から渡される `authorizationToken` というヘッダーからトークン値を抽出します。このコードは、組織のセキュリティポリシーと 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 Incident Detection and Response に統合するために必要なリソースをデプロイします。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. ウェブフックの URL とトークン値を記録します。
   + API Gateway コンソールを開き、CloudFormation スタックの一部として作成された API 名を選択します。
   + 左側のナビゲーションからステージを選択し、\+ 記号を使用してステージ名を展開してから、POST を選択します。**呼び出し URL** を記録します。APM で、アラームイベントのウェブフックの送信先としてこの URL を設定します。
   + AWS Secrets Manager コンソールを開き、CloudFormation スタックの一部として作成されたシークレット名を選択します (*例: DynatraceMySecretTokenName*)。
     + [シークレット値] タブで、**[シークレットの値を取得する]** を選択します。シークレットキーは APMSecureToken と表示されます。シークレット値を記録します。このシークレット値を誰とも共有しないでください。

**インテグレーションテスト**

スタックをデプロイしたら、APM からテストペイロードを送信して統合をテストします。

1. Lambda コンソールに移動して、`APMNameParameter-AWSIncidentDetectionResponse-Lambda-Transform` 関数を選択します。[**Monitor**] (モニタリング) タブを選択します。

1. メトリクスグラフで正常な呼び出しを探します。

1. **[Amazon CloudWatch Logs を表示する]** を選択して、テストペイロードまたはエラーのログストリームを確認します。

**AWS Incident Detection and Response へのイベントバス 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 Incident Detection and Response は、このカスタムイベントバスにマネージド EventBridge ルールを作成して APM アラームを取り込みます。

## オプション 2: 手動の統合
<a name="idr-gs-apm-webhook-manual"></a>

![API Gateway を使用した統合の例を示す図。](http://docs.aws.amazon.com/ja_jp/IDR/latest/userguide/images/example-int-api-gateway.png)


次の手順を使用して、AWS Incident Detection and Response との統合を設定します。

1. APM からのペイロードを受け入れる Amazon API Gateway を作成します。

1. 認証トークンを使用して認可用の Lambda 関数を定義します。

1. 次のいずれかを実行します。
   + (推奨) `$YourApmName-AWSIncidentDetectionResponse-EventBus` という名前の EventBridge カスタムイベントバスを作成します。
   + (代替方法) カスタムイベントバスの代わりにデフォルトの EventBridge イベントバスを使用します。

1. Transform Lambda 関数を定義して、AWS Incident Detection and Response 識別子をペイロードに追加します。この関数を使用すると、AWS Incident Detection and Response に送信するイベントをフィルタリングすることもできます。
   + API Gateway は、API Gateway によって渡されるペイロードを変換する Transform Lambda 関数を呼び出す必要があります。
   + Transform Lambda 関数は、上記のポイント 3 で定義されたイベントバスに、変換されたイベントを書き込む必要があります。

1. API Gateway で生成された URL に通知を送信するよう APM を設定します。