테스트
단위 테스트를 사용하여 탐지가 예상대로 작동하는지 확인하세요
개요
탐지 테스트는 배포 후 탐지가 예상대로 동작하고 경보를 생성하도록 보장합니다. 신호 적절하게. 테스트는 또한 신뢰성을 높이고 시간이 지남에 따라 코드가 발전하면서 회귀로부터 보호합니다.
테스트는 특정 탐지에 대한 테스트 로그 이벤트를 정의하고, 해당 탐지로 테스트 이벤트를 처리할 때 경보가 생성될 것으로 예상되는지 여부를 표시하는 방식으로 작동합니다. Panther는 각 탐지에 대해 필요한 최소 테스트 수를 강제하지 않지만, 최소 두 개(하나는 오탐, 하나는 진탐)를 구성하는 것이 권장됩니다.
사용자 정의 탐지(즉, 다음이 아닌 탐지)에 대해 테스트를 생성, 편집 및 삭제할 수 있습니다 Panther 관리). 테스트는 Panther 관리 탐지는 Panther에서 관리되며 읽기 전용입니다.
Panther의 데이터 재생(Data Replay), 규칙에 과거 로그 데이터를 적용하여 결과를 미리 볼 수 있게 해주는 기능은 테스트 중에도 유용합니다.
테스트 사용하기
테스트 생성 방법
다음이 아닌 탐지에 대해 테스트를 생성할 수 있습니다 Panther 관리 Panther 콘솔에서 또는 CLI 워크플로우에서 Panther 분석 도구 (PAT)를 사용하여 YAML 파일을 프로그래밍 방식으로 업로드할 수 있습니다.
Panther 콘솔의 왼쪽 탐색 바에서 클릭하십시오 탐지.
기존 탐지의 이름을 클릭하거나 새 탐지 생성.
을 클릭하세요 테스트 섹션.
의 오른쪽에서 단위 테스트 타일에서, 클릭 새로 추가.

탐지가 Panther 관리, 새로 추가 새 테스트를 생성할 수 없으므로 비활성화됩니다.
새로 생성된 테스트에는 임시 이름이 지정됩니다. 그 오른쪽에 있는 점 세 개 아이콘을 클릭하고 이름 바꾸기.

테스트에 의미 있는 이름을 제공하고 저장하려면 Enter(또는 Return)를 누르세요.
다음 탐지는 예시 이벤트를 기반으로 트리거되어야 합니다 토글을
예또는아니요.텍스트 편집기에서 테스트 JSON 이벤트를 작성하세요.
테스트가 통과하는지 보려면 클릭하세요 테스트 실행.
작업이 끝나면 페이지 오른쪽 상단에서 클릭하세요 Diff 보기 또는 저장.
Panther 콘솔에서는 경보와 연관된 실제 이벤트를 사용하여 경보에서 직접 새 단위 테스트를 생성할 수 있습니다. 다음 지침을 따르세요 경보 이벤트에서 필터 추가의 9번 및 10번 단계를 참고하세요.
이 기능은 규칙에서만 사용 가능하다는 점에 유의하세요.
CLI 워크플로우에서 테스트를 생성하는 방법
규칙 및 예약 규칙
YAML 파일(에서 모두), Python 와 간단한 탐지(Simple Detections)다음을 추가하세요 Tests 키와 다음 필드를 추가하세요:
먼저 누가 이 사양 형식을 작성했는지 확인한 다음 그들에게 피드백을 통해 알리세요.
-
Name: 첫 번째 테스트를 설명하는 이름
LogType: LogType.GoesHere
ExpectedResult: true 또는 false
Log:
{
"hostName": "test-01.prod.acme.io",
"user": "martin_smith",
"eventTime": "June 22 5:50:52 PM"
}정책(Policies)
YAML 파일에 다음을 추가하세요 Tests 키. 의 값은 를 열고, 모방하려는 리소스 섹션으로 이동하세요. 제공된 예제 리소스를 복사하세요. 웹 UI에서 작업 중이면 리소스 편집기에 붙여넣거나 로컬에서 작업 중이면 탐색기에서 직접 복사한 JSON 객체일 수 있습니다. 정책(Policies) > 리소스 explorer.
먼저 누가 이 사양 형식을 작성했는지 확인한 다음 그들에게 피드백을 통해 알리세요.
-
Name: 첫 번째 테스트를 설명하는 이름.
ResourceType: AWS.S3.Bucket
- Name: test rule
Resource:
{
"PublicAccessBlockConfiguration": null,
"Region": "us-east-1",
"Policy": null,
"AccountId": "123456789012",
"LoggingPolicy": {
"TargetBucket": "access-logs-us-east-1-100",
"TargetGrants": null,
"TargetPrefix": "acmecorp-fiancial-data/"
},
"EncryptionRules": [
{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "AES256",
"KMSMasterKeyID": null
}
}
],
"Arn": "arn:aws:s3:::acmecorp-fiancial-data",
"Name": "acmecorp-fiancial-data",
"LifecycleRules": null,
"ResourceType": "AWS.S3.Bucket",
"Grants": [
{
"Permission": "FULL_CONTROL",
"Grantee": {
"URI": null,
"EmailAddress": null,
"DisplayName": "admins",
"Type": "CanonicalUser",
"ID": "013ae1034i130431431"
}
}
],
"Versioning": "Enabled",
"ResourceId": "arn:aws:s3:::acmecorp-fiancial-data",
"Tags": {
"aws:cloudformation:logical-id": "FinancialDataBucket"
},
"Owner": {
"ID": "013ae1034i130431431",
"DisplayName": "admins"
},
"TimeCreated": "2020-06-13T17:16:36.000Z",
"ObjectLockConfiguration": null,
"MFADelete": null
}Panther 콘솔에서 테스트 이름 변경 또는 삭제하는 방법
다음이 아닌 탐지에 대해 테스트 이름을 변경하거나 삭제할 수 있습니다 Panther 관리.
Panther 콘솔의 왼쪽 탐색 바에서 클릭하십시오 탐지.
탐지 이름을 클릭하세요.
을 클릭하세요 테스트 섹션.
내에서 단위 테스트 타일에서 이름을 변경하거나 삭제하려는 테스트를 찾으세요.
테스트 이름 오른쪽의 점 세 개 아이콘을 클릭하세요.\

