저장소 코드 스캔과 규칙 관리
코드 스캔은 Foundry의 지속적 통합 시스템 Jemma에 연결된 정적 분석 기능입니다. 여러 프로그래밍 언어와 파일 형식의 코드를 검사해 취약점, 유지보수 문제와 코딩 기준 위반을 찾고 심각도와 함께 표시합니다.
플랫폼 인스턴스 관리자가 활성화한 저장소에서는 커밋마다 일반 Checks를 실행하기 전에 스캔합니다. 기본 SAST 규칙을 적용하며 관리자는 개별 규칙을 끄거나 사용자 정의 규칙을 추가할 수 있습니다.
결과와 검사 진행
기본적으로 발견 사항이 없으면 Jemma의 나머지 검사를 계속 실행하고, 발견 사항이 있으면 검사를 실패 처리합니다. 관리자는 경고만 남기고 계속 진행하도록 바꿀 수 있습니다.
결과는 Checks에서 관련 빌드를 선택하고 Code scan 탭을 펼쳐 확인합니다. Download scan report로 JSON 보고서를 내려받을 수 있습니다.
스캔 활성화와 예외
플랫폼 인스턴스 관리자는 Control Panel > All Settings > Security & Governance > Code scanning에서 설정합니다.
전체 저장소에 적용할 기본값은 상단 토글로 켜거나 끕니다.
프로젝트와 저장소별 override는 전체 설정과 관계없이 적용되며, 더 구체적인 대상이 우선합니다.
| 우선순위 | 설정 | 적용 범위 |
|---|---|---|
| 1 | Repository scanning overrides | 개별 저장소입니다. 프로젝트 및 전체 설정보다 우선합니다. |
| 2 | Project scanning overrides | 프로젝트의 모든 저장소입니다. 전체 설정보다 우선합니다. |
| 3 | Enrollment-wide setting | 어떤 override에도 포함되지 않은 저장소입니다. |
예를 들어 프로젝트를 Never scan projects에 넣고 그 안의 저장소 하나를 Always scan repositories에 넣으면 그 저장소는 검사합니다.
프로젝트 예외는 Always scan projects 또는 Never scan projects에 대상을 추가합니다.
저장소 예외는 Always scan repositories 또는 Never scan repositories에 대상을 추가합니다.
Error와 Warn 모드
Error 모드는 취약점이 발견되면 검사를 실패 처리하므로 사용자가 문제를 수정하고 Checks를 다시 실행해야 합니다. Warn 모드는 발견 사항을 경고로 남기고 나머지 검사를 진행합니다.
규칙 종류와 범위
같은 Code scanning 설정의 Rules 탭에서 규칙을 관리합니다. 규칙은 찾을 패턴, 발견 시 보여 줄 메시지와 심각도를 정의합니다. 설정은 플랫폼 인스턴스 단위이므로 변경은 코드 스캔 대상인 모든 저장소에 적용됩니다.
| 종류 | 관리 주체와 기능 |
|---|---|
Built-in | Palantir가 유지보수 및 갱신합니다. 활성화, 비활성화, 복제와 다운로드를 지원합니다. 직접 편집하거나 삭제할 수 없습니다. |
Custom | 플랫폼 인스턴스 관리자가 추가합니다. 활성화, 비활성화, 복제, 다운로드, 편집과 삭제를 지원합니다. |
기본 규칙은 기본 SAST 규칙 집합을 사용합니다. 기본 규칙을 바꾸고 싶으면 복제한 사용자 정의 규칙을 편집하고 원본을 비활성화합니다.
Built-in 및 Custom 탭에서 검색어와 All, Enabled, Disabled 상태 필터로 규칙을 찾습니다. 규칙을 선택하면 정의가 편집기에 표시됩니다.
규칙 활성화와 비활성화
각 규칙의 Enabled 또는 Disabled 상태를 토글로 바꿉니다. 비활성화는 전체 스캔 대상 저장소에 영향을 주므로 확정 전에 확인을 요구합니다. 활성화는 즉시 설정에 반영됩니다.
규칙을 비활성화해도 완료한 스캔의 과거 발견 사항은 사라지지 않습니다. 다음 스캔부터 해당 규칙을 건너뜁니다.
사용자 정의 규칙 작성
Custom 탭의 New rule에서 정의를 작성하고 Save로 저장합니다. 저장하면 바로 활성화되며 다음 스캔부터 적용합니다. 아직 실행하지 않으려면 저장한 규칙을 비활성화합니다.
정의는 유효한 Semgrep 규칙 형식을 따라야 하고 다음 조건을 충족해야 합니다.
- 정의 하나에 규칙을 정확히 하나만 포함합니다.
id를 지정합니다. 목록에 표시할 이름이며 문자, 숫자, 마침표, 밑줄과 하이픈만 사용합니다.- 같은 플랫폼 인스턴스의 다른 Custom 규칙과 ID가 같으면 안 됩니다. Built-in 규칙의 이름은 재사용할 수 있습니다.
저장 시 유효성을 검사하고 올바른 정의만 받습니다. 다음은 Python의 eval 호출을 찾는 규칙 예입니다. ...는 Semgrep 패턴 문법으로 임의의 인수를 나타냅니다.
rules:
- id: custom_python_no-eval
languages:
- python
message: |
신뢰할 수 없는 입력에 eval()을 사용하지 마세요. 리터럴 값 해석에는 ast.literal_eval()을 검토하세요.
severity: WARNING
metadata:
category: security
pattern: eval(...)
복제, 편집과 이름 변경
규칙 화면의 Duplicate는 편집 가능한 사본을 만듭니다. 원본이 Built-in이어도 사본은 항상 Custom이며 원본과 연결되지 않습니다. 저장 전에 사본에 새 id를 지정합니다.
Custom 규칙을 편집하면 Unsaved로 표시됩니다. Save는 변경을 적용하고 Cancel은 버립니다. 이름은 정의의 id에서 가져오므로 이름을 바꾸려면 id를 변경합니다.
파일로 가져오기와 내보내기
Download는 Built-in 또는 Custom 정의를 .yml 파일로 저장합니다. 규칙 목록 위 Upload에서 .yml 또는 .yaml을 선택하면 새 Custom 규칙으로 편집기에 열립니다. 정의를 검토한 뒤 Save로 저장합니다.
Custom 규칙은 Delete 후 확인하면 영구 삭제되고 모든 대상 저장소에서 실행을 중단합니다. 일시 중단만 필요하면 삭제 대신 비활성화합니다.
규칙은 무엇을 탐지할지를 정하고 저장소 선택은 앞의 전체 및 override 설정이 정합니다. 모든 규칙을 비활성화해도 스캔 자체는 실행되어 발견 사항 없이 완료됩니다.