InfoGrab DocsInfoGrab Docs

성능 튜닝 및 테스팅 속도

요약

API 퍼징과 같이 API 퍼즈 테스트를 수행하는 보안 도구는 실행 중인 애플리케이션 인스턴스에 요청을 보내는 방식으로 테스트합니다. 이 성능 가이드의 권고를 따랐는데도 API 퍼징 테스트 job 이 예상보다 오래 걸린다면, 추가 지원을 받기 위해 지원팀에 문의합니다.

API 퍼징과 같이 API 퍼즈 테스트를 수행하는 보안 도구는 실행 중인 애플리케이션 인스턴스에 요청을 보내는 방식으로 테스트합니다. 퍼징 엔진은 요청을 변형해 애플리케이션에 존재할 수 있는 예기치 않은 동작을 유발합니다. API 퍼징 테스트의 속도는 다음 요소에 따라 달라집니다.

  • GitLab 도구가 애플리케이션에 초당 보낼 수 있는 요청 수
  • 애플리케이션이 요청에 응답하는 속도
  • 애플리케이션을 테스트하기 위해 보내야 하는 요청 수
    • API를 구성하는 작업 수
    • 각 작업에 포함된 필드 수(JSON 본문, 헤더, 쿼리 문자열, 쿠키 등)

이 성능 가이드의 권고를 따랐는데도 API 퍼징 테스트 job 이 예상보다 오래 걸린다면, 추가 지원을 받기 위해 지원팀에 문의합니다.

성능 이슈 진단#

성능 이슈를 해결하는 첫 단계는 테스트 시간이 예상보다 길어지는 원인을 파악하는 것입니다. 자주 보고되는 원인은 다음과 같습니다.

  • API 퍼징이 vCPU가 적은 러너에서 실행되는 경우
  • 애플리케이션이 느리거나 단일 CPU 인 인스턴스에 배포되어 테스트 부하를 감당하지 못하는 경우
  • 전체 테스트 속도에 영향을 미치는 느린 작업이 애플리케이션에 있는 경우(1/2초 초과)
  • 대량의 데이터를 반환하는 작업이 애플리케이션에 있는 경우(500K 초과)
  • 애플리케이션에 작업이 많은 경우(40개 초과)

전체 테스트 속도에 영향을 미치는 느린 작업이 포함된 애플리케이션(1/2초 초과)#

API 퍼징 job 출력에는 테스트 속도, 작업 응답 시간, 요약 정보 등 유용한 정보가 포함되어 있습니다. 다음 샘플 출력을 활용해 성능 이슈를 추적합니다.

API Fuzzing: Loaded 10 operations from: assets/har-large-response/large_responses.har
API Fuzzing:
API Fuzzing: Testing operation [1/10]: 'GET http://target:7777/api/large_response_json'.
API Fuzzing:  - Parameters: (Headers: 4, Query: 0, Body: 0)
API Fuzzing:  - Request body size: 0 Bytes (0 bytes)
API Fuzzing:
API Fuzzing: Finished testing operation 'GET http://target:7777/api/large_response_json'.
API Fuzzing:  - Excluded Parameters: (Headers: 0, Query: 0, Body: 0)
API Fuzzing:  - Performed 767 requests
API Fuzzing:  - Average response body size: 130 MB
API Fuzzing:  - Average call time: 2 seconds and 82.69 milliseconds (2.082693 seconds)
API Fuzzing:  - Time to complete: 14 minutes, 8 seconds and 788.36 milliseconds (848.788358 seconds)

이 job 콘솔 출력 조각은 발견된 작업 수(10개)로 시작합니다. 이어서 특정 작업의 테스트가 시작되었다는 알림과 작업 요약이 완료되었다는 알림이 표시됩니다. 요약을 보면 API 퍼징이 이 작업과 관련 필드를 완전히 테스트하는 데 767건의 요청을 사용했음을 알 수 있습니다. 또한 이 작업은 평균 응답 시간이 2초였고 완료까지 14분이 걸렸음을 보여 줍니다.

평균 응답 시간 2초는 이 특정 작업의 테스트가 오래 걸린다는 점을 알려 주는 초기 지표입니다. 응답 본문 크기가 크다는 점도 확인할 수 있으며, 이것이 긴 응답 시간의 원인입니다. 각 요청의 응답 시간 대부분이 응답 본문 데이터를 전송하는 데 쓰입니다.