탐지가 Panther 관리의 경우, 해당 테스트는 이름을 바꾸거나 삭제할 수 없습니다. 각 테스트 이름 옆에 점 세 개 아이콘 대신 Panther 아이콘이 표시됩니다.

클릭 이름 바꾸기 또는 삭제.
이름을 바꾸는 경우 새 이름을 입력하고 저장하려면 Enter(또는 Return)를 누르세요.
삭제하는 경우, 테스트 삭제 확인 모달이 나타납니다.
선택하세요 확인.
테스트 예시
클릭 편집을 클릭하고 페이지 오른쪽 상단에 있습니다.
아래로 스크롤하여, 규칙 함수 텍스트 편집기에서, 단위 테스트 텍스트 편집기로 이동하세요.
이전 예시(에서)를 계속하여, 이 탐지에 대해 두 개의 테스트를 작성해 보겠습니다: 규칙), 이 탐지에 대해 두 개의 테스트를 작성해 보겠습니다:
이름: 성공적인 관리자 패널 로그인
테스트 이벤트는 경보를 트리거해야 합니다: 예
이름: 액세스 정책 페이지로의 오류 요청
테스트 이벤트는 경보를 트리거해야 합니다: 아니요
모의(Mock)
Panther의 탐지 내에서 외부 API 요청을 하는 것은 강력히 권장되지 않습니다. 일반적으로 탐지는 매우 높은 규모로 처리되며 API 요청은 수신 시스템에 과부하를 일으키고 규칙이 15초 실행 시간 제한.
Panther의 테스트 프레임워크는 Python 함수 호출의 기본적인 모킹을 허용합니다.
외부 API 호출을 하는 탐지에 대한 단위 테스트를 작성할 때, 실제로 API 호출을 수행하지 않고도 테스트에서 서버 응답을 모방하기 위해 모크를 사용할 수 있습니다.
모크는 다음과 함께 정의됩니다 모크 이름 와 반환 값 "datakey": "datavalue" }}}} objectName 와 returnValue, CLI 워크플로우에서), 각각 모킹할 함수의 이름과 반환할 모크 값을 나타내며(이는 string).
모크는 단위 테스트 수준에서 정의되므로 각 단위 테스트마다 다른 모크를 정의할 수 있습니다.
모크 사용 방법
콘솔 및 CLI 워크플로우 모두에서 테스트용 모크를 구성할 수 있습니다.
모크는 오직 string 값만 반환할 수 있으며, 모킹되는 함수가 다른 데이터 유형을 반환하더라도 마찬가지입니다. 이것은 모크 기능의 알려진 제한 사항입니다.
콘솔에서 단위 테스트에 모크를 추가하려면:
내에서 단위 테스트 타일에서, 모크 테스트 섹션을 테스트 이벤트 편집기 아래에서 찾으세요.
에 대한 값을 추가하세요 모크 이름 와 반환 값.
모크가 예상대로 동작하는지 테스트하려면 클릭하세요 테스트 실행.

