요구 사항
-
GitLab Runner가 사용 가능해야 하며,
docker
executor가 Linux/amd64에서 실행되어야 합니다. - 대상 애플리케이션이 배포되어야 합니다. 자세한 내용은 배포 옵션을 참조하십시오.
-
dast
단계가 CI/CD 파이프라인 정의에 추가되어야 합니다. 이는 배포 단계 이후에 추가해야 하며, 예를 들어:stages: - build - test - deploy - dast
권장 사항
- 파이프라인이 각 실행마다 동일한 웹 서버에 배포되도록 구성된 경우 주의하세요. 서버가 업데이트되는 동안 DAST 스캔을 실행하면 부정확하고 비결정적인 결과가 발생합니다.
- 최신 버전의 분석기를 실행하기 위해 always pull policy를 사용하도록 러너를 구성하세요.
-
기본적으로 DAST는 파이프라인의 이전 작업에 의해 정의된 모든 아티팩트를 다운로드합니다.
DAST 작업이 테스트 중인 URL을 정의하기 위해
environment_url.txt
또는 이전 작업에서 생성된 다른 파일에 의존하지 않는 경우, 아티팩트를 다운로드하지 않는 것이 좋습니다. 아티팩트 다운로드를 방지하기 위해 분석기 CI/CD 작업을 확장하여 의존성을 지정하지 않도록 하세요. 예를 들어, DAST 프록시 기반 분석기에서 다음을.gitlab-ci.yml
파일에 추가하세요:dast: dependencies: []
애플리케이션 배포 옵션
DAST는 스캔할 수 있는 배포된 애플리케이션이 필요합니다.
대상 애플리케이션의 복잡성에 따라 DAST 템플릿을 배포하고 구성하는 방법에 대해 몇 가지 옵션이 있습니다. 예제 애플리케이션 세트와 그 구성은 DAST demonstrations 프로젝트에서 제공됩니다.
리뷰 앱
리뷰 앱은 DAST 대상 애플리케이션을 배포하는 가장 복잡한 방법입니다. 이 과정을 지원하기 위해 Google Kubernetes Engine(GKE)을 사용하여 리뷰 앱 배포를 만들었습니다. 이 예제는 리뷰 앱 - GKE 프로젝트에서 찾을 수 있으며, DAST에 대한 리뷰 앱 구성을 위한 자세한 지침은 README.md에서 확인할 수 있습니다.
도커 서비스
애플리케이션이 도커 컨테이너를 사용하는 경우, DAST로 배포 및 스캔하는 또 다른 옵션이 있습니다.
도커 빌드 작업이 완료되고 이미지가 컨테이너 레지스트리에 추가된 후, 이 이미지를 서비스로 사용할 수 있습니다.
.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_TARGET_URL: https://yourapp
DAST_FULL_SCAN: "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