

# EventBridge와 직접 통합하지 않고도 APM에서 경보 수집
<a name="idr-gs-ingest-apm-webhooks"></a>

AWS 사고 탐지 및 대응은 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 사고 탐지 및 대응에 경보를 수집하는 데 필요한 통합 인프라를 생성하는 프로세스를 간소화하는 데 사용할 수 있습니다.

**이 CloudFormation 템플릿을 배포하기 전 고려 사항**
+ 이 솔루션은 API Gateway Lambda 권한 부여자를 사용하여 페이로드에서 전달된 보안 토큰을 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)를 참조하세요.
+ 해시 기반 메시지 인증 코드(HMAC)를 구현하는 추가 예제는 [aws-samples Github 페이지의 receive-webhooks](https://github.com/aws-samples/webhooks/tree/main/receive-webhooks)를 참조하세요. 토큰 권한 부여 구현에 대한 자세한 내용은 API Gateway 설명서의 [예제 토큰 권한 부여자 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 게이트웨이 개발자 안내서](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-request-throttling.html)를 참조하세요.
+ AWS 웹 애플리케이션 방화벽(WAF)을 사용하여 알려진 잘못된 IP 주소로부터 API Gateway를 보호하는 것이 좋습니다. 이렇게 하면 공격자가 실제 로그 이벤트를 차단할 수 있는 가짜 요청으로 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`을 찾습니다. 기본적으로 20, 50 및 2,000으로 설정된 `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 사고 탐지 및 대응에 통합하는 데 필요한 리소스를 배포합니다. CloudFormation 스택 상태가 **CREATE\_COMPLETE**가 될 때까지 기다립니다.

1. CloudFormation 스택은 예시 값 `Dynatrace`가 파라미터에 입력되고 US-EAST-1 리전에서 실행되었다고 가정할 때 아래와 같은 리소스를 생성합니다.
   + 보안 암호 이름: DynatraceMySecretTokenName(보안 암호 키 APMSecureToken에 대해 임의의 보안 암호 값이 생성됨)
   + API 게이트웨이 리소스:
     + 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` 함수를 선택합니다. **모니터링** 탭을 선택합니다.

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`*).
   + [경보 수집 설문지 - 개요](idr-gs-questionnaire.md#idr-gs-alarm-questionnaire)의 ‘타사 APM 경보’ 섹션에 있는 ‘EventBridge 이벤트 버스 ARN’ 필드에 이 ARN을 추가합니다.

1. 온보딩 프로세스 중에 AWS 사고 탐지 및 대응은 이 사용자 지정 이벤트 버스에 관리형 EventBridge 규칙을 생성하여 APM 경보를 수집합니다.

## 옵션 2: 수동 통합
<a name="idr-gs-apm-webhook-manual"></a>

![API Gateway를 사용한 통합의 예를 보여 주는 다이어그램입니다.](http://docs.aws.amazon.com/ko_kr/IDR/latest/userguide/images/example-int-api-gateway.png)


다음 단계에 따라 AWS 사고 탐지 및 대응과의 통합을 설정합니다.

1. Amazon API Gateway를 생성하여 APM의 페이로드를 수락합니다.

1. 인증 토큰을 사용하여 권한 부여를 위한 Lambda 함수를 정의합니다.

1. 다음 중 하나를 수행합니다.
   + (권장 방법) 이름이 `$YourApmName-AWSIncidentDetectionResponse-EventBus`인 EventBridge 사용자 지정 이벤트 버스를 만듭니다.
   + (대체 방법) 사용자 지정 이벤트 버스 대신 기본 EventBridge 이벤트 버스를 사용합니다.

1. AWS 사고 탐지 및 대응 식별자를 페이로드에 추가하는 Lambda 함수 변환을 정의합니다. 이 함수를 사용하여 AWS 사고 탐지 및 대응으로 보내려는 이벤트를 필터링할 수도 있습니다.
   + API Gateway는 API Gateway에서 전달하는 페이로드를 변환하는 Lambda 함수 변환을 간접적으로 호출해야 합니다.
   + Lambda 함수 변환은 위의 포인트 3에 정의된 이벤트 버스에 변환된 이벤트를 작성해야 합니다.

1. API Gateway에서 생성된 URL로 알림을 보내도록 APM을 설정합니다.