이 문제에 대해 팀은 다음과 같이 결정할 수 있습니다.

팀의 요구 사항이 5~7분 범위라고 가정하면, 허용 가능한 테스트 시간에 도달하려면 이 방법들을 조합해 사용하는 것이 현실적인 해법입니다.

성능 이슈 해결#

다음 섹션에서는 API 퍼징의 성능 이슈를 해결하는 여러 방법을 설명합니다.

더 큰 러너 사용#

가장 손쉽게 성능을 높이는 방법 하나는 API 퍼징에 더 큰 러너를 사용하는 것입니다. 다음 표는 Java Spring Boot REST API를 벤치마킹하면서 수집한 통계입니다. 이 벤치마크에서는 타깃과 API 퍼징이 단일 러너 인스턴스를 공유합니다.

Linux의 호스팅된 러너 태그 초당 요청 수
saas-linux-small-amd64 (기본값) 255
saas-linux-medium-amd64 400

이 표는 러너 크기와 vCPU 수를 늘리는 것이 테스트 속도와 성능에 큰 영향을 줄 수 있음을 보여 줍니다.

다음은 Linux 용 medium GitLab 호스팅 러너를 사용하도록 tags 섹션을 추가한 API 퍼징 job 정의 예시입니다. 이 job은 API 퍼징 템플릿에 포함된 job 정의를 확장합니다.

apifuzzer_fuzz:
  tags:
  - saas-linux-medium-amd64

gl-api-security-scanner.log 파일에서 Starting work item processor 문자열을 검색하면 보고된 최대 DOP(병렬 처리 수준)를 확인할 수 있습니다. 최대 DOP는 러너에 할당된 vCPU 수보다 크거나 같아야 합니다. 문제를 파악하기 어렵다면 지원팀에 티켓을 열어 도움을 요청합니다.

로그 항목 예시:

17:00:01.084 [INF] Starting work item processor with 4 max DOP

느린 작업 제외#

느린 작업이 한두 개인 경우, 팀은 해당 작업의 테스트를 건너뛰기로 결정할 수 있습니다. 작업 제외는 FUZZAPI_EXCLUDE_PATHS 구성 변수로 수행하며 자세한 내용은 이 섹션에서 설명합니다.

다음 예시는 대량의 데이터를 반환하는 작업을 보여 줍니다. 해당 작업은 GET http://target:7777/api/large_response_json 입니다. 이 작업을 제외하려면 FUZZAPI_EXCLUDE_PATHS 구성 변수에 작업 URL의 경로 부분인 /api/large_response_json을 지정합니다.

작업이 제외되었는지 확인하려면 API 퍼징 job을 실행하고 job 콘솔 출력을 검토합니다. 테스트 마지막에 포함된 작업과 제외된 작업 목록이 표시됩니다.

apifuzzer_fuzz:
  variables:
    FUZZAPI_EXCLUDE_PATHS: /api/large_response_json
Warning

테스트에서 작업을 제외하면 일부 취약점이 탐지되지 않을 수 있습니다.

테스트를 여러 job으로 분할#

API 퍼징은 FUZZAPI_EXCLUDE_PATHS와 FUZZAPI_EXCLUDE_URLS를 사용해 테스트를 여러 job으로 분할하는 것을 지원합니다. 테스트를 분할할 때는 apifuzzer_fuzz job을 비활성화하고 식별 가능한 이름을 가진 두 개의 job으로 대체하는 방식이 좋습니다. 다음 예시는 두 개의 job을 보여 줍니다. 각 job은 이름에서 알 수 있듯이 API의 각 버전을 테스트합니다. 다만 이 기법은 API 버전에 한정되지 않고 어떤 상황에나 적용할 수 있습니다.

apifuzzer_v1과 apifuzzer_v2 job에 사용된 rules는 API 퍼징 템플릿에서 복사한 것입니다.

# Disable the main apifuzzer_fuzz job
apifuzzer_fuzz:
  rules:
    - if: $CI_COMMIT_BRANCH
      when: never

