Komponent do analizy pod kątem bezpiecezństwa (Application Security Testing).
This is the multi-page printable view of this section. Click here to print.
Application Security Testing
1 - 🛠 Job template: 💪 SonarQube Scanner (SAST)
Job SonarQube Scanner (SAST)
umożliwia analizę jakości kodu źródłowego oraz wykrywanie błędów z wykorzystaniem platformy SonarQube/SonarCloud. Szablon należy uruchamiać w etapie sast
, aby mieć pewność, że jakość kodu spełnia wymagania organizacji.
Wymagania wstępne
- SonarQube Scanner – dostępny w obrazie Dockera ustawianym przez
inputs.docker_image
. - Skonfigurowane konto w SonarCloud lub własnej instancji SonarQube (parametry:
sonar_host_url
,sonar_token
,sonar_project_key
).
⚙️ Parametry wejściowe (inputs
)
Nazwa | Typ | Domyślna wartość | Opis |
---|---|---|---|
docker_image |
string | registry.gitlab.com/pl.rachuna-net/containers/sonar-scanner:2.0.0 |
Obraz Dockera zawierający SonarQube Scanner |
logo_url |
string | https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads |
Adres URL logo wyświetlanego w logach |
sonar_user_home |
string | ${CI_PROJECT_DIR}/.sonar |
Lokalny katalog roboczy SonarQube |
sonar_host_url |
string | https://sonarcloud.io |
Adres instancji SonarQube lub SonarCloud |
sonar_organization |
string | pl-rachuna-net |
Nazwa organizacji w SonarCloud |
sonar_project_name |
string | (puste) | Nazwa projektu analizowanego w SonarQube |
sonar_project_key |
string | (puste) | Klucz projektu w SonarQube (unikalny identyfikator) |
sonar_token |
string | (puste) | Token uwierzytelniający do SonarQube |
sonar_project_description |
string | (puste) | Opis projektu w SonarQube |
sonar_project_version |
string | 1.0.0 |
Wersja analizowanego projektu |
sonar_sources |
string | . |
Ścieżka do katalogu ze źródłami do analizy |
🧬 Zmienne środowiskowe ustawiane w jobie
CONTAINER_IMAGE_SONAR_SCANNER
– obraz Dockera SonarQube Scanner (na podstawieinputs.docker_image
)SONAR_USER_HOME
– katalog roboczy SonarQubeSONAR_HOST_URL
– adres instancji SonarQube/SonarCloudSONAR_ORGANIZATION
– nazwa organizacjiSONAR_PROJECT_KEY
– klucz projektu w SonarQubeSONAR_PROJECT_NAME
– nazwa projektuSONAR_PROJECT_DESCRIPTION
– opis projektuSONAR_PROJECT_VERSION
– wersja projektuSONAR_SOURCES
– ścieżki źródeł do analizySONAR_TOKEN
– token uwierzytelniający do SonarQube
📤 Output
Job wykonuje następujące kroki:
-
Wyświetlenie zmiennych wejściowych i konfiguracji SonarQube.
-
Uruchomienie SonarQube Scanner z zadeklarowanymi parametrami:
- analiza kodu z podanych źródeł (
SONAR_SOURCES
), - przesłanie wyników do wskazanej instancji (
SONAR_HOST_URL
).
- analiza kodu z podanych źródeł (
Pipeline zakończy się niepowodzeniem, jeśli analiza SonarQube wykryje błędy jakościowe powodujące blokadę (quality gate failure).
🧪 Dostępny job
💪 sonarqube scanner (sast)
Analizuje kod źródłowy i przesyła wyniki do SonarQube/SonarCloud:
💪 sonarqube scanner:
stage: sast
image: $CONTAINER_IMAGE_SONAR_SCANNER
before_script:
- git config --global --add safe.directory ${CI_PROJECT_DIR}
- [ ! -z "${LOGO_URL}" ] && curl -s "${LOGO_URL}"
- !reference [.ast:_function_print_row]
- !reference [.ast:sonarqube_input_variables]
- !reference [.ast:sonarqube-init]
script:
- |
sonar-scanner \
-Dsonar.projectKey="${SONAR_PROJECT_KEY}" \
-Dsonar.organization="${SONAR_ORGANIZATION}" \
-Dsonar.projectName="${SONAR_PROJECT_NAME}" \
-Dsonar.projectDescription="${CI_PROJECT_DESCRIPTION}" \
-Dsonar.projectVersion="${SONAR_PROJECT_VERSION}" \
-Dsonar.sources="${SONAR_SOURCES}" \
-Dsonar.sourceEncoding=UTF-8 \
-Dsonar.token="${SONAR_TOKEN}"
rules:
- when: on_success
🧪 Przykład użycia w pipeline
include:
- component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/ast/sonarqube@$COMPONENT_VERSION_SONARQUBE
💪 sonarqube scanner:
variables:
SONAR_PROJECT_KEY: $CI_PROJECT_NAME
SONAR_PROJECT_NAME: "Project $CI_PROJECT_NAME"
SONAR_TOKEN: $SONAR_TOKEN
rules:
- when: on_success
2 - 🛠 Job template: 🔬 Trivy image scan (DAST)
Job Trivy image scan (DAST)
umożliwia automatyczne skanowanie obrazów kontenerów pod kątem luk bezpieczeństwa przy użyciu narzędzia Trivy.
Szablon można uruchamiać w etapie integration-test
, aby upewnić się, że obraz nie zawiera znanych podatności o poziomie HIGH lub
CRITICAL.
Wymagania wstępne
- Trivy – wbudowany w używany obraz Dockera (ustawiany przez
inputs.docker_image
). - Obraz kontenera, który ma zostać przeskanowany (ustawiany przez
inputs.container_to_analyze
).
⚙️ Parametry wejściowe (inputs
)
Nazwa | Typ | Domyślna wartość | Opis |
---|---|---|---|
docker_image |
string | registry.gitlab.com/pl.rachuna-net/containers/buildah:1.0.0 |
Obraz Dockera zawierający narzędzie Trivy |
logo_url |
string | https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads |
Adres URL logo wyświetlanego w logach |
container_to_analyze |
string | (puste) | Pełna nazwa obrazu, który ma być skanowany |
🧬 Zmienne środowiskowe ustawiane w jobie
CONTAINER_IMAGE_TRIVY
– obraz Dockera Trivy (na podstawieinputs.docker_image
)CONTAINER_TO_ANALYZE
– nazwa obrazu kontenera do przeskanowania (na podstawieinputs.container_to_analyze
)TRIVY_NO_PROGRESS
– wyłącza pasek postępu w logach (domyślnietrue
)TRIVY_CACHE_DIR
– lokalny katalog cache Trivy (domyślnie.trivycache/
)
📤 Output
Job wykonuje następujące kroki:
-
Uruchomienie skanowania obrazu kontenera (
CONTAINER_TO_ANALYZE
) z użyciem Trivy:- Najpierw wyszukiwanie luk o poziomie HIGH – raport ostrzegawczy (
--exit-code 0
). - Następnie wyszukiwanie luk o poziomie CRITICAL – pipeline zakończy się niepowodzeniem, jeśli takie wystąpią (
--exit-code 1
).
- Najpierw wyszukiwanie luk o poziomie HIGH – raport ostrzegawczy (
-
Wykorzystanie cache Trivy w katalogu
.trivycache/
w celu przyspieszenia kolejnych skanów.
🧪 Dostępny job
🔬 trivy (dast)
Skanuje wskazany obraz kontenera i kończy pipeline, jeśli znajdzie luki o poziomie CRITICAL:
🔬 trivy (dast):
image: $CONTAINER_IMAGE_TRIVY
stage: integration-test
services:
- name: $CONTAINER_IMAGE_TRIVY
alias: buildah-dind
allow_failure: true
before_script:
- git config --global --add safe.directory ${CI_PROJECT_DIR}
- [ ! -z "${LOGO_URL}" ] && curl -s "${LOGO_URL}"
- !reference [.ast:trivy_input_variables]
script:
- trivy image --exit-code 0 --severity HIGH $CONTAINER_TO_ANALYZE
- trivy image --exit-code 1 --severity CRITICAL $CONTAINER_TO_ANALYZE
cache:
paths:
- .trivycache/
🧪 Przykład użycia w pipeline
include:
- component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/ast/trivy@$COMPONENT_VERSION_TRIVY
🔬 trivy (dast):
allow_failure: true
variables:
CONTAINER_TO_ANALYZE: $CI_REGISTRY_IMAGE:$RELEASE_CANDIDATE_VERSION
rules:
- when: on_success