Java 및 Kotlin용 Snyk CLI
Maven 및 Gradle 프로젝트를 테스트하려면 다음과 같이 snyk test 명령을 사용하십시오:
Gradle과 함께 Snyk CLI 사용: 종속성 그래프를 구축하기 위해 Snyk은 Gradle과 통합되어 도구에서 보고된 종속성을 검사합니다. 다음 매니페스트 파일이 지원됩니다:
build.gradle(Groovy DSL) 및build.gradle.kts(Kotlin DSL).Maven과 함께 Snyk CLI 사용: 종속성 트리를 구축하기 위해 Snyk은 Maven과 통합되어 도구에서 보고된 종속성을 검사합니다. 다음 매니페스트 파일이 지원됩니다:
pom.xml.
다음 표에는 종속성 스캔을 시작하기 위한 옵션이 나열되어 있습니다. snyk test 및 snyk monitor 명령을 다룹니다. 이러한 명령에 대한 모든 옵션 목록은 CLI 명령 및 옵션 요약을 참조하십시오.
Maven
--maven-aggregate-project
Maven 프로젝트용 옵션을 참조하십시오.
어그리게이트(aggregate) 프로젝트 예시:
snyk test --maven-aggregate-project
비어그리게이트 프로젝트 예시: snyk test --all-projects
루트 pom.xml 파일과 동일한 디렉토리에서 옵션을 실행해야 합니다.
--maven-aggregate-project
Maven 프로젝트용 옵션을 참조하십시오.
어그리게이트 프로젝트 예시:
snyk monitor --maven-aggregate-project
비어그리게이트 프로젝트 예시: snyk monitor --all-projects
루트 pom.xml 파일과 동일한 디렉토리에서 옵션을 실행해야 합니다.
Gradle
--sub-project=<NAME>, --gradle-sub-project=<NAME> - 특정 Gradle 서브 프로젝트를 테스트합니다.
--all-sub-projects - 모든 Gradle 서브 프로젝트를 테스트합니다.
--all-projects - 모든 Gradle 프로젝트를 테스트합니다.
--configuration-matching=<CONFIGURATION_REGEX> - 지정된 Java 정규식과 일치하는 첫 번째 구성을 사용하여 종속성을 해결합니다.
--configuration-attributes=<ATTRIBUTE>[,<ATTRIBUTE>]... - 종속성을 설치하고 해결하기 위해 특정 구성 속성 값을 선택합니다.
--init-script=<FILE> - Gradle 초기화 스크립트가 있는 프로젝트에 사용됩니다.
Gradle 프로젝트용 옵션을 참조하십시오.
--sub-project=<NAME>, --gradle-sub-project=<NAME> - 특정 Gradle 서브 프로젝트를 모니터링합니다.
--all-sub-projects - 모든 Gradle 서브 프로젝트를 모니터링합니다.
--all-projects - 모든 Gradle 프로젝트를 모니터링합니다.
--configuration-matching=<CONFIGURATION_REGEX> - 지정된 Java 정규식과 일치하는 첫 번째 구성을 사용하여 종속성을 해결합니다.
--configuration-attributes=[,]... - 종속성을 설치하고 종속성 해결을 수행하기 위해 특정 구성 속성 값을 선택합니다.
--init-script=<FILE> - Gradle 초기화 스크립트가 있는 프로젝트에 사용됩니다.
Gradle 프로젝트용 옵션을 참조하십시오.
빌드 도구 (Build tools)
snyk test -- [<context-specific_options>]
빌드 도구용 옵션을 참조하십시오.
snyk monitor -- [<context-specific_options>]
빌드 도구용 옵션을 참조하십시오.
비관리형(Unmanaged) JAR 파일
--scan-unmanaged - 비관리형 파일을 테스트합니다.
--scan-unmanaged --file=<JAR_FILE_NAME> - 개별 JAR, WAR, AAR 파일을 테스트합니다.
--scan-all-unmanaged - 현재 폴더에서 Maven, JAR, WAR, AAR 파일을 재귀적으로 자동 감지합니다.
비관리형 JAR 파일용 옵션을 참조하십시오.
--scan-unmanaged - 비관리형 파일을 테스트합니다.
--scan-unmanaged --file=<JAR_FILE_NAME> - 개별 JAR, WAR, AAR 파일을 테스트합니다.
--scan-all-unmanaged - 현재 폴더에서 Maven, JAR, WAR, AAR 파일을 재귀적으로 자동 감지합니다.
비관리형 JAR 파일용 옵션을 참조하십시오.
Maven 프로젝트를 위한 CLI 도움말
Maven 어그리게이트(aggregate) 프로젝트는 모듈과 상속을 사용하는 프로젝트입니다. 이러한 유형의 프로젝트를 스캔할 때 Snyk은 모든 모듈이 Maven 리액터(reactor)에 의해 수정 가능한지 확인하기 위해 컴파일을 수행합니다.
어그리게이트 프로젝트를 스캔하려면 --maven-aggregate-project 옵션을 사용하십시오:
snyk test --maven-aggregate-project비어그리게이트 프로젝트를 스캔하려면 --all-projects 옵션을 사용하십시오:
snyk test --all-projectssnyk monitor에서도 동일한 옵션을 사용할 수 있습니다.
루트 pom.xml 파일과 동일한 디렉토리에서 옵션을 실행해야 합니다. 각각의 개별 서브 프로젝트는 웹 UI에서 별도의 Snyk 프로젝트로 표시됩니다.
다음 예시는 Snyk CLI에서 Maven 전용 옵션을 사용하는 방법을 보여줍니다.
"prod"라는 특정 Maven 프로필을 테스트합니다.
pom.xml 파일의 시스템 속성(예: pom.xml에 표시된 패키지 버전)을 추가합니다:
시스템 속성을 정의합니다:
Gradle 프로젝트를 위한 CLI 도움말
Gradle 빌드는 여러 서브 프로젝트로 구성될 수 있으며, 각 서브 프로젝트는 자체 build.gradle을 가지고 있고 루트 프로젝트만 settings.gradle 파일을 포함합니다. 서브 프로젝트는 루트 프로젝트에 의존하지만 다르게 구성될 수도 있습니다.
기본적으로 Snyk CLI는 현재 프로젝트, 현재 폴더의 루트에 있는 프로젝트, 또는 --file=path/to/build.gradle로 지정된 프로젝트만 스캔합니다.
모든 프로젝트를 한 번에 스캔하려면(권장) --all-sub-projects 옵션을 사용하십시오:
각각의 개별 서브 프로젝트는 웹 UI에서 별도의 Snyk 프로젝트로 표시됩니다.
특정 프로젝트(예: "myapp")를 스캔하려면 다음 명령을 사용하십시오:
Gradle 구성 (Configurations)
Gradle 종속성은 특정 범위(scope)에 대해 선언됩니다. 각 범위는 구성(Configurations)의 도움을 받아 Gradle에 의해 표시됩니다. 예:
implementation: 컴파일 타임 및 런타임에 필요하지만 소비자에게 노출되지 않는 종속성을 위한 구성입니다.api: 컴파일 타임 및 런타임에 필요하며 소비자에게 노출되는 종속성을 위한 구성입니다.compileOnly: 컴파일 타임에만 필요한 종속성을 위한 구성입니다.runtimeOnly: 런타임에만 필요한 종속성을 위한 구성입니다.compileClasspath: 컴파일 타임에 필요한 종속성을 위한 구성입니다.
대부분의 경우 Snyk은 compileClasspath 구성의 모든 종속성을 포함하지만, 상황에 따라 달라질 수 있습니다.
특정 구성을 테스트하려면:
매개변수로 Java 정규식(대소문자 구분 안 함)과 함께
--configuration-matching옵션을 사용하십시오. 일치하는 첫 번째 구성만 테스트됩니다.서로 다른 서브 프로젝트에 서로 다른 구성이 포함된 경우 각 서브 프로젝트를 별도로 스캔하십시오.
--configuration-matching 옵션 사용 예시:
compile,testCompile,compileOnly등과 일치시키려면--configuration-matching=compile.compile만 일치시키려면--configuration-matching=^compile$.debugCompile및releaseCompile과 일치시키려면--configuration-matching='^(debug|release)compile$'."test" 문자열을 포함하는 구성을 제외한 모든 구성과 일치시키려면
--configuration-matching='^(?!.*test).*$'.
Android 빌드 변형 (Build variants)
Android Gradle은 빌드 변형(build variants)을 구성하여 앱의 서로 다른 버전을 생성하는 것을 지원합니다.
Snyk의 기본 동작은 사용 가능한 모든 구성을 병합하는 것이므로, 반복되는 변형은 병합할 수 없는 구성 간의 충돌을 일으킵니다.
이러한 상황에서 Snyk 스캔은 Gradle로부터 다음과 같은 메시지 중 하나를 포함하는 오류와 함께 실패합니다:
Cannot choose between the following configurations of
project :mymodulewithvariantsCannot choose between the following variants of
project :mymodulewithvariantsCould not select value from candidates
이러한 충돌을 피하려면:
특정 구성을 사용하십시오: 필요한 모든 속성을 가진 빌드 구성이 있고 해당 구성이 테스트에 포함된 모든 서브 프로젝트에서 동일한 경우, 해당 구성을 지정하십시오. 예:
종속성 구성을 명시적으로 지정하십시오: 특정 구성을 사용하도록 build.gradle 파일의 프로젝트 내 종속성을 수정하십시오.
구성 속성을 제안하십시오: 명령 실행 시 오류가 발생하면 사용 가능한 속성 값이 무엇인지 표시될 수 있으며, Gradle의 오류 세부 정보에는 어떤 종속성 변형이 어떤 속성과 일치하는지도 표시됩니다. 이러한 세부 정보를 사용하여 속성 필터 옵션을 추가하십시오. 예:
이는
com.android.build.api.attributes.BuildTypeAttr=release및org.gradle.usage=java-runtime을 사용하는 변형과 일치합니다.
데몬 (Daemon)
기본적으로 Snyk은 Windows에서 snyk test 및 snyk monitor를 실행할 때 백그라운드에서 gradle build --no-daemon을 전달합니다.
다른 운영 체제에서 데몬 관련 문제로 인해 snyk test 또는 snyk monitor가 실패하는 경우, Snyk 명령에 --no-daemon 플래그를 추가하거나 GRADLE_OPTS: '-Dorg.gradle.daemon=false'를 설정해 보십시오.
데몬 비활성화에 대한 팁은 Gradle 문서를 참조하십시오.
락파일 (Lockfiles)
Gradle 프로젝트에서 구성당 단일 gradle.lockfile 또는 여러 *.lockfile을 사용하는 경우 다음과 같은 문제가 발생할 수 있습니다:
compileOnly 구성은 지원 중단되었으며, 프로젝트에서 락파일을 성공적으로 생성하더라도 이 구성은 해결될 수 없으므로 compileOnly 상태가 포함되지 않습니다.
해결 가능한 구성만 종속성 그래프를 계산합니다. 이 문제를 해결하기 위해 Snyk은 dependencyLocking 로직이 포함된 build.gradle을 다음과 같은 지침으로 업데이트할 것을 제안합니다:
이렇게 하면 compileOnly를 무시하고 프로젝트 분석에 필요한 정보만 저장합니다.
Snyk으로 Gradle 프로젝트를 테스트하는 데 어려움이 있는 경우, 다음 세부 정보와 함께 Snyk 지원팀에 문의하십시오:
build.gradlesettings.gradle(특히 Snyk이 패키지 버전을 인식하지 못한 경우)다음 명령의 출력 결과:
$ snyk test -d$ gradle dependencies -q
ant 및 ivy를 위한 해결 방법
ant 및 ivy를 위한 해결 방법Apache Ant는 XML로 정의된 빌드 태스크를 실행하는 데 전념하는 Java 빌드 시스템입니다. Apache Ivy는 종속성 관리를 추가하여 라이브러리 검색 및 전이 종속성 처리를 담당함으로써 Ant를 확장합니다.
Ivy 종속성은 XML 파일(예: ivy.xml)에 구성됩니다:
이러한 종속성 파일은 일반적으로 build.xml에 정의된 ant 태스크를 사용하여 평가됩니다:
ant resolve-dependencies 명령을 사용하면 일반 Maven 종속성과 마찬가지로 Maven Central에서 종속성이 다운로드됩니다.
Snyk에 종속성 트리를 알리려면 먼저 Maven POM 형식으로 변환해야 합니다. build.xml에 새로운 makepom 태스크를 구성하는 것부터 시작하십시오.
이제 다음 명령을 실행할 수 있습니다:
pom.xml 파일은 체크인할 필요가 없으며 snyk을 사용한 테스트가 완료된 후 삭제할 수 있습니다. 또한 종속성 트리는 다음을 사용하여 모니터링할 수 있습니다:
Snyk CLI 팁 및 요령
CLI 명령 및 옵션 요약 및 CLI 치트 시트를 참조하십시오. Snyk CLI 명령에 대한 자세한 내용은 CLI에서 --help 옵션을 사용하십시오.
자체 코드 테스트
소스 코드 분석을 수행하려면 프로젝트 루트에서
snyk code test명령을 사용하십시오.현재 작업 디렉토리 아래의 모든 jar 파일을 재귀적으로 찾으려면
--scan-all-unmanaged --all-projects를 사용하십시오.
오픈소스 라이브러리 테스트
Maven
snyk test 명령은 발견되는 첫 번째 매니페스트를 테스트하고 해당 단일 진입점에 대해 스캔을 수행합니다. 모든 매니페스트를 스캔하려면 다음 지침을 따르십시오:
어그리게이트(aggregate) 프로젝트를 스캔하려면
--maven-aggregate-project옵션을 사용하십시오. (예:snyk test --maven-aggregate-project)모든 프로젝트를 스캔하려면
--all-projects옵션을 사용하십시오: (즉,snyk test --all-projects)
Snyk은 기본적으로 활성화된 활성 프로필을 스캔합니다.
모든 추가 Maven 인수를 전달할 수 있으며, 흔한 예로는 비표준 settings.xml 위치가 있습니다. 예:
snyk test -- -s path/to/settings.xml특정 구성을 스캔하려면
-P [name]을 사용하여 특정 Maven 프로필을 테스트하십시오. 예를 들어,prod구성을 스캔하려면snyk test -- -P prod를 사용하십시오.
Gradle
기본적으로 Snyk CLI는 현재 프로젝트(현재 폴더의 루트에 있는 프로젝트) 또는 --file=path/to/build.gradle로 지정된 프로젝트만 스캔합니다.
--all-projects는 모든 패키지 관리자에서 사용할 수 있으며, 아래에 언급된 --all-sub-projects의 동작도 포함합니다.
모든 프로젝트를 한 번에 스캔하려면(권장)
--all-sub-projects옵션을 사용하십시오: (즉,snyk test --all-sub-projects). 각각의 개별 서브 프로젝트는 웹 UI에서 별도의 Snyk 프로젝트로 표시됩니다.특정 프로젝트(예: myapp)를 스캔하려면
--sub-project=를 사용하십시오 (즉,snyk test --sub-project=myapp).
특정 구성을 테스트하려면 Java 및 Kotlin용 Snyk의 상세 예시를 참조하십시오.
Android 빌드 변형의 경우, Java 및 Kotlin용 Snyk을 참조하십시오.
비관리형 (Unmanaged)
비관리형 Jar에 대한 자세한 내용은 모든 비관리형 JAR 파일 스캔 페이지를 참조하십시오.
컨테이너 테스트
Snyk은 컨테이너 스캔의 일부로 애플리케이션(예: 오픈소스, Maven, npm) 취약점을 자동으로 검색합니다. Snyk은 파이프라인 초기에 CLI 또는 레지스트리를 통해 통합하고 이를 프로덕션에 있는 항목에 대한 추가적인 신호 또는 통찰력으로 사용할 것을 권장합니다. 컨테이너 보안을 위한 Snyk CLI를 참조하십시오.
코드형 인프라(Infrastructure as Code)를 테스트하려면 코드형 인프라 보안을 참조하십시오.
취약점을 수정하려면 Maven 프로젝트의 취약점 수정을 참조하십시오.
옵션 및 플러그인
로컬 또는 빌드 시 보고서를 생성하는 데 도움이 필요하면 snyk-to-html 플러그인을 참조하십시오.
프로그래밍 방식으로 액세스할 수 있는 출력을 생성하려면 --json 및 --sarif 옵션을 참조하십시오.
고급 필터링 옵션은 snyk-filter를 참조하십시오.
Last updated