Infrastructure as Code scanning
- GitLab 14.5에서 소개되었습니다.
인프라스트럭처의 코드(IaC) 스캔은 CI/CD 파이프라인에서 실행되며, 인프라 정의 파일을 알려진 취약점을 확인합니다. 기본 브랜치에 커밋되기 전에 취약점을 신속하게 대응하여 애플리케이션의 위험을 줄일 수 있습니다.
IaC 스캔 분석기는 JSON 형식의 보고서를 작업 아티팩트로 출력합니다.
GitLab Ultimate로는 IaC 스캔 결과를 다음과 같이 처리할 수 있습니다:
- Merge Request에서 볼 수 있습니다.
- 승인 워크플로에 사용할 수 있습니다.
- 취약점 보고서에서 검토할 수 있습니다.
스캐너 활성화
사전 요구 사항:
- IaC 스캔은 AMD64 아키텍처가 필요합니다. Microsoft Windows는 지원되지 않습니다.
- 일관된 성능을 보장하기 위해 최소한 4GB의 RAM이 필요합니다.
-
.gitlab-ci.yml
파일에서test
단계가 필요합니다. - GitLab Self-managed의 경우,
docker
또는kubernetes
executor가 있는 GitLab Runner가 필요합니다. - GitLab.com에서 SaaS 러너를 사용하는 경우, 기본적으로 활성화되어 있습니다.
프로젝트의 IaC 스캔을 활성화하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 빌드 > 파이프라인 편집기를 선택합니다.
-
다음을
.gitlab-ci.yml
파일 하단에 복사하여 붙여넣습니다. 이미include
라인이 있는 경우에는 아래에template
라인만 추가하십시오.include: - template: Jobs/SAST-IaC.gitlab-ci.yml
- 유효성 검사 탭을 선택한 다음 파이프라인 유효성 검사를 선택합니다. 시뮬레이션이 성공적으로 완료라는 메시지가 나오면 파일이 유효함을 나타냅니다.
- 편집 탭을 선택합니다.
- 변경 사항 커밋을 선택합니다.
이제 파이프라인에 IaC 스캔 작업이 포함됩니다.
지원되는 언어 및 프레임워크
IaC 스캔은 다양한 IaC 구성 파일을 지원합니다. 프로젝트에 지원되는 구성 파일이 감지되면 KICS를 사용하여 스캔됩니다. IaC 구성 파일이 혼합된 프로젝트도 지원됩니다.
지원되는 구성 형식:
- Ansible
- AWS CloudFormation
- Azure Resource Manager 1
- Dockerfile
- Google Deployment Manager
- Kubernetes
- OpenAPI
- Terraform 2
- IaC 스캔은 JSON 형식의 Azure Resource Manager 템플릿을 분석할 수 있습니다. 만약 Bicep 언어로 템플릿을 작성했다면, IaC 스캔에서 분석하기 전에 Bicep 파일을 JSON으로 변환하기 위해 [bicep CLI](https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/bicep-cli)를 사용해야 합니다.
- 사용자 정의 레지스트리에 있는 Terraform 모듈은 취약점을 스캔하지 않습니다. 제안된 기능에 대한 자세한 내용은 [issue 357004](https://gitlab.com/gitlab-org/gitlab/-/issues/357004)를 참조하십시오.
규칙 사용자 정의
규칙 오버라이딩 지원이 GitLab 14.8에서 소개되었습니다.
GitLab에서 제공하는 기본 IaC 스캔 규칙을 사용자 정의할 수 있습니다.
다음 사용자 정의 옵션은 개별적으로 또는 함께 사용할 수 있습니다:
규칙 집합 정의
각 IaC 스캔 규칙은 ruleset
섹션에 포함되며 다음을 포함합니다:
- 규칙의
type
필드. IaC 스캔을 위해 식별자 유형은kics_id
입니다. - 규칙 식별자를 위한
value
필드. KICS 규칙 식별자는 알파벳과 숫자로 이루어진 문자열입니다. 규칙 식별자를 찾으려면:- JSON 보고서 아티팩트에서 찾습니다.
- KICS 쿼리 디렉터리에서 규칙 이름을 찾아 알파벳과 숫자로 이루어진 식별자를 복사합니다. 규칙 이름은 취약점 페이지에서 표시됩니다.
규칙 비활성화
특정 IaC 스캔 규칙을 비활성화할 수 있습니다.
분석기 규칙을 비활성화하려면:
- 해당 프로젝트의 루트에
.gitlab
디렉터리를 생성합니다(이미 존재하지 않은 경우). -
.gitlab
디렉터리에sast-ruleset.toml
이라는 사용자 정의 규칙 파일을 생성합니다(이미 존재하지 않은 경우). -
ruleset
섹션 내에서disabled
플래그를true
로 설정합니다. - 하나 이상의
ruleset
하위 섹션에 비활성화할 규칙을 나열합니다.
다음 예시의 sast-ruleset.toml
파일에서 비활성화된 규칙은 type
과 value
를 일치시켜 kics
분석기에 할당되었습니다:
[kics]
[[kics.ruleset]]
disable = true
[kics.ruleset.identifier]
type = "kics_id"
value = "8212e2d7-e683-49bc-bf78-d6799075c5a7"
[[kics.ruleset]]
disable = true
[kics.ruleset.identifier]
type = "kics_id"
value = "b03a748a-542d-44f4-bb86-9199ab4fd2d5"
규칙 재정의
특정 IaC 스캔 규칙을 재정의하여 사용자 정의할 수 있습니다. 예를 들어 규칙의 심각도를 낮추거나, 발견물을 수정하는 방법에 대해 자체 문서에 링크를 할당할 수 있습니다.
규칙을 재정의하려면:
- 프로젝트 루트에
.gitlab
디렉터리를 만들어줍니다. 이미 존재한다면 이 단계는 생략합니다. -
.gitlab
디렉터리에sast-ruleset.toml
이라는 사용자 정의 규칙 파일을 만듭니다. 이미 존재한다면 이 단계는 생략합니다. - 하나 이상의
ruleset.identifier
하위 섹션에 재정의할 규칙을 나열합니다. -
ruleset
섹션의ruleset.override
컨텍스트에서 재정의할 키를 제공합니다. 키를 모두 조합하여 재정의할 수 있습니다. 유효한 키는 다음과 같습니다:- 설명
- 메시지
- 이름
- 심각도 (유효한 옵션은: Critical, High, Medium, Low, Unknown, Info)
다음 예시에서는 sast-ruleset.toml
파일에 대해 규칙을 일치시키고 그 후 재정의하는 방법을 보여줍니다:
[kics]
[[kics.ruleset]]
[kics.ruleset.identifier]
type = "kics_id"
value = "8212e2d7-e683-49bc-bf78-d6799075c5a7"
[kics.ruleset.override]
description = "재정의된 설명"
message = "재정의된 메시지"
name = "재정의된 이름"
severity = "Info"
특정 분석기 버전 사용
GitLab이 관리하는 CI/CD 템플릿은 주 버전을 지정하고 해당 주 버전에서 최신 분석기를 자동으로 가져옵니다. 경우에 따라 특정 버전을 사용해야 할 수 있습니다. 예를 들어, 나중에 릴리스에서의 회귀를 피해야 할 수 있습니다.
특정 분석기 버전을 사용하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
- 빌드 > 파이프라인 편집기를 선택합니다.
-
SAST-IaC.gitlab-ci.yml
템플릿이 포함된 라인 뒤에SAST_ANALYZER_IMAGE_TAG
CI/CD 변수를 추가합니다.이 변수는 특정 작업에서만 설정하세요. 최상위에서 설정하면 설정한 버전이 다른 SAST 분석기에 사용됩니다.다음과 같이 태그를 설정합니다:
-
3
과 같은 주 버전: 이 주 버전에서 릴리스되는 모든 마이너 또는 패치 업데이트가 파이프라인에서 사용됩니다. -
3.7
과 같은 마이너 버전: 이 마이너 버전에서 릴리스되는 모든 패치 업데이트가 파이프라인에서 사용됩니다. -
3.7.0
과 같은 패치 버전: 파이프라인에는 업데이트가 적용되지 않습니다.
-
다음 예시는 특정 IaC 분석기의 마이너 버전을 사용하는 방법을 보여줍니다:
include:
- template: Jobs/SAST-IaC.gitlab-ci.yml
kics-iac-sast:
variables:
SAST_ANALYZER_IMAGE_TAG: "3.1"
지원되는 배포
GitLab 스캐너는 크기 및 유지 관리 편의성을 위해 기본 Alpine 이미지가 제공됩니다.
FIPS 활성화 이미지 사용
- GitLab 14.10에서 도입.
표준 이미지에 추가하여 스캐너 이미지의 FIPS 활성화 Red Hat UBI 버전을 제공합니다.
파이프라인에서 FIPS 활성화 이미지를 사용하려면 SAST_IMAGE_SUFFIX
를 -fips
로 설정하거나 표준 태그와 -fips
확장을 수정합니다.
다음 예시는 SAST_IMAGE_SUFFIX
CI/CD 변수를 사용한 예시입니다.
variables:
SAST_IMAGE_SUFFIX: '-fips'
include:
- template: Jobs/SAST-IaC.gitlab-ci.yml
자동 취약점 해결
- GitLab 15.9에서 도입됨. 프로젝트 수준 플래그
sec_mark_dropped_findings_as_resolved
로 제공됨.- GitLab 16.2에서 일반적으로 사용 가능함. 피처 플래그
sec_mark_dropped_findings_as_resolved
가 제거됨.
여전히 관련성 있는 취약점에 중점을 두도록 돕기 위해 IaC 스캔은 자동으로 해결합니다.
- 사전 정의된 규칙을 비활성화.
- 기본 규칙집에서 규칙을 제거할 경우.
규칙을 나중에 다시 활성화하면 발견물은 가시화를 위해 다시 열립니다.
자동 취약점 관리 시스템은 취약점을 자동으로 해결할 때 메모를 추가합니다.
보고서 JSON 형식
IaC 스캐너는 기존 SAST 보고서 형식의 JSON 보고서 파일을 출력합니다. 자세한 내용은 이 보고서의 스키마를 참조하세요.
JSON 보고서 파일을 다음 위치에서 다운로드할 수 있습니다:
- CI 파이프라인 페이지.
- Merge Request의 파이프라인 탭에서
artifacts: paths
를 설정하여(../../../ci/yaml/index.md#artifactspaths
)gl-sast-report.json
로.
자세한 내용은 아티팩트 다운로드를 참조하세요.
문제 해결
IaC 스캔을 수행하는 동안 다음과 같은 문제가 발생할 수 있습니다.
IaC 스캔 결과가 예기치 않게 No longer detected
로 표시됨
이전에 감지된 결과가 예상치 않게 No longer detected
로 표시되면, 스캐너의 업데이트로 인한 것일 수 있습니다. 업데이트로 인해 효과가 없거나 잘못된 양성이 발견된 규칙이 비활성화되고 결과가 No longer detected
로 표시됩니다.
GitLab 15.3에서 IaC 스캐너에서 시크릿 탐지가 비활성화되었으므로 “비밀 및 시크릿” 패밀리의 IaC 결과가 No longer detected
로 표시됩니다.
작업 로그에 exec /bin/sh: exec format error
메시지
작업 로그에 exec /bin/sh: exec format error
라는 오류가 표시될 수 있습니다. 이 문제는 AMD64 아키텍처 이외의 아키텍처에서 IaC 스캔 분석기를 실행하려고 시도할 때 발생합니다. IaC 스캔 사전 요구 사항의 자세한 내용은 스캐너 활성화를 참조하세요.