테스트

단위 테스트를 사용하여 디텍션이 예상대로 작동하는지 확인하세요

개요

디텍션을 테스트하면 배포 후 디텍션이 예상대로 동작하고 적절하게 생성되는지 확인할 수 있습니다. 신호 적절하게. 테스트는 또한 신뢰성을 높이고 코드가 시간이 지남에 따라 진화할 때 회귀로부터 보호합니다.

테스트는 특정 디텍션에 대한 테스트 로그 이벤트를 정의하고 해당 디텍션이 테스트 이벤트를 처리할 때 알러트가 생성될지 여부를 표시하는 방식으로 작동합니다. Panther는 각 디텍션에 대해 필요한 최소 테스트 수를 강제하지 않지만, 최소 두 개(하나는 false positive, 하나는 true positive)를 구성하는 것이 권장됩니다.

사용자 정의 디텍션(즉, Panther 관리)이 아닌 디텍션에 대해 테스트를 생성, 편집 및 삭제할 수 있습니다. Panther 관리 디텍션의 테스트는 Panther에서 관리하며 읽기 전용입니다.

Panther의 데이터 리플레이룰을 통해 과거 로그 데이터를 실행하여 결과를 미리 볼 수 있게 해주는 기능은 테스트 중에도 유용합니다.

테스트 사용

테스트 생성 방법

다음에 포함되지 않은 디텍션에 대해 테스트를 생성할 수 있습니다 Panther 관리 Panther 콘솔에서 또는 CLI 워크플로우에서 프로그램 방식으로 업로드할 수 있습니다 Panther 분석 도구

  1. Panther 콘솔의 왼쪽 탐색 창에서 디텍션.

  2. 기존 디텍션의 이름을 클릭하거나 새 디텍션 생성.

  3. 을 클릭하세요. 테스트 섹션의 명령을 실행하세요.

  4. 의 오른쪽에 유닛 테스트 타일에서 새로 추가. The Unit Test section of the detection page shows the names of one already-created test ("Failed login"). In the upper right corner there's a "Add New" button, which is circled.

    • 디텍션이 Panther 관리, 새로 추가 새 테스트를 생성할 수 없으므로 비활성화됩니다.

  5. 새로 생성된 테스트에는 자리표시자 이름이 지정됩니다. 그 오른쪽에서 세 개의 점 아이콘을 클릭하고 이름 바꾸기. In the Unit Test section, a test with the placeholder name "Test-b789c4" is shown. The three dot icon to its right has been selected, which opened a menu with two options: Rename and Delete.

  6. 테스트에 의미 있는 이름을 제공하고 저장하려면 Enter 또는 Return을 누르세요.

  7. 다음을 설정하세요 디텍션은 예제 이벤트를 기반으로 트리거되어야 합니다 토글을설정의 기본값은 이전에 생성한 Snowflake 사용자 이름, 예를 들면 아니오.

  8. 텍스트 편집기에 테스트 JSON 이벤트를 작성하세요.

  9. 테스트 통과 여부를 확인하려면 클릭하세요 테스트 실행.

  10. 작업을 마쳤으면 페이지 오른쪽 상단에서 클릭하세요 업데이트 이전에 생성한 Snowflake 사용자 이름, 예를 들면 "Resource": "<secret ARN>".

Panther 콘솔에서 테스트 이름 변경 또는 삭제 방법

다음에 포함되지 않은 디텍션에 대해 테스트 이름을 변경하거나 삭제할 수 있습니다 Panther 관리.

  1. Panther 콘솔의 왼쪽 탐색 창에서 디텍션.

  2. 디텍션의 이름을 클릭하세요.

  3. 을 클릭하세요. 테스트 섹션의 명령을 실행하세요.

  4. 내부의 유닛 테스트 타일에서 이름을 변경하거나 삭제하려는 테스트를 찾으세요.

  5. 테스트 이름 오른쪽에서 세 개의 점 아이콘을 클릭하세요.

    In the Unit Test section, a test named "Reset by Company Admin" is shown. The three dot icon to its right has been selected, which has opened a menu with two options: Rename and Delete.
    • 디텍션이 Panther 관리그 경우 테스트의 이름 옆에 세 개의 점 아이콘 대신 Panther 아이콘이 표시되며 테스트를 이름 변경하거나 삭제할 수 없습니다.

      The Unit Test section shows multiple test names, each with a Panther icon to its left.
  6. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 이름 바꾸기 이전에 생성한 Snowflake 사용자 이름, 예를 들면 삭제.

    • 이름을 변경하는 경우 새 이름을 입력하고 저장하려면 Enter 또는 Return을 누르세요.

    • 삭제하는 경우, 테스트 삭제 확인 모달이 팝업됩니다.

      • 선택하세요 Panther AI가 활성화된 경우.

테스트 예제

  • 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 편집을 클릭 페이지 오른쪽 상단에 있습니다.

  • 아래로 스크롤하여 룰 함수 텍스트 편집기, 유닛 테스트 텍스트 편집기로 이동하세요.

이전 예제(에서)를 계속하여, 이 디텍션에 대해 두 개의 테스트를 작성해봅시다: ), 이 디텍션에 대해 두 개의 테스트를 작성해봅시다:

이름: 성공적인 관리자 패널 로그인

테스트 이벤트는 알러트를 트리거해야 합니다: 예

이름: 액세스 정책 페이지에 대한 오류 요청

테스트 이벤트는 알러트를 트리거해야 합니다: 아니요

circle-info

디텍션의 신뢰성을 최대화하기 위해 원하는 만큼 많은 조합을 사용하세요.

목(Mocks)

circle-exclamation

