요구 사항

  • Linux/amd64에서 docker executor가 있는 GitLab Runner가 있어야 합니다.
  • 대상 응용 프로그램이 배포되어 있어야 합니다. 자세한 내용은 배포 옵션을 참조하세요.
  • dast 스테이지가 CI/CD 파이프라인 정의에 추가되어야 합니다. 이는 배포 단계 뒤에 추가되어야 합니다. 예를 들어:

    stages:
      - build
      - test
      - deploy
      - dast
    

추천 사항

  • 파이프라인이 각 실행에서 동일한 웹 서버로 배포되도록 구성된 경우 주의하십시오. 서버가 업데이트되는 동안 DAST 스캔을 실행하면 부정확하고 결정론적이지 않은 결과가 발생합니다.
  • 분석기의 최신 버전을 실행하기 위해 러너를 항상 풀 정책을 사용하도록 구성하십시오.
  • 기본적으로 DAST는 파이프라인의 이전 작업에서 정의된 모든 artifacts를 다운로드합니다. DAST 작업이 environment_url.txt를 통해 테스트 중인 URL이나 이전 작업에서 생성된 파일에 의존하지 않는 경우 artifacts를 다운로드하지 않는 것이 좋습니다. artifacts 다운로드를 피하려면 분석기 CI/CD 작업을 확장하여 의존성을 지정하세요. 예를 들어, DAST 프록시 기반 분석기의 경우 다음을 .gitlab-ci.yml 파일에 추가하세요:

    dast:
      dependencies: []
    

응용 프로그램 배포 옵션

DAST는 스캔할 수 있는 배포된 응용 프로그램이 필요합니다.

대상 응용 프로그램의 복잡성에 따라 DAST 템플릿을 배포하고 구성하는 몇 가지 옵션이 있습니다. 예시 응용 프로그램 집합과 구성을 통해 DAST 템플릿을 사용하는 방법에 대한 자세한 내용은 DAST demonstrations 프로젝트를 참조하세요.

리뷰 앱

리뷰 앱은 DAST 대상 응용 프로그램을 배포하는 가장 복잡한 방법입니다. 이 과정을 돕기 위해 Google Kubernetes Engine (GKE)를 사용하여 리뷰 앱 배포를 생성했습니다. 자세한 내용은 리뷰 앱-DAST를 위한 GKE 프로젝트에서 찾을 수 있으며, DAST에 대한 리뷰 앱 구성에 대한 자세한 지침은 README.md에서 확인할 수 있습니다.

도커 서비스

응용 프로그램이 Docker 컨테이너를 사용하는 경우 DAST와 함께 배포하고 스캔하는 또 다른 옵션이 있습니다. Docker 빌드 작업이 완료되고 이미지가 컨테이너 저장소에 추가된 후, 해당 이미지를 서비스로 사용할 수 있습니다.

.gitlab-ci.yml에서 서비스 정의를 사용하여 DAST 분석기로 서비스를 스캔할 수 있습니다.

작업에 services 섹션을 추가할 때, alias를 사용하여 서비스에 액세스할 수 있는 호스트 이름을 정의합니다. 다음 예제에서 dast 작업 정의의 alias: yourapp 부분은 배포된 응용 프로그램의 URL에 yourapp을 호스트 이름으로 사용하는 의미입니다 (https://yourapp/).

stages:
  - build
  - dast

include:
  - template: DAST.gitlab-ci.yml

# 컨테이너를 GitLab 컨테이너 레지스트리에 배포함
deploy:
  services:
  - name: docker:dind
    alias: dind
  image: docker:20.10.16
  stage: build
  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    - docker pull $CI_REGISTRY_IMAGE:latest || true
    - docker build --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --tag $CI_REGISTRY_IMAGE:latest .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - docker push $CI_REGISTRY_IMAGE:latest

dast:
  services: # 서비스를 사용하여 앱 컨테이너를 DAST 작업에 연결
    - name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
      alias: yourapp

variables:
  DAST_WEBSITE: https://yourapp
  DAST_FULL_SCAN_ENABLED: "true" # 전체 스캔 실행
  DAST_BROWSER_SCAN: "true" # 브라우저 기반의 GitLab DAST 크롤러 사용

대부분의 응용 프로그램은 데이터베이스나 캐싱 서비스와 같은 여러 서비스에 의존합니다. 기본적으로 services 필드에 정의된 서비스는 서로 통신할 수 없습니다. 서비스 간의 통신을 허용하려면 FF_NETWORK_PER_BUILD 기능 플래그를 활성화하세요.

variables:
  FF_NETWORK_PER_BUILD: "true" # 모든 서비스가 동일한 네트워크에서 통신하도록 네트워크 당 빌드를 활성화함

services: # 서비스를 사용하여 컨테이너를 DAST 작업에 연결
  - name: mongo:latest
    alias: mongo
  - name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    alias: yourapp