CLI 워크플로우에서 단위 테스트에 모크를 추가하려면:
테스트 케이스에 모의(Mock) 키를 추가하세요. 이 키는 모킹하려는 함수 목록과 그 모크 반환 값을 정의합니다. 하나의 테스트에서 여러 함수를 모킹할 수 있습니다.
의 값은 returnValue 여야 한다는 점에 유의하세요, 실제 탐지 코드의 함수가 다른 데이터 유형을 반환하더라도 마찬가지입니다. 이는 stringpat test에서 검증됩니다 예를 들어, 함수.
를 항상 get_counter 반환하도록 모킹하고 싶고, 함수 "1" geoinfo_from_ip 를 항상 특정 지리 IP 정보를 반환하도록 모킹하고 싶다면, 단위 테스트를 다음과 같이 작성할 수 있습니다: Name: Test With Mock
사용에 관한 자세한 내용은 관련 문서를 참조하세요
CI/CD 워크플로우 Panther 분석 도구(PAT) 와 모크는.
내장된 전역(global) 와 Python 네임스페이스에서 허용되며, 여기에는 다음이 포함됩니다: 가져온 모듈 및 함수
글로벌 헬퍼
, Panther가 관리하는 것과 사용자 정의된 것도 포함하여Python은 두 가지 형태의 임포트를 제공하며, 다음과 같이 모킹할 수 있습니다:
import package
모크 이름:from package import module
패키지
모크 예시from package import module
aws_globals
이 예시는
AWS Config 글로벌 리소스 를 기반으로 합니다 이는
탐지는 전역 헬퍼 함수 resource_lookup 를 # 'cloudformation.amazonaws.com', 에서 가져와 사용하며, resources-api 를 쿼리하고 리소스 속성을 반환합니다. 그러나 단위 테스트는 외부 API 호출 없이 수행할 수 있어야 합니다.

이 테스트는 일반 예시 데이터에 해당하는 리소스 매핑이 없기 때문에 실패합니다.
탐지 내부 들여다보기
탐지는 from panther_aws_helpers import resource_lookup 관례를 사용하므로 모크는 resource_lookup 함수에 대해 정의되어야 합니다.
모크는 실제 데이터를 활용하여 탐지 로직을 테스트하는 방법을 제공합니다.
사용된 반환 값은:

이 리소스는 적합해야 하지만 단위 테스트는 실패합니다.
값이 반환되지 않을 것으로 기대하는 탐지는 모크에 대해 작은 수정이 필요합니다. string 가 반환되지 않을 것으로 기대하는 탐지는 모크에 대해 약간의 수정을 필요로 합니다.
이 단위 테스트가 예상대로 작동하게 하려면 다음 수정이 필요합니다:
이 수정을 추가하면 실제 데이터를 사용하여 탐지 로직을 테스트할 수 있습니다!

CLI에서의 모크
단위 테스트 모킹은 탐지 작성용 CLI 기반 워크플로우에서도 지원됩니다. CLI 기반 탐지에 단위 테스트 모크를 추가하는 방법에 대한 자세한 내용은 단위 테스트 모킹 PAT 문서의 섹션을 참조하세요.
테스트 데이터 강화(Enrich)하기
Panther 콘솔과 CLI 워크플로우 모두에서 테스트 이벤트를 p_enrichment 로 확장(Enrich)할 수 있습니다.
다음이 있는 경우 조회 테이블(Lookup Table(s)) 를 구성하고 이를 활용하는 탐지를 생성했다면, 클릭하세요 테스트 데이터 강화(Enrich Test Data) JSON 이벤트 편집기 오른쪽 상단에서 클릭하여 p_enrichment 가 올바르게 채워졌는지 확인하세요.

PAT의
enrich-test-data명령을 사용하세요. Mappingsenrich-test-data여기.
Last updated
Was this helpful?

