본문으로 건너뛰기

컴포넌트 인벤토리

프로젝트의 Components 탭은 "이 프로젝트에 무엇이 들어 있는가"에 답합니다. 사이드바의 컴포넌트 항목은 반대 방향에 답합니다. 이 패키지가 조직 어디에 있고, 고치려면 무엇을 건드려야 하는가.

새로운 CVE가 알려지는 순간 바로 필요한 질문입니다. 이 화면이 없으면 프로젝트를 하나씩 열어 확인해야 합니다.

목록 읽기

한 행은 패키지 하나입니다. 버전별도 아니고 프로젝트별도 아닙니다. 아홉 개 프로젝트에서 세 가지 버전으로 쓰이는 라이브러리는 한 행이며, 그 행이 두 종류의 분포를 함께 보여 줍니다.

의미
패키지이름과 전체 purl.
종류패키지가 속한 생태계(npm, pypi, maven 등).
프로젝트현재 사용 중인 프로젝트 수. 이 화면이 존재하는 이유가 되는 숫자입니다.
사용 중 버전사용 중인 서로 다른 버전을 최대 다섯 개까지 보여 줍니다. 그보다 많으면 몇 개가 더 있는지 함께 표시하며, 왼쪽의 개수는 항상 실제 전체 수입니다.
심각도사용 중인 버전 가운데 가장 높은 CVE 심각도.
취약점사용 중인 모든 버전에 걸친 서로 다른 CVE 수. 같은 CVE가 두 버전에 영향을 주더라도 하나로 셉니다.
라이선스관측된 가장 제한적인 라이선스 분류. 사용 중인 버전 중 하나라도 해당하면 지원 종료·구버전 배지가 함께 붙습니다.

"사용 중"의 기준

패키지가 프로젝트의 최근 성공한 스캔에 포함되어 있으면 사용 중입니다.

여기서 두 가지가 따라옵니다.

  • 스캔이 실패해도 인벤토리가 비지 않습니다. 가장 최근 스캔 시도가 실패했더라도, 그 프로젝트는 마지막으로 성공한 스캔의 패키지를 그대로 반영합니다. 프로젝트 Overview와 빌드 게이트가 따르는 기준과 같습니다.
  • 의존성을 제거하면 여기서도 사라집니다. 이후 성공한 스캔이 그 패키지를 더 이상 선언하지 않으면 목록에서 빠집니다. 인벤토리는 지금까지 스캔한 모든 것이 아니라 현재 포트폴리오를 보여 줍니다.

보관된 프로젝트는 제외되며, 소속 팀이 접근할 수 있는 프로젝트만 보입니다.

패키지 찾기

검색창은 패키지 이름 또는 purl을 찾으므로 좌표를 그대로 붙여 넣어도 됩니다. 종류 필터로 생태계를 좁힐 수 있고, 필터 추가를 누르면 위험 축(심각도, 라이선스 분류)과 수명주기 조건(지원 종료만, 구버전만)이 나타납니다. 필요할 때만 꺼내 쓰는 구성입니다.

모든 필터는 URL에 반영되므로 걸러진 화면을 새로 고침하거나 북마크하거나 공유해도 그대로 유지됩니다.

이 화면은 프로젝트별 최근 성공한 스캔만 읽으므로, 몇 릴리스 전에 걷어낸 패키지는 여기서 찾을 수 없습니다. 검색 화면도 같은 최근 스캔 범위를 읽으므로 거기서도 찾을 수 없습니다. 한때 있었다는 것을 확인하거나 언제 걷어냈는지 보려면 해당 프로젝트를 열어 스캔 이력을 확인하세요.

어느 프로젝트가 쓰는지 보기

행을 클릭하면 사용 중인 프로젝트 패널이 열립니다. 프로젝트와 버전 조합마다 한 줄이며 직접인지 전이인지 표시됩니다. 각 항목은 해당 프로젝트의 Components 탭으로 이미 걸러진 상태로 연결되므로, "어딘가 쓰고 있다"에서 "이 매니페스트 줄이다"까지 두 번의 클릭이면 됩니다.

CVE가 어디까지 영향을 주는지 보기

같은 질문을 취약점 방향에서 묻는 답은 취약점 상세 화면에 있습니다. findings 하나를 열었을 때 그 CVE가 볼 수 있는 다른 프로젝트에도 영향을 준다면 함께 영향받는 프로젝트 구역이 각 프로젝트의 findings 링크와 함께 표시됩니다. 지금 보고 있는 프로젝트에만 해당하면 이 구역은 나타나지 않습니다. 보여 줄 내용이 없기 때문입니다.

동작 확인

  1. 사이드바의 컴포넌트를 누르면 /components가 열리고 요약 줄에 패키지 개수가 표시됩니다.
  2. GET /v1/inventory/componentsitems, total, limit, offset을 담아 200으로 응답합니다.
  3. 존재하지 않는 컴포넌트 id, 또는 다른 팀만 사용하는 컴포넌트 id를 요청하면 403이 아니라 404가 돌아옵니다. 두 경우를 구분할 수 없게 만든 것은 의도된 설계로, id를 넣어 보는 것만으로는 아무것도 알 수 없게 하기 위해서입니다.

함께 보기