apifuzzer_v1:
  extends: apifuzzer_fuzz
  variables:
    FUZZAPI_EXCLUDE_PATHS: /api/v1/**
  rules:
    - if: $API_FUZZING_DISABLED == 'true' || $API_FUZZING_DISABLED == '1'
      when: never
    - if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH == 'true' &&
            $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
      when: never
    - if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH == '1' &&
            $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
      when: never
    - if: $CI_COMMIT_BRANCH &&
          $CI_GITLAB_FIPS_MODE == "true"
      variables:
          FUZZAPI_IMAGE_SUFFIX: "-fips"
    - if: $CI_COMMIT_BRANCH

apifuzzer_v2:
  variables:
    FUZZAPI_EXCLUDE_PATHS: /api/v2/**
  rules:
    - if: $API_FUZZING_DISABLED == 'true' || $API_FUZZING_DISABLED == '1'
      when: never
    - if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH &&
            $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
      when: never
    - if: $CI_COMMIT_BRANCH &&
          $CI_GITLAB_FIPS_MODE == "true"
      variables:
          FUZZAPI_IMAGE_SUFFIX: "-fips"
    - if: $CI_COMMIT_BRANCH

기능 브랜치에서 작업 제외, 기본 브랜치는 제외하지 않음#

느린 작업이 한두 개인 경우, 팀은 해당 작업의 테스트를 건너뛰거나 기능 브랜치 테스트에서는 제외하고 기본 브랜치 테스트에는 포함하기로 결정할 수 있습니다. 작업 제외는 FUZZAPI_EXCLUDE_PATHS 구성 변수로 수행하며 자세한 내용은 이 섹션에서 설명합니다.

다음 예시는 대량의 데이터를 반환하는 작업을 보여 줍니다. 해당 작업은 GET http://target:7777/api/large_response_json 입니다. 이 작업을 제외하려면 FUZZAPI_EXCLUDE_PATHS 구성 변수에 작업 URL의 경로 부분인 /api/large_response_json을 지정합니다. 이 구성은 기본 apifuzzer_fuzz job을 비활성화하고 apifuzzer_main과 apifuzzer_branch라는 두 개의 새 job을 만듭니다. apifuzzer_branch는 오래 걸리는 작업을 제외하고 기본 브랜치가 아닌 브랜치(예: 기능 브랜치)에서만 실행되도록 설정합니다. apifuzzer_main 브랜치는 기본 브랜치(이 예시에서는 main)에서만 실행되도록 설정합니다. apifuzzer_branch job은 더 빠르게 실행되어 개발 주기를 단축하고, 기본 브랜치 빌드에서만 실행되는 apifuzzer_main job은 실행 시간이 더 깁니다.

작업이 제외되었는지 확인하려면 API 퍼징 job을 실행하고 job 콘솔 출력을 검토합니다. 테스트 마지막에 포함된 작업과 제외된 작업 목록이 표시됩니다.

# Disable the main job so you can create two jobs with
# different names
apifuzzer_fuzz:
  rules:
    - if: $CI_COMMIT_BRANCH
      when: never

# API fuzzing for feature branch work, excludes /api/large_response_json
apifuzzer_branch:
  extends: apifuzzer_fuzz
  variables:
    FUZZAPI_EXCLUDE_PATHS: /api/large_response_json
  rules:
    - if: $API_FUZZING_DISABLED == 'true' || $API_FUZZING_DISABLED == '1'
      when: never
    - if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH &&
            $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
      when: never
    - if: $CI_COMMIT_BRANCH &&
          $CI_GITLAB_FIPS_MODE == "true"
      variables:
          FUZZAPI_IMAGE_SUFFIX: "-fips"
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: never
    - if: $CI_COMMIT_BRANCH

# API fuzzing for default branch (main in this case)
# Includes the long running operations
apifuzzer_main:
  extends: apifuzzer_fuzz
  rules:
    - if: $API_FUZZING_DISABLED == 'true' || $API_FUZZING_DISABLED == '1'
      when: never
    - if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH &&
            $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
      when: never
    - if: $CI_COMMIT_BRANCH &&
          $CI_GITLAB_FIPS_MODE == "true"
      variables:
          FUZZAPI_IMAGE_SUFFIX: "-fips"
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

성능 튜닝 및 테스팅 속도

GitLab v19.5
원문 보기

요약

API 퍼징과 같이 API 퍼즈 테스트를 수행하는 보안 도구는 실행 중인 애플리케이션 인스턴스에 요청을 보내는 방식으로 테스트합니다. 이 성능 가이드의 권고를 따랐는데도 API 퍼징 테스트 job 이 예상보다 오래 걸린다면, 추가 지원을 받기 위해 지원팀에 문의합니다.

API 퍼징과 같이 API 퍼즈 테스트를 수행하는 보안 도구는 실행 중인 애플리케이션 인스턴스에 요청을 보내는 방식으로 테스트합니다. 퍼징 엔진은 요청을 변형해 애플리케이션에 존재할 수 있는 예기치 않은 동작을 유발합니다. API 퍼징 테스트의 속도는 다음 요소에 따라 달라집니다.

  • GitLab 도구가 애플리케이션에 초당 보낼 수 있는 요청 수
  • 애플리케이션이 요청에 응답하는 속도
  • 애플리케이션을 테스트하기 위해 보내야 하는 요청 수
    • API를 구성하는 작업 수
    • 각 작업에 포함된 필드 수(JSON 본문, 헤더, 쿼리 문자열, 쿠키 등)

이 성능 가이드의 권고를 따랐는데도 API 퍼징 테스트 job 이 예상보다 오래 걸린다면, 추가 지원을 받기 위해 지원팀에 문의합니다.

성능 이슈 진단#

성능 이슈를 해결하는 첫 단계는 테스트 시간이 예상보다 길어지는 원인을 파악하는 것입니다. 자주 보고되는 원인은 다음과 같습니다.

  • API 퍼징이 vCPU가 적은 러너에서 실행되는 경우
  • 애플리케이션이 느리거나 단일 CPU 인 인스턴스에 배포되어 테스트 부하를 감당하지 못하는 경우
  • 전체 테스트 속도에 영향을 미치는 느린 작업이 애플리케이션에 있는 경우(1/2초 초과)
  • 대량의 데이터를 반환하는 작업이 애플리케이션에 있는 경우(500K 초과)
  • 애플리케이션에 작업이 많은 경우(40개 초과)

전체 테스트 속도에 영향을 미치는 느린 작업이 포함된 애플리케이션(1/2초 초과)#

API 퍼징 job 출력에는 테스트 속도, 작업 응답 시간, 요약 정보 등 유용한 정보가 포함되어 있습니다. 다음 샘플 출력을 활용해 성능 이슈를 추적합니다.

API Fuzzing: Loaded 10 operations from: assets/har-large-response/large_responses.har
API Fuzzing:
API Fuzzing: Testing operation [1/10]: 'GET http://target:7777/api/large_response_json'.
API Fuzzing:  - Parameters: (Headers: 4, Query: 0, Body: 0)
API Fuzzing:  - Request body size: 0 Bytes (0 bytes)
API Fuzzing:
API Fuzzing: Finished testing operation 'GET http://target:7777/api/large_response_json'.
API Fuzzing:  - Excluded Parameters: (Headers: 0, Query: 0, Body: 0)
API Fuzzing:  - Performed 767 requests
API Fuzzing:  - Average response body size: 130 MB
API Fuzzing:  - Average call time: 2 seconds and 82.69 milliseconds (2.082693 seconds)
API Fuzzing:  - Time to complete: 14 minutes, 8 seconds and 788.36 milliseconds (848.788358 seconds)

이 job 콘솔 출력 조각은 발견된 작업 수(10개)로 시작합니다. 이어서 특정 작업의 테스트가 시작되었다는 알림과 작업 요약이 완료되었다는 알림이 표시됩니다. 요약을 보면 API 퍼징이 이 작업과 관련 필드를 완전히 테스트하는 데 767건의 요청을 사용했음을 알 수 있습니다. 또한 이 작업은 평균 응답 시간이 2초였고 완료까지 14분이 걸렸음을 보여 줍니다.

평균 응답 시간 2초는 이 특정 작업의 테스트가 오래 걸린다는 점을 알려 주는 초기 지표입니다. 응답 본문 크기가 크다는 점도 확인할 수 있으며, 이것이 긴 응답 시간의 원인입니다. 각 요청의 응답 시간 대부분이 응답 본문 데이터를 전송하는 데 쓰입니다.

이 문제에 대해 팀은 다음과 같이 결정할 수 있습니다.

팀의 요구 사항이 5~7분 범위라고 가정하면, 허용 가능한 테스트 시간에 도달하려면 이 방법들을 조합해 사용하는 것이 현실적인 해법입니다.

성능 이슈 해결#

다음 섹션에서는 API 퍼징의 성능 이슈를 해결하는 여러 방법을 설명합니다.

더 큰 러너 사용#

가장 손쉽게 성능을 높이는 방법 하나는 API 퍼징에 더 큰 러너를 사용하는 것입니다. 다음 표는 Java Spring Boot REST API를 벤치마킹하면서 수집한 통계입니다. 이 벤치마크에서는 타깃과 API 퍼징이 단일 러너 인스턴스를 공유합니다.

Linux의 호스팅된 러너 태그 초당 요청 수
saas-linux-small-amd64 (기본값) 255
saas-linux-medium-amd64 400

이 표는 러너 크기와 vCPU 수를 늘리는 것이 테스트 속도와 성능에 큰 영향을 줄 수 있음을 보여 줍니다.

다음은 Linux 용 medium GitLab 호스팅 러너를 사용하도록 tags 섹션을 추가한 API 퍼징 job 정의 예시입니다. 이 job은 API 퍼징 템플릿에 포함된 job 정의를 확장합니다.

apifuzzer_fuzz:
  tags:
  - saas-linux-medium-amd64

gl-api-security-scanner.log 파일에서 Starting work item processor 문자열을 검색하면 보고된 최대 DOP(병렬 처리 수준)를 확인할 수 있습니다. 최대 DOP는 러너에 할당된 vCPU 수보다 크거나 같아야 합니다. 문제를 파악하기 어렵다면 지원팀에 티켓을 열어 도움을 요청합니다.

로그 항목 예시:

17:00:01.084 [INF] Starting work item processor with 4 max DOP

느린 작업 제외#

느린 작업이 한두 개인 경우, 팀은 해당 작업의 테스트를 건너뛰기로 결정할 수 있습니다. 작업 제외는 FUZZAPI_EXCLUDE_PATHS 구성 변수로 수행하며 자세한 내용은 이 섹션에서 설명합니다.

다음 예시는 대량의 데이터를 반환하는 작업을 보여 줍니다. 해당 작업은 GET http://target:7777/api/large_response_json 입니다. 이 작업을 제외하려면 FUZZAPI_EXCLUDE_PATHS 구성 변수에 작업 URL의 경로 부분인 /api/large_response_json을 지정합니다.

작업이 제외되었는지 확인하려면 API 퍼징 job을 실행하고 job 콘솔 출력을 검토합니다. 테스트 마지막에 포함된 작업과 제외된 작업 목록이 표시됩니다.

apifuzzer_fuzz:
  variables:
    FUZZAPI_EXCLUDE_PATHS: /api/large_response_json
Warning

테스트에서 작업을 제외하면 일부 취약점이 탐지되지 않을 수 있습니다.

테스트를 여러 job으로 분할#

API 퍼징은 FUZZAPI_EXCLUDE_PATHS와 FUZZAPI_EXCLUDE_URLS를 사용해 테스트를 여러 job으로 분할하는 것을 지원합니다. 테스트를 분할할 때는 apifuzzer_fuzz job을 비활성화하고 식별 가능한 이름을 가진 두 개의 job으로 대체하는 방식이 좋습니다. 다음 예시는 두 개의 job을 보여 줍니다. 각 job은 이름에서 알 수 있듯이 API의 각 버전을 테스트합니다. 다만 이 기법은 API 버전에 한정되지 않고 어떤 상황에나 적용할 수 있습니다.

apifuzzer_v1과 apifuzzer_v2 job에 사용된 rules는 API 퍼징 템플릿에서 복사한 것입니다.

# Disable the main apifuzzer_fuzz job
apifuzzer_fuzz:
  rules:
    - if: $CI_COMMIT_BRANCH
      when: never

apifuzzer_v1:
  extends: apifuzzer_fuzz
  variables:
    FUZZAPI_EXCLUDE_PATHS: /api/v1/**
  rules:
    - if: $API_FUZZING_DISABLED == 'true' || $API_FUZZING_DISABLED == '1'
      when: never
    - if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH == 'true' &&
            $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
      when: never
    - if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH == '1' &&
            $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
      when: never
    - if: $CI_COMMIT_BRANCH &&
          $CI_GITLAB_FIPS_MODE == "true"
      variables:
          FUZZAPI_IMAGE_SUFFIX: "-fips"
    - if: $CI_COMMIT_BRANCH

apifuzzer_v2:
  variables:
    FUZZAPI_EXCLUDE_PATHS: /api/v2/**
  rules:
    - if: $API_FUZZING_DISABLED == 'true' || $API_FUZZING_DISABLED == '1'
      when: never
    - if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH &&
            $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
      when: never
    - if: $CI_COMMIT_BRANCH &&
          $CI_GITLAB_FIPS_MODE == "true"
      variables:
          FUZZAPI_IMAGE_SUFFIX: "-fips"
    - if: $CI_COMMIT_BRANCH

기능 브랜치에서 작업 제외, 기본 브랜치는 제외하지 않음#

느린 작업이 한두 개인 경우, 팀은 해당 작업의 테스트를 건너뛰거나 기능 브랜치 테스트에서는 제외하고 기본 브랜치 테스트에는 포함하기로 결정할 수 있습니다. 작업 제외는 FUZZAPI_EXCLUDE_PATHS 구성 변수로 수행하며 자세한 내용은 이 섹션에서 설명합니다.

다음 예시는 대량의 데이터를 반환하는 작업을 보여 줍니다. 해당 작업은 GET http://target:7777/api/large_response_json 입니다. 이 작업을 제외하려면 FUZZAPI_EXCLUDE_PATHS 구성 변수에 작업 URL의 경로 부분인 /api/large_response_json을 지정합니다. 이 구성은 기본 apifuzzer_fuzz job을 비활성화하고 apifuzzer_main과 apifuzzer_branch라는 두 개의 새 job을 만듭니다. apifuzzer_branch는 오래 걸리는 작업을 제외하고 기본 브랜치가 아닌 브랜치(예: 기능 브랜치)에서만 실행되도록 설정합니다. apifuzzer_main 브랜치는 기본 브랜치(이 예시에서는 main)에서만 실행되도록 설정합니다. apifuzzer_branch job은 더 빠르게 실행되어 개발 주기를 단축하고, 기본 브랜치 빌드에서만 실행되는 apifuzzer_main job은 실행 시간이 더 깁니다.

작업이 제외되었는지 확인하려면 API 퍼징 job을 실행하고 job 콘솔 출력을 검토합니다. 테스트 마지막에 포함된 작업과 제외된 작업 목록이 표시됩니다.

# Disable the main job so you can create two jobs with
# different names
apifuzzer_fuzz:
  rules:
    - if: $CI_COMMIT_BRANCH
      when: never

# API fuzzing for feature branch work, excludes /api/large_response_json
apifuzzer_branch:
  extends: apifuzzer_fuzz
  variables:
    FUZZAPI_EXCLUDE_PATHS: /api/large_response_json
  rules:
    - if: $API_FUZZING_DISABLED == 'true' || $API_FUZZING_DISABLED == '1'
      when: never
    - if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH &&
            $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
      when: never
    - if: $CI_COMMIT_BRANCH &&
          $CI_GITLAB_FIPS_MODE == "true"
      variables:
          FUZZAPI_IMAGE_SUFFIX: "-fips"
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: never
    - if: $CI_COMMIT_BRANCH

# API fuzzing for default branch (main in this case)
# Includes the long running operations
apifuzzer_main:
  extends: apifuzzer_fuzz
  rules:
    - if: $API_FUZZING_DISABLED == 'true' || $API_FUZZING_DISABLED == '1'
      when: never
    - if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH &&
            $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
      when: never
    - if: $CI_COMMIT_BRANCH &&
          $CI_GITLAB_FIPS_MODE == "true"
      variables:
          FUZZAPI_IMAGE_SUFFIX: "-fips"
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH