IBM Cloud를 위한 Code Risk Analyzer 플러그인
코드 위험 분석기는 2027년 2월 12일에 모든 지역에서 제공이 중단됩니다. 단, 코드 리스크 분석기 사용이 활성화되지 않은 지역의 경우 해당 지역의 서비스가 더 일찍 중단될 수 있습니다. 자세히 알아보기
IBM Cloud® 명령줄 인터페이스(CLI)는 코드 위험 분석을 위한 명령어를 제공합니다. IBM Cloud CLI를 사용하여 특정 규칙의 준수 및 취약성에 대해 사용자의 코드를 분석할 수 있습니다. 코드 위험 분석기는 도구 체인이 지원되는 모든 IBM Cloud 지역에서 사용할 수 있습니다.
CLI를 사용하여 다음 작업을 완료합니다:
- 모든 타사 OS 패키지 및 애플리케이션 패키지의 종속성 및 사용 가능한 라이선스 정보를 나열하는 BOM(자재 명세서)을 생성합니다. 이 출력은 CycloneDX-specific 형식으로도 생성할 수 있습니다.
- BOM에 나열된 패키지의 취약점을 발견하세요. 생성된 보고서를 CycloneDX-specific 형식으로 보거나 Node.js, Maven 또는 Gradle (Groovy) 애플리케이션에 대한 취약성 자동 수정 기능을 사용할 수도 있습니다.
- 특정 규칙을 준수하도록 Kubernetes 파일을 분석합니다.
2024년 1월부터 Code Risk Analyzer는 상용 회사인 Snyk Limited의 데이터 대신 Clair 오픈 소스 프로젝트에서 제공하는 취약성 데이터를 사용합니다. 이 변경으로 인해 회원님의 특별한 조치는 필요하지 않습니다. 그러나 코드 위험 분석기에서 보고된 CVE의 세부 사항에서 몇 가지 차이점을 발견할 수 있습니다.
지원되는 컨텐츠
Code Risk Analyzer는 Java™, Node.js, Python 및 Go 언어를 지원합니다. 다음 표에서는 Code Risk Analyzer가 지원하는 컨텐츠를 나열하고 설명합니다.
| 컨텐츠 | 설명 |
|---|---|
| Java | 리포지토리에는 빌드 자동화를 위해 Maven 또는 Gradle 이 필요합니다. Maven은 pom.xml 파일을 사용하여 종속성을 계산하고 Gradle 파일은 build.gradle(.kts) 파일을 사용합니다. 코드 위험 분석기는 Maven과 Gradle (Groovy) 모두에 대한 수정을 자동화할 수 있습니다. |
| Node.js | package-lock.json 파일은 종속성을 계산합니다. Node.js 의 경우 코드 위험 분석기로 수정 작업을 자동화할 수도 있습니다. 설치된 npm 버전이 프로젝트의 npm 버전과 일치하는지 확인합니다. |
| Python | 종속성은 requirements.txt 및 pyproject.toml 파일을 사용하여 계산합니다. |
| Golang | go mod 및 go dep 종속성 관리를 지원합니다. go mod의 경우 go.sum 파일은 저장소에 있어야 합니다. go dep의 경우 Gopkg.lock 파일은 저장소에 있어야 합니다. |
| Dockerfiles | 저장소에서 Dockerfile 패턴이 있는 파일이 고려됩니다. 컨테이너 이미지의 경우 Debian, Red Hat Enterprise Linux®, Alpine, Ubuntu Linux 배포판이 지원됩니다. |
| Kubernetes | .yaml 및 .yml 접미부가 붙은 파일이 고려됩니다. kind 값은 Pod, ReplicaSet, ReplicationController, Deployment, Daemonset, Statefulset, Job,
CronJob, NetworkPolicy 또는 Ingress 로 설정해야 합니다. |
| Calico | .yaml 및 .yml 접미부가 붙은 파일이 고려됩니다. kind 값은 NetworkPolicy, GlobalNetworkPolicy, Profile, NetworkSet, GlobalNetworkSet 또는 HostEndpoint 으로 설정해야 합니다. |
| Terraform | Terraform 제공자로 IBM Cloud을(를) 사용하여 Terraform 플랜 파일을 생성해야 합니다. |
코드 위험 분석기는 리포지토리의 소스 코드 및 이미지 종속성에 취약점이 있는지 검사합니다. 다음 표는 다양한 종류의 종속성에 대해 코드 위험 분석기가 참조하는 취약성 정보의 출처를 보여줍니다.
| 종속성 | 지원되는 버전 | 보안 주의사항 소스 |
|---|---|---|
| Alpine 이미지 | 공급업체 보안이 지원되는 모든 안정적인 버전. | Alpine SecDB 데이터베이스. |
| Debian 이미지 | 공급업체 보안이 지원되는 모든 안정적인 버전.
Debian 소스 패키지 |
Debian 보안 버그 추적기. |
| GoogleContainerTools 배포되지 않는 이미지 | 공급업체 보안이 지원되는 모든 안정적인 버전. | GoogleContainerTools 배포 없음 |
| Red Hat® Enterprise Linux® (RHEL) 이미지 | RHEL 6, RHEL/UBI 7, RHEL/UBI 8 및 RHEL/UBI 9 | Red Hat 보안 데이터 API. |
| Ubuntu 이미지 | 공급업체 보안이 지원되는 모든 안정적인 버전. | Ubuntu CVE 추적기. |
| Go, npm ( JavaScript ), Maven ( Java ), PyPI ( Python ), RubyGems ( Ruby ) 및 Packagist (PHP) | 공급업체 보안이 지원되는 모든 안정적인 버전. | 오픈 소스 취약점 데이터베이스. |
Code Risk Analyzer의 알려진 문제점
Code Risk Analyzer는 버전화 스키마(예: major.minor.patch)를 사용하지 않는 애플리케이션 패키지에서 취약성을 발견할 수 없습니다. 예를 들어, 빌드 메타데이터를 포함하는 사전 릴리스 버전 또는 버전은 지원되지 않습니다.
전제조건
-
IBM Cloud CLI를 설치하십시오. 지시사항은 IBM Cloud CLI 다운로드를 참조하십시오.
-
다음 명령을 실행하여 Code Risk Analyzer CLI 플러그인을 설치하십시오.
ibmcloud plugin install cra
-
지원되는 지역 중 하나에서 도구 체인에 액세스할 수 있는지 확인하십시오. 도구 체인에는 도구가 필요하지 않습니다. 도구 체인에 관한 자세한 정보는 앱에서 도구 체인 작성을 참조하십시오.
-
TOOLCHAIN_ID환경 변수를 설정하여 도구 체인 ID를 지정하십시오.
export TOOLCHAIN_ID=e22195a5-11e3-44ba-9533-e7c18a3a61a7
- 다음 명령을 실행하여 IBM Cloud의 특정 지역에 로그인하십시오. 여기서
[region]은(는) 도구 체인이 작성되었던 지역입니다.
ibmcloud login -r [region]
- 선택 사항으로, CLI 사용 시 데이터에 대한 제어 및 보안을 강화하기 위해 IBM Cloud 엔드포인트에 대한 비공개 경로를 사용할 수 있습니다. 먼저 계정에서 가상 라우팅 및 전달을 사용으로 설정한 후 IBM Cloud 개인용 서비스 엔드포인트를 사용하도록 설정할 수 있습니다. 사설 연결 옵션을 지원하도록 계정을 설정하는 데 관한 자세한 정보는 VRF 및 서비스 엔드포인트 사용을 참조하십시오.
다음 명령을 사용하여 [region] 이 툴체인이 생성된 지역인 비공개 엔드포인트에 로그인합니다.
ibmcloud login -a private.cloud.ibm.com -r [region]
CLI 사용 명령
IBM Cloud CLI 및 플러그인에 대한 업데이트가 사용 가능한 경우 명령행에서 알림을 수신합니다. 최신 명령을 사용할 수 있도록 CLI를 최신 상태로 유지해야 합니다. ibmcloud plugin list 명령을 실행하여 설치된 모든 플러그인의 현재 버전을 볼 수 있습니다.
Code Risk Analyzer 도움말
다음 명령은 Code Risk Analyzer 명령의 목록을 표시합니다.
ibmcloud cra --help
Code Risk Analyzer 명령 도움말
다음 명령은 명령에 사용되는 플래그의 세부사항을 표시합니다. 사용 가능한 명령을 표시하려면 ibmcloud cra --help을(를) 사용하십시오.
ibmcloud cra <command> --help
BOM(Bill of Materials)
bom-generate 명령은 지정된 디렉토리 경로의 아티팩트에 액세스하고 심층 발견을 수행하여 전이 종속성을 포함한 모든 종속성을 식별합니다. 이 명령은 이러한 종속성이 배포되는 라이선스도 식별합니다. 모든 종속성의 스냅샷을 캡처하는 BOM이 생성됩니다. BOM은 표준 형식 또는 CycloneDX's SBOM 형식으로 생성할 수 있습니다.
ibmcloud cra bom-generate
BOM 명령 요구사항
bom-generate 명령은 특정 외부 명령에 따라 달라집니다.
- 경로에 Dockerfile이 포함되어 있는 경우 이 명령은 각 Dockerfile에서 기본 이미지 및 모든 빌드 단계의 빌드 이미지를 풀다운합니다. 이 시나리오에서
bom-generate명령을 사용하려면Docker cli및tar명령이 사용 가능해야 합니다. - 경로에 Maven 파일이 있는 경우 이 명령은
mvn을(를) 사용하여 종속성 목록을 빌드합니다. 이 시나리오에서bom-generate명령을 사용하려면mvn명령이 사용 가능해야 합니다. - 경로에 Gradle 파일이 있는 경우 이 명령은
gradle을(를) 사용하여 종속성 목록을 빌드합니다. 이 시나리오에서bom-generate명령을 사용하려면gradle명령이 사용 가능해야 합니다. - 경로에 Node.js
package-json파일이 있고 이 명령을 사용하여 해당package-lock.json파일을 생성하는 경우bom-generate명령은npm을(를) 사용하여 package-lock.json 파일을 빌드합니다. 이 시나리오에서 명령을 사용하려면npm명령이 사용 가능해야 합니다. - 경로에 Python
requirements.txt또는pyproject.toml파일이 포함된 경우 이 명령은pip을 사용하여 패키지 종속성을 생성합니다. 이 시나리오에서bom-generate명령은pip명령을 사용할 수 있어야 합니다. Python 버전 2 및 Python 버전 3이 모두 지원됩니다.
Dockerfile을 사용하는 경우 기본 이미지를 가져오는 컨테이너 레지스트리에 로그인해야 합니다.
Dockerfile에 ARGS가 필요한 경우 명령을 실행하기 전에 개별 ARG를 환경 변수로 설정하십시오. 예를 들어, Dockerfile이 IAM_USER ARG를 사용하는 경우 IAM_USER: export IAM_USER='value' 환경 변수를 내보내십시오. CLI는 이 환경 변수를 docker build 명령으로 자동 전달합니다.
또한 DOCKERBUILDFLAGS 플래그를 명시적으로 지정할 수도 있습니다. ARGS Docker 플래그를 사용하여 DOCKERBUILDFLAGS을(를) 내보내려면 다음 명령을 입력하십시오.
export DOCKERBUILDFLAGS="--build-arg IAM_USER --build-arg API_KEY"
BOM 명령 옵션
다음 표에는 bom-generate 명령으로 BOM을 생성하는 데 사용할 수 있는 명령 옵션이 나와 있습니다.
| 명령 옵션 | 필수 또는 선택사항 | 설명 |
|---|---|---|
--path |
필수 | 스캔할 프로젝트 디렉토리 경로입니다. |
-r, --report |
필수 | BOM 보고서를 저장할 파일 이름입니다. |
-a, --asset-type |
선택사항 | 실행할(앱, 이미지, OS, 모두) 보안 검사입니다. 기본적으로 이 옵션은 all(으)로 설정됩니다. apps 옵션은 발견을 애플리케이션 패키지로 제한하는 데 사용됩니다. image 옵션은 Dockerfile에서 사용되는 기본 이미지로 발견을 제한하는 데 사용됩니다. os 옵션은 Dockerfile에서만 빌드 단계 발견을
제한하는 데 사용됩니다. 값을 구분하기 위해 쉼표를 사용하면 다중 값을 지정할 수 있습니다(예: -a os,image,apps). |
-p, --prev-report |
선택사항 | 이전 BOM 보고서를 사용하여 명령을 가속화하십시오. 예를 들어, 마지막 보고서가 생성된 이후 Dockerfile을 업데이트하지 않으면 명령은 해당 Dockerfile에서 패키지의 발견을 건너뜁니다. 동일한 시나리오가 package-lock.json 파일과 같은 다른 Manifest 파일에도 적용됩니다. |
-c, --dockerbuildcontext |
선택사항 | 지정된 경우, CRA는 빌드 단계 스캔 중에 Docker 빌드 컨텍스트로 경로 매개변수의 디렉토리를 사용합니다. |
-o, --output |
선택사항 | BOM 보고서 형식을 선택합니다. 표준 BOM 형식(standard) 또는 CycloneDX의 SBOM 형식(cyclonedx)으로 형식 출력을 생성할 수 있습니다. 기본값은 standard입니다. 공백 없이 쉼표로 구분된 각 형식을 입력하여 두 형식을 모두 저장할 수 있습니다. |
-f, --dockerbuildflags |
선택사항 | 빌드 단계 스캔을 위해 Docker 빌드 명령을 사용자 정의합니다. 이 명령행 플래그를 사용하는 대신 DOCKERBUILDFLAGS 환경 변수에 값을 지정할 수 있습니다. 기본적으로 이 명령 옵션은 ''(으)로 설정됩니다. 이 옵션을 사용하는 경우 명령에 제공되는 마지막 플래그인지 확인하십시오. |
-d, --dockerfilepattern |
선택사항 | 저장소에서 Dockerfile을 식별하기 위한 패턴입니다. |
-g, --gradle.excludeconfigurations |
선택사항 | Gradle 구성을 제외합니다(예: runtimeClasspath,testCompileClasspath). 기본적으로 이 명령 옵션은 ''(으)로 설정됩니다. |
-l, --gradleprops |
선택사항 | Gradle 종속성 검색을 위한 속성으로 Gradle 명령을 사용자 지정합니다. |
-m, --maven.excludescopes |
선택사항 | Maven 범위를 제외합니다(예: test,compile). 예: 'test, compile'. 기본적으로 이 명령 옵션은 ''(으)로 설정됩니다. |
-n, --nodejs.createpackagelock |
선택사항 | 태스크를 사용하여 node.js 프로젝트에 대한 package-lock.json 파일을 빌드합니다. |
--region |
선택사항 | 도구 체인이 있는 ibmcloud 지역입니다. |
--toolchainid |
선택사항 | 사용할 대상 도구 체인 ID입니다. |
-v, --verbose |
선택사항 | 상세 로그 메시지를 사용합니다. |
파일 무시
경로에 .cra/.fileignore 파일이 포함된 경우 .fileignore 파일에 지정된 파일은 종속성에 대해 스캔되지 않습니다. .fileignore 파일은 .gitignore 파일의 규칙을 따라야 합니다. .gitignore 파일과 마찬가지로 .fileignore 파일에는 주석, 무시할 디렉터리, 무시할 파일 및 기타 패턴이 포함될 수 있습니다.
다음 예제 .fileignore 파일은 bash 스크립트, node_modules, Dockerfile을 제외하는 방법을 보여줍니다.
# Ignore nested functional_tests directory
**/functional_tests
# Ignore bash scripts
**/*.sh
# This should allow this one file
!test/gatling_tests/loginTobx.sh
# Ignore node_modules
node_modules
# Exclude the dockerfile from scanning
Dockerfile
여러 Docker 빌드 컨텍스트 설정
단일 프로젝트 내에서 여러 도커파일로 작업하는 경우 각 도커파일에 대해 별도의 빌드 컨텍스트를 정의할 수 있습니다. 이는 Docker파일 경로를 해당 빌드 컨텍스트에 매핑하는 JSON 파일인 .cra/.dockerbuildcontext 파일을 사용하여 수행할 수 있습니다.
프로젝트 디렉터리에 .cra/.dockerbuildcontext 파일이 있는 경우 CRA Docker 빌드 명령은 이 파일에 지정된 경로를 관련 Docker파일의 빌드 컨텍스트로 사용합니다. JSON 객체의 키는 Docker파일의 상대 경로를 나타내며, 값은 각 빌드 컨텍스트의 상대 경로를 지정합니다.
다음은 여러 Docker파일에 대해 서로 다른 빌드 컨텍스트를 정의하는 .dockerbuildcontext 파일의 예입니다:
{
"Dockerfile": "./",
"path/to/different/Dockerfile": "./another/Path"
}
예
다음 코드 스니펫은 bom-generate 명령을 사용하는 방법을 보여줍니다.
ibmcloud cra bom-generate --path PATH --report REPORT [--asset-type ASSET-TYPE] [--dockerbuildcontext] [--dockerbuildflags DOCKERBUILDFLAGS] [--dockerfilepattern DOCKERFILEPATTERN] [--gradle.excludeconfigurations GRADLE.EXCLUDECONFIGURATIONS] [--maven.excludescopes MAVEN.EXCLUDESCOPES] [--nodejs.createpackagelock] [--prev-report PREV-REPORT] [--region REGION] [--toolchainid TOOLCHAINID] [--verbose]
ibmcloud cra bom --path . --report bomreport.json
취약성 스캔
vulnerability-scan 명령은 standard 형식의 BOM을 입력으로 예상하고 BOM에 나열된 애플리케이션 패키지 및 OS 패키지의 취약점을 탐지합니다. 여러 CVE(공통 취약점 및 노출) 소스에서 수집한 풍부한 위협 인텔리전스를 기반으로 표적화된 수정 권장 사항을 제공합니다. 코드 위험 분석기는 Node.js 기반 애플리케이션에 한해 취약한 패키지에 대한 자동 치료도
수행할 수 있습니다. 이 보고서는 표준 형식 또는 CycloneDX's 취약점 익스플로잇 가능성 교환(VEX) 형식으로 생성할 수도 있습니다.
ibmcloud cra vulnerability-scan
취약성 스캔 명령 옵션
다음 표에는 vulnerability-scan 명령 사용에 대한 옵션이 나열되어 있습니다.
| 명령 옵션 | 필수 또는 선택사항 | 설명 |
|---|---|---|
-b, --bom |
필수 | bom-generate 명령을 사용하여 생성된 BOM의 파일 경로입니다. 이 BOM은 standard 형식이어야 합니다. |
-a, --autofix |
선택사항 | 특정 유형의 앱 취약점을 수정합니다. 이 옵션은 Node.js, Maven 및 Gradle 앱에서만 사용할 수 있습니다. |
-f, --commentfile |
선택사항 | 마크다운 보고서가 생성되는 파일을 지정합니다. 이 명령은 autofix 에서만 사용할 수 있습니다. |
-c, --cveignore |
선택사항 | 무시할 CVE 목록이 포함된 CVE 무시 파일에 대한 파일 경로입니다. |
-e, --excludedev |
선택사항 | 명령이 개발 종속성에 대해 CVE를 보고하지 않도록 지정합니다. |
--force |
선택사항 | 주요 버전이 다른 경우에도 최상위 노드 패키지에 대한 업데이트를 강제로 적용합니다. 이 명령은 autofix 에서만 사용할 수 있습니다. |
--include-nofix |
선택사항 | 알려진 해결 방법이 없는 CVE의 보고를 포함하거나 제외할 수 있습니다. 기본적으로 이 옵션은 app(으)로 설정됩니다. app 옵션은 수정 사항이 없는 앱 패키지 CVE만 포함하는 데 사용됩니다. os 옵션은 수정 사항이 없는 OS 패키지 CVE만 포함할 때 사용합니다. all 옵션은 수정되지 않은 앱 및 OS 패키지 CVE를
모두 포함할 때 사용됩니다. none 옵션은 수정되지 않은 앱 및 OS 패키지 CVE를 모두 제외하는 데 사용됩니다. |
--path |
--autofix 활성화된 경우 필수 |
스캔할 프로젝트 디렉토리 경로입니다. 이 명령은 autofix 에서만 사용할 수 있습니다. |
--region |
선택사항 | 툴체인을 위한 ibmcloud 리전입니다. |
-r, --report |
선택사항 | 생성된 보고서에 대한 경로입니다. |
-o, --output |
선택사항 | CVE 보고서 형식을 선택합니다. 표준 CVE 형식(standard) 또는 CycloneDX의 VEX 형식(cyclonedx)으로 형식 출력을 생성할 수 있습니다. 기본값은 standard입니다. |
-s, --strict |
선택사항 | 취약성이 발견되면 명령 실패(종료 상태 2)가 발생합니다. |
--toolchainid |
선택사항 | 대상 툴체인의 ID입니다. |
취약성 무시
-c 또는 --cveignore 매개변수가 지정되면 명령은 해당 파일을 찾고 파일에 지정된 CVE를 보고하지 않습니다. 수정이 사용 가능할 때까지 또는 지정된 만기 날짜까지 무기한으로 CVE를 생략하도록 구성할 수 있습니다.
다음 예는 .cveignore 파일에 대한 JSON 스키마를 보여줍니다.
[
{
"cve": "string",
"alwaysOmit": "bool",
"untilRemediationAvailable": "bool",
"expiration": "string"
}
]
다음 특성이 .cveignore 파일의 각 항목에 대해 지원됩니다.
- cve - 생략할 취약성입니다. 이 속성의 값은 CVE ID입니다.
- alwaysOmit - 이 특성을
true(으)로 설정하면 취약성이 변경될 때까지 생략됩니다. 이 특성은 다른 특성 값보다 우선합니다. - untilremediationAvailable - 이 특성을
true(으)로 설정하면 수정 경로가 사용 가능할 때까지 취약성이 생략됩니다. 조치방안이 사용 가능해지면 취약성이 생략되지 않고 메시지가 표시됩니다. 이 특성은 만기 특성 값보다 우선합니다. - expiration - 이 특성이
true(으)로 설정되고 만기일에 도달하지 않으면 취약성이 생략됩니다. 만기 날짜에 도달하면 취약성이 생략되지 않고 메시지가 표시됩니다. RFC3339 시간 형식(yyyy-MM-ddTHH:mm:ss[+-]Z)을 사용하여 이 특성을 정의하십시오.
Code Risk Analyzer는 이러한 정의된 특성만 사용합니다. 기능에 영향을 주지 않고 특성을 추가할 수 있습니다. .cveignore에 정의된 취약성이 생략되지 않으면 이유를 설명하는 로그가 생성됩니다. .cveignore 파일에 정의된 취약성이 생략되면 개별 로깅이 표시되지 않습니다. 생략 횟수 및 생략된 패키지 이름이 포함된 취약성 ID 목록은 보고서가 완료된 후 로그됩니다.
다음 코드 스니펫은 샘플 .cveignore 파일을 표시합니다.
[
{
"cve": "CVE-2021-27290",
"alwaysOmit": true
},
{
"cve": "CVE-2020-8244",
"untilRemediationAvailable": true,
}
]
예
다음 코드 스니펫은 vulnerability-scan 명령을 사용하는 방법을 보여줍니다.
ibmcloud cra vulnerability-scan --bom BOM [--cveignore CVEIGNORE] [--report REPORT] [--excludedev] [--include-nofix app,os,all,none] [--region REGION] [--strict] [--toolchainid TOOLCHAINID] [--output OUTPUTFILE]
ibmcloud cra cve --bom ./bom-file.json --cveignore ./cveignore-example.json --report ./output-vulnerability-report.json --excludedev --include-nofix all --strict
배치
deployment-analyze 명령은 Kubernetes 배치 Manifest에 대한 구성 검사를 실행합니다.
ibmcloud cra deployment-analyze
이 명령은 Docker 컨테이너에 대한 보안 구성 태세를 설정하기 위한 규범적인 지침을 제공합니다. 코드 위험 분석기는 이러한 보안 구성을 참조 지점으로 사용하고 보안 제어를 식별하여 Kubernetes 애플리케이션의 배포 아티팩트(예: .yaml 파일)를 확인합니다. 이 명령은 각 제어 실패에 대한 위험 평가도 제공합니다.
다음 표에는 CIS Docker 1.13.0 에서 식별된 DevSecOps, 내에서 구현할 수 있는 컨트롤이 나열되어 있습니다. Kubernetes 공통 구성 점수 시스템(KCCSS) 의 오픈 소스 참조를 기반으로 더 많은 제어 기능이 추가되었습니다.
| ID | 규칙 | 위험 |
|---|---|---|
| 5.3 | 컨테이너에 CAP_SYS_ADMIN 기능이 없는지 확인합니다. |
높음 |
| 5.3 | 컨테이너에 CAP_NET_RAW 기능이 없는지 확인합니다. |
높음 |
| 5.4 | 권한이 있는 컨테이너가 사용되지 않도록 하세요. | 높음 |
| 5.5 | 민감한 호스트 시스템 디렉토리가 컨테이너에 마운트되지 않았는지 확인하세요. | 중간 |
| 5.7 | 권한 있는 포트가 컨테이너 내에 매핑되지 않았는지 확인하세요. | 낮음 |
| 5.9 | 호스트의 네트워크 네임스페이스가 공유되지 않는지 확인합니다. | 중간 |
| 5.10 | 컨테이너의 메모리 사용량이 제한되어 있는지 확인합니다. | 중간 |
| 5.11 | 컨테이너에 적절한 CPU 우선순위가 설정되어 있는지 확인합니다. | 중간 |
| 5.12 | 컨테이너의 루트 파일 시스템이 읽기 전용으로 마운트되었는지 확인합니다. | 중간 |
| 5.15 | 호스트의 프로세스 네임스페이스가 공유되지 않았는지 확인합니다. | 중간 |
| 5.16 | 호스트의 IPC 네임스페이스가 공유되지 않았는지 확인합니다. | 중간 |
| 5.31 | Docker 소켓이 컨테이너 내부에 장착되어 있지 않은지 확인합니다. | 높음 |
|
|
컨테이너가 CPU 리소스의 안전하지 않은 할당을 허용하지 않는지 확인하세요. | 중간 |
|
|
컨테이너가 권한 상승을 허용하지 않는지 확인하세요. | 중간 |
|
|
컨테이너가 /proc 의 안전하지 않은 부분에 노출되지 않도록 하십시오. |
중간 |
|
|
컨테이너가 공유 호스트 포트를 통해 노출되지 않도록 하세요. | 중간 |
배치 명령 옵션
다음 표에는 deployment-analyze 명령에 사용할 수 있는 명령 옵션이 나열되어 있습니다.
| 명령 옵션 | 필수 또는 선택사항 | 설명 |
|---|---|---|
--path |
필수 | 스캔할 프로젝트 디렉토리 경로입니다. |
-r, --report |
필수 | 보고서를 작성할 파일 이름입니다. |
-f, --fileignore |
선택사항 | .fileignore 파일의 파일 경로입니다. |
-s, --strict |
선택사항 | 배치 위험이 있는 경우 명령 실패(종료 상태 2)의 결과입니다. |
예
다음 코드 스니펫은 deployment-analyze 명령을 사용하는 방법을 보여줍니다.
ibmcloud cra deployment-analyze --path PATH --report REPORT [--fileignore FILE_IGNORE] [--strict]
ibmcloud cra depl --path ./sampleDir --report deployment-report.json --strict
NetworkPolicy 분석
평가 및 테스트 목적으로 사용 가능한 베타 기능입니다.
netpol-analyze 명령은 Kubernetes 및 Calico NetworkPolicy 매니페스트에서 구성 검사를 실행합니다.
ibmcloud cra netpol-analyze
이 명령은 NIST SP 800-53 SC-7(5)제어에 대해 Kubernetes 애플리케이션의 연결-구성 상태를 확인합니다. 모든 워크로드의 연결이 하나 이상의 NetworkPolicy 리소스에 의해 제어되고 비보안 포트가 수신 및 송신 모두에 대해 차단되는지 확인합니다.
netpol-analyze 명령은 스캔한 애플리케이션에 대한 연결 보고서를 제공하여 애플리케이션 워크로드 간에 허용된 모든 연결을 보여줄 수도 있습니다. 이 보고서를 규정 준수를 위한 증거로 사용하거나 연결 문제를 디버깅하는 데 사용할 수 있습니다. 이 명령을 사용하여 스캔한 네트워크 정책에 대한 보푸라기 결과를 제공한 다음 이 결과를 사용하여 네트워크 정책의 효율성과 가독성을 개선할 수도 있습니다. 경우에
따라 보푸라기 결과는 네트워크 정책 정의의 오류를 가리킬 수도 있습니다.
NetworkPolicy 분석 명령 옵션
다음 표에는 netpol-analyze 명령에 사용할 수 있는 명령 옵션이 나열되어 있습니다.
| 명령 옵션 | 필수 또는 선택사항 | 설명 |
|---|---|---|
--path |
필수 | 스캔할 프로젝트 디렉토리 경로입니다. |
-r, --report |
필수 | 규정 준수 보고서를 생성할 파일 이름입니다. |
-c, --connectivity |
선택사항 | 연결 보고서를 생성할 파일 이름입니다. |
-l, --lint |
선택사항 | 보푸라기 보고서를 만들 파일 이름입니다. |
-s, --strict |
선택사항 | 연결 위험이 발견되면 명령 실패(종료 상태 2)가 발생합니다. |
예
다음 샘플 코드 스니펫은 netpol-analyze 명령을 사용하는 방법을 보여줍니다:
ibmcloud cra netpol-analyze --path PATH --report REPORT [--connectivity CONNFILE] [--lint LINTFILE] [--strict]
ibmcloud cra np --path ./sampleDir --report netpol-report.json --strict
네트워크 구성 분석기 이미지
netpol-analyze 명령은 IBM 의 네트워크 구성 분석기(NCA) 의 일부로 실행됩니다. 이 명령은 NCA를 Docker 이미지로 실행하므로 컴퓨터에 다음을 설치해야 합니다 Docker 를 컴퓨터에 설치해야 합니다.
네트워크 정책 분석기용 이미지 URL 는 icr.io/continuous-delivery/cra/nca.
분석기 이미지가 로컬 레지스트리에 없는 경우 netpol-analyze 명령은 글로벌 IBM Cloud® Container Registry 에서 최신 분석기 이미지(취약점에 대한 수정 사항 포함)를 가져옵니다.
Tekton 파이프라인에서 Code Risk Analyzer 사용
텍톤 파이프라인에서 task-cra 작업을 사용할 수 있습니다. 풀 리퀘스트, 수동 트리거를 생성하거나 커밋을 발행할 때 Tekton 파이프라인 정의를 사용하세요. 또한 고유한 Tekton 태스크를 작성하고 해당 태스크에서 Code Risk Analyzer를 실행할 수 있습니다.
DevSecOps에서 Code Risk Analyzer 사용
DevSecOps에서 Code Risk Analyzer를 사용할 수 있습니다. 다음 표에서는 지원되는 DevSecOps용 Code Risk Analyzer 매개변수를 나열하고 설명합니다.
bom-generate 명령을 실행하기 위해 파이프라인 이미지에 필요한 종속 유틸리티 명령에 대한 자세한 정보는 BOM 요구사항을 참조하십시오. 명령이 누락된 경우 cra-custom-script-path 매개변수를 사용하여 스크립트를 참조하면 해당 명령을 설치할 수 있습니다.
| 이름 | 유형 | 설명 | 필수 또는 선택사항 |
|---|---|---|---|
| artifactory-dockerconfigjson | SECRET | Artifactory의 인증 정보를 저장하는 base64로 인코딩된 Docker config.json 파일입니다. |
선택사항 |
| baseimage-auth-user | 텍스트 | Code Risk Analyzer 스캔에 필요한 애플리케이션 Dockerfile의 기본 이미지에 대한 인증 정보입니다. | 선택사항 |
| baseimage-auth-email | 텍스트 | Code Risk Analyzer 스캔에 필요한 애플리케이션 Dockerfile의 기본 이미지에 대한 인증 정보입니다. | 선택사항 |
| baseimage-auth-host | 텍스트 | Code Risk Analyzer 스캔에 필요한 애플리케이션 Dockerfile의 기본 이미지에 대한 인증 정보입니다. | 선택사항 |
| baseimage-auth-password | SECRET | Code Risk Analyzer 스캔에 필요한 애플리케이션 Dockerfile의 기본 이미지에 대한 인증 정보입니다. | 선택사항 |
| cra-cveignore-path | 텍스트 | 애플리케이션 저장소의 루트에 상대적인 cveignore 파일에 대한 경로입니다. 기본 파일 경로는 .cra/.cveignore입니다. |
선택사항 |
| cra-custom-script-path | 텍스트 | Code Risk Analyzer를 스캔하기 전에 실행되는 사용자 정의 스크립트에 대한 경로입니다. 이 스크립트는 Code Risk Analyzer BOM 도구의 컨텍스트에서 ENV 변수를 설정하는 옵션을 제공합니다. |
선택사항 |
| cra-docker-buildflags | 텍스트 | 빌드 단계 스캔을 위한 사용자 정의 Docker 빌드 명령입니다. 이 매개변수는 기본적으로 비어 있습니다. | 선택사항 |
| cra-docker-build-context | 텍스트 | 지정된 경우, Code Risk Analyzer는 Docker 빌드 컨텍스트로 경로 매개변수의 디렉토리를 사용합니다. | 선택사항 |
| cra-exclude-devdependencies | 텍스트 | 스캔에서 개발 종속성을 제외할지 여부를 지정합니다(true 또는 false). 기본값은 false입니다. |
선택사항 |
| cra-gradle-exclude-configs | 텍스트 | 스캔에서 종속성을 제외할 Gradle 구성을 지정합니다. 예를 들어, runtimeClasspath,testCompileClasspath입니다. 이 매개변수는 기본적으로 비어 있습니다. |
선택사항 |
| cra-maven-exclude-scopes | 텍스트 | 스캔 시 종속성을 제외할 Maven 범위를 지정합니다. 예를 들어, test,compile입니다. 이 매개변수는 기본적으로 비어 있습니다. |
선택사항 |
| cra-nodejs-create-package-lock | 텍스트 | Code Risk Analyzer 발견을 사용하여 node.js repos에 대한 package-lock.json 파일을 빌드할 수 있습니다. 이 매개변수는 기본적으로 false(으)로 설정됩니다. |
선택사항 |
| ibmcloud-api-key | SECRET | ibmcloud CLI 도구와 상호작용하는 IBM Cloud® API 키입니다. |
필수 |
| pipeline-dockerconfigjson | SECRET | 개인용 레지스트리에서 이미지를 가져오는 base64로 인코딩된 Docker config.json 파일입니다. |
선택사항 |
| onepipeline-dockerconfigjson | SECRET | 더 이상 사용되지 않습니다. 개인용 레지스트리에서 이미지를 가져오는 base64로 인코딩된 Docker config.json 파일입니다. |
선택사항 |
| pipeline-debug | 선택 | 파이프라인 디버그 모드 스위치입니다. | 선택사항 |
| 옵트인-CRA-자동 수정 | 텍스트 | 코드 위험 분석기가 cra auto remediation 명령(true 또는 false)을 실행할 수 있도록 합니다. 기본값은 false입니다. 이 명령은 지속적 규정 준수 파이프라인에서만 지원됩니다. |
선택사항 |
| 옵트인-CRA-자동 수정 지원-리포지토리 | 텍스트 | cra auto remediation 명령에 사용할 쉼표로 구분된 리포지토리 이름 목록을 지정합니다. 이 매개 변수는 opt-in-cra-auto-remediation 가 true 로 설정된 경우에만 고려되며 지속적 규정 준수 파이프라인에서만 지원됩니다. |
선택사항 |
| 옵트인-크라-자동-수정-포스 | 텍스트 | 주요 버전이 현재 취약한 패키지 버전(true 또는 false)과 다른 경우에도 cra auto remediation 명령으로 패키지를 강제로 업데이트합니다. 이 매개 변수는 opt-in-cra-auto-remediation 가 true 로 설정된 경우에만 고려되며 지속적 규정 준수 파이프라인에서만 지원됩니다. |
선택사항 |
DevSecOps용 사용자 정의 스크립트 예
Dockerfile에 ARGS가 필요한 경우 명령을 실행하기 전에 cra-custom-script-path 매개변수를 사용하여 개별 ARG를 환경 변수로 설정할 수 있습니다. 사용자 정의 스크립트 경로는 사용자 프로젝트에 상주하는 스크립트에 대한 경로입니다. 예를 들어, Dockerfile이 IAM_USER ARG을(를) 사용하는 경우 IAM_USER: export IAM_USER='value' 스크립트 내에서 환경 변수를 내보내십시오. Dockerfile에 필요한 ARG가 도구 체인 내에서 환경 특성으로 설정된 경우 get_env을(를) 사용하여 값을 가져올 수 있습니다. 이 경우 IAM_USER: export IAM_USER=$(get_env iam_user_environment_property_name) 스크립트 내에서 환경 변수를 내보낼 수 있습니다. run-cra 태스크는 이러한 환경 변수를 자동으로 선택하여 Docker 빌드 명령에 전달합니다.
다음 예는 cra-custom-script을(를) 사용하여 ENV 변수를 내보내는 방법을 보여줍니다.
#!/usr/bin/env bash
if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
trap env EXIT
env | sort
set -x
fi
export IAM_USER=$(get_env iam_user_environment_property_name)
프로젝트를 기반으로 DevSecOps 기본 이미지 도구가 이전 버전인 시나리오에 cra-custom-script-path 매개변수를 사용할 수도 있습니다. 예를 들어, 후속 pip 버전이 필요한 Python 패키지를 발견하기 위해 pip/pip3과(와) 같은 명령을 업데이트할 수 있습니다.
다음 예는 cra-custom-script을(를) 사용하여 pip 버전을 업데이트하는 방법을 보여줍니다.
#!/usr/bin/env bash
if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
trap env EXIT
env | sort
set -x
fi
python3 -m pip install --upgrade pip
Dockerfile이 사설 Docker 레지스트리의 이미지를 사용하는 경우, Code Risk Analyzer를 실행하기 전에 cra-custom-script-path 매개변수를 사용하여 사설 Docker 레지스트리를 인증하고 Code Risk Analyzer가 이미지를 스캔하도록 허용할 수 있습니다.
다음 예는 cra-custom-script을(를) 사용하여 ibmcloud 컨테이너 레지스트리를 인증하는 방법을 보여줍니다.
#!/usr/bin/env bash
if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
trap env EXIT
env | sort
set -x
fi
ibmcloud cr login
DevSecOps에서 Code Risk Analyzer 디버깅
디버깅에 도움이 되기 위해 Code Risk Analyzer를 로컬 머신에서 명령행 인터페이스(CLI)로 로컬에서 실행할 수 있습니다. ibmcloud cra bom-generate 명령을 실행하여 BOM을 생성하는 방법에 대한 자세한 내용은 BOM(자재 명세서)을 참조하세요. BOM을 생성한 후 ibmcloud cra cve 명령을 사용하여 모든 취약점을 나열합니다. ibmcloud cra cve 명령 실행에 대한 자세한 정보는 취약성 스캔을 참조하십시오.
run-cra 태스크에 오류가 없는지 확인하십시오. 태스크에 오류가 있는 경우 파이프라인이 현재 버전의 DevSecOps를 사용하는지 확인하십시오. DevSecOps 버전을 확인하여 문제가 해결되지 않으면 다음 예에서 몇 가지 일반적인 오류와 제안된 솔루션을 제공합니다.
FAILED
Error executing docker pull cmd: [docker pull us.icr.io/opentoolchain/ibmnode:14ubisecure]
개인용 레지스트리에 대한 액세스 권한이 있는지 확인할 수 있습니다. 액세스 권한이 없는 경우, cra-custom-script-path 매개변수를 사용하여 Code Risk Analyzer가 개인용 레지스트리를 인증하기 전에 실행되는 사용자 정의 스크립트에 대한 경로를 지정할 수 있습니다.
FAILED
Error executing docker build cmd for stage-0: exit status 1
Dockerfile에 ARGS가 필요한 경우 빌드 단계의 docker build 명령이 누락된 ARGS로 인해 빌드에 실패합니다. cra-custom-script-path은(는) ARGS를 환경 변수로 설정하는 데 필요합니다. 사용자 정의 스크립트 설정에 대한 자세한 정보는 DevSecOps용 사용자 정의 스크립트 예를
참조하십시오.
FAILED
Error executing docker build cmd for stage-0: exit status 1
...
COPY file-to-copy.js file-to-copy.js:
------
failed to compute cache key: "/file-to-copy.js" not found: not found
기본적으로 Code Risk Analyzer bom-generate 명령은 Dockerfile 자체의 위치 컨텍스트에서 Dockerfile을 빌드합니다. 루트 프로젝트 디렉토리의 컨텍스트에서 Dockerfile을 빌드하려면 cra-docker-build-context 매개변수를 사용하여 Code Risk Analyzer가 이 컨텍스트에서 Dockerfile을 빌드하도록 허용하십시오.
저장된 Code Risk Analyzer 데이터 제거
Code Risk Analyzer 플러그인은 데이터베이스에 클라이언트 데이터를 저장하지 않습니다. 그러나 Code Risk Analyzer Tekton 태스크의 이전 버전은 취약성 스캔의 결과를 데이터베이스에 안전하게 저장했습니다.
코드 위험 분석기에 저장되어 있을 수 있는 클라이언트 데이터의 삭제를 요청하려면 IBM 지원팀에 문의하세요.
FAQ
Code Risk Analyzer CLI 사용에 대한 FAQ(자주 묻는 질문)의 답변을 확인하십시오.
CLI가 실패한 이유를 판별할 수 있는 방법은 무엇입니까?
Code Risk Analyzer CLI를 호출하기 전에 IBMCLOUD_TRACE 환경 변수를 true로 설정하여 디버그 로그를 켜십시오.
export IBMCLOUD_TRACE=true
실패의 정확한 이유를 판별하기 위해 로그에 표시되는 응답 및 API 호출을 확인하십시오.
개인용 레지스트리에서 기본 이미지를 가져오는 데 실패한 BOM 명령을 디버그하는 방법은 무엇입니까?
ibmcloud cr login 명령 또는 docker login 명령을 사용하여 기본 이미지가 있는 레지스트리로 인증되었는지 확인하십시오.
Dockerfile을 분석하는 데 실패한 BOM 명령을 디버그하는 방법은 무엇입니까?
docker build명령을 실행하고 이 명령이 전달되는지 확인하여 Dockerfile에 문제가 없는지 확인하십시오.- Dockerfile에서 ARG가 전달되어야 하는 경우 ARG가 환경 변수로 설정되어 있는지 확인하십시오.
DOCKERBUILDFLAG환경 변수를 사용할 수도 있습니다. - 기본 이미지를 포함하는 레지스트리로 인증하십시오.
예상치 못한 오탐 결과가 표시되고 있습니다. 어떻게 해야 합니까?
DevSecOps CD(지속적 배포) 파이프라인을 실행하여 증거 보관함에서 업데이트된 SBOM을 생성합니다. 이는 DevSecOps CC(지속적 규정 준수) 파이프라인에서 생성된 이전 SBOM의 존재로 인해 발생하는 오탐의 잠재적 원인을 해결할 수 있습니다.
보고서 또는 이슈의 심각도가 관련 취약점 링크의 심각도와 다른 이유는 무엇인가요?
최근 취약점 정보의 출처가 변경되었으므로 특정 취약점과 관련된 심각도가 변경된 것을 볼 수 있습니다. 코드 위험 분석기는 모든 취약점의 원인을 계산하여 최적의 심각도를 결정합니다.