Panther의 테스트 프레임워크는 Python 함수 호출의 기본적인 목킹을 허용합니다.

외부 API 호출을 수행하는 디텍션에 대한 단위 테스트를 작성할 때, 실제로 API 호출을 실행하지 않고도 테스트에서 서버 응답을 흉내내기 위해 목을 사용할 수 있습니다.

목은 다음으로 정의됩니다 목 이름반환 값 의 값을 포함합니다 객체 이름반환값, CLI 워크플로우에서는 각각 목킹할 함수의 이름과 반환할 목 값을 나타내며(이는 반드시 문자열).

목은 단위 테스트 수준에서 정의되므로 각 단위 테스트에 대해 서로 다른 목을 정의할 수 있습니다.

목 사용 방법

콘솔 및 CLI 워크플로우 모두에서 테스트용 목을 구성할 수 있습니다.

목은 오직 문자열 값만 반환할 수 있으며, 목킹되는 함수가 다른 데이터 타입을 반환하더라도 마찬가지입니다. 이는 목 기능의 알려진 제한 사항입니다.

circle-info

목 반환 값은 타입 문자열이라는 제한 때문에, 만약 문자열 이외의 데이터 타입을 반환하는 함수를 목킹하는 경우, 테스트가 목 값을 성공적으로 사용하려면 해당 함수의 반환값을 원래의 데이터 타입으로 캐스팅하는 것이 권장됩니다.

예를 들어, 만약 당신의 최소한 각 룰과 예약된 룰은 룰 논리를 정의해야 합니다. function get_counter() 가 정수를 반환한다면, 다음을 사용하세요 int(get_counter()).

콘솔에서 단위 테스트에 목을 추가하려면:

  1. 내부의 유닛 테스트 타일에서 목 테스트 섹션을 테스트 이벤트 편집기 아래에서 찾으세요.

  2. 에 대한 값을 추가하세요 목 이름반환 값.

  3. 목이 예상대로 동작하는지 테스트하려면 클릭하세요 테스트 실행.

In the Panther Console, the Unit Test section of a detection page is shown. Below the test event, there is a Mock Testing section. It contains fields for Mock Name and Return Value.

목은 다음에서 허용됩니다 전역내장된 Python 네임스페이스에는 다음이 포함됩니다:

  • 가져온 모듈 및 함수

  • 글로벌 헬퍼Panther에서 관리되는 것과 사용자 정의된 것을 포함하여

Python은 두 가지 형태의 import를 제공하며, 다음과 같이 목킹할 수 있습니다:

  • import package

    • 목 이름: 패키지

  • from package import module

    • 목 이름: 모듈

예제 목

이 예제는 AWS Config 전역 리소스arrow-up-right deep_get(event, "outcome", "result") == "FAILURE"

디텍션은 전역 헬퍼 함수 resource_lookup 를 사용합니다 pattern_match_list(event.get("userAgent"), ALLOWED_USER_AGENTS) 이는 resources-api 를 쿼리하여 리소스 속성을 반환합니다. 그러나 단위 테스트는 외부 API 호출 없이 수행할 수 있어야 합니다.

A Unit Test within a Detection's details page is shown. In the Mock Testing section, the fields for Mock Name and Return Value are blank.

이 테스트는 일반 예제 데이터에 해당하는 리소스 매핑이 없어 실패합니다.

디텍션 살펴보기

디텍션은 from panther_aws_helpers import resource_lookup 컨벤션을 사용하므로 목은 resource_lookup 함수에 대해 정의되어야 합니다.

목은 디텍션 로직을 테스트하기 위해 실제 데이터를 활용하는 방법을 제공합니다.

사용된 반환 값:

A Unit Test within a Detection's details page is shown. The Mock Name field contains "resource_lookup" and the Return Value contains the value from the "Return Value Used" section in the documentation above this image.

이 리소스는 준수해야 하지만 단위 테스트는 실패합니다. 디텍션이 반환되는 것을 기대하지 않는 경우 목에 대해 작은 수정이 필요합니다. 문자열 가 반환되는 것을 기대하지 않는 디텍션은 목에 대해 약간의 조정이 필요합니다.

이 단위 테스트를 정상적으로 작동시키려면 다음 수정을 해야 합니다:

이 수정을 추가하면 실제 데이터를 사용하여 디텍션 로직을 테스트할 수 있습니다!

A full Policy Function and Unit Test with Mock Testing is shown. The test is named "Global Recorders Present - None Recording Global Resources"

CLI에서의 목

단위 테스트 목킹은 디텍션 작성용 CLI 기반 워크플로우에서도 지원됩니다. CLI 기반 디텍션에 단위 테스트 목을 추가하는 방법에 대한 자세한 내용은 단위 테스트 목킹 PAT 문서의 섹션을 참조하세요.

테스트 데이터 보강

Panther 콘솔과 CLI 워크플로우 모두에서 테스트 이벤트를 p_enrichment 로 보강하는 것이 가능합니다.

circle-info

만약 당신이 lookup() 함수를 디텍션에서 사용하고 있다면, 대신 다음 지침을 따르세요 를 사용하는 디텍션의 단위 테스트 lookup().

만약 당신이 조회 테이블 을 구성하고 이를 활용하는 디텍션을 생성한 경우, 클릭하세요 테스트 데이터 보강 JSON 이벤트 편집기 오른쪽 상단에서 을 클릭하여 p_enrichment 가 올바르게 채워졌는지 확인하세요.

Within the Unit Test section, the test event editor is shown. In the top right corner of the editor is a circled button that reads Enrich Test Data.

마지막 업데이트

도움이 되었나요?