취약점 조사

새로운 취약점이 발견되면 신속하게 조치를 취하는 것이 중요합니다. 이 페이지에서는 사전 구성된 필수 API 호출 및 필터 목록을 제공합니다. 이 API 호출을 사용하여 Artifact Analysis에서 스캔 결과를 가져오고 아티팩트 상태에 관한 정보를 수집합니다.

이 콘텐츠는 자동 스캔 메타데이터와 함께 사용하도록 설계되었습니다. 이미지가 30일 연속 분석 기간을 초과한 경우 Artifact Registry에 다시 푸시하여 새 스캔을 실행할 수 있습니다.

이 페이지의 모든 예시는 API에 직접 액세스하지만 Container Analysis 클라이언트 라이브러리 또는 gcloud 명령어를 사용할 수도 있습니다.

필수 권한

이 모든 예에서는 ListOccurrences API 메서드를 사용합니다. 이 메서드를 호출하려면 분석 중인 프로젝트에 대한 컨테이너 분석 어커런스 뷰어 (roles/containeranalysis.occurrences.viewer) 역할이 필요합니다.

  • 소유한 프로젝트를 분석하는 경우 이미 필요한 권한이 있습니다.

  • 소유하지 않은 프로젝트를 분석하는 경우 IAM 액세스 관리 안내를 사용하여 권한을 부여합니다.

아티팩트 분석을 사용하는 제공업체 및 고객의 액세스 유형에 관한 자세한 내용은 권한을 참고하세요.

이미지의 모든 취약점 메타데이터 보기

프로젝트 ID와 https://을 포함한 이미지의 전체 리소스 URL과 함께 필터 KIND="VULNERABILITY"를 사용합니다.

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    --data-urlencode "filter=(kind=\"VULNERABILITY\" AND resourceUrl=\"RESOURCE_URL\")" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

다음을 바꿉니다.

출력에는 심각도, 완화 옵션(있는 경우), 취약점이 포함된 패키지의 이름과 같은 세부정보가 포함된 취약점 목록이 포함됩니다.

프로젝트에서 특정 취약점 확인

대부분의 경우 아티팩트 분석은 CVE ID를 취약점 식별자로 사용합니다. 하지만 GitHub Advisory Database에 등록된 일부 취약점에는 연결된 CVE ID가 없습니다. 이 경우 아티팩트 분석은 GHSA ID를 대신 사용합니다.

취약점 ID는 noteName 필드의 일부로 포함됩니다. CVE ID의 경우 CVE 접두사로 시작하고 GHSA ID의 경우 GHSA 접두사로 시작합니다. 예를 들어 다음 출력은 이미지의 모든 취약점을 확인하는 명령어를 실행한 결과입니다.

vulnerabilities:
  HIGH:
  - name: projects/my-project/occurrences/1234fh2c-699a-462f-b920-93a80f56f544
    resourceUri: https://my_region-docker.pkg.dev/my-project/my-repo/my-image@sha256:8a1a79b587797c5164ec95977cf7aaaa828694a615947bdaed6a327d5b6a17bb
    noteName: projects/goog-vulnz/notes/CVE-2021-32798
    kind: VULNERABILITY
    ...
  - name: projects/my-project/occurrences/OCCURRENCE_ID
    resourceUri: https://my_region-docker.pkg.dev/my-project/my-repo/my-image@sha256:8a1a79b587797c5164ec95977cf7aaaa828694a615947bdaed6a327d5b6a17bb
    noteName: projects/goog-vulnz/notes/GHSA-884p-74jh-xrg2
    kind: VULNERABILITY
    ...

첫 번째 취약점의 ID는 CVE-2021-32798이고 두 번째 취약점의 ID는 GHSA-884p-74jh-xrg2입니다.

  1. 취약점의 식별자를 가져옵니다.

  2. 다음 필터 표현식에서 CVE ID 또는 GHSA ID를 사용하여 영향을 받는 이미지 목록을 가져옵니다.

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    --data-urlencode "filter=(noteProjectId=\"goog-vulnz\" AND noteId=\"VULN_ID\")" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

다음을 바꿉니다.

  • PROJECT_ID는 Google Cloud 프로젝트 ID입니다. 프로젝트 목록을 보려면 gcloud projects list를 사용하세요.
  • VULN_ID는 취약점의 ID입니다. CVE ID 또는 GHSA ID 번호(예: CVE-2021-32798 또는 GHSA-884p-74jh-xrg2)

예를 들어 다음 호출은 프로젝트에서 CVE-2023-23915가 발생하는 이미지의 검사 결과를 검색하는 방법을 보여줍니다.

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    --data-urlencode "filter=(noteProjectId=\"goog-vulnz\" AND noteId=\"CVE-2023-23915\")" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

다음을 바꿉니다.

  • PROJECT_ID는 Google Cloud 프로젝트 ID입니다. 프로젝트 목록을 보려면 gcloud projects list를 사용하세요.

여러 프로젝트에서 취약점 검색

curl 글로빙을 사용하여 프로젝트 전반에서 쿼리합니다.

예를 들어 다음 스니펫은 두 개의 프로젝트 ID를 포함하도록 변수를 설정한 다음 각 프로젝트에 대해 API 호출을 전송하여 발생 횟수를 검색합니다.

  PROJECT_IDS="PROJECT_ID_1,PROJECT_ID_2"

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://containeranalysis.googleapis.com/v1/projects/{$PROJECT_IDS}/occurrences"

다음을 바꿉니다.

  • PROJECT_ID_1는 검사하려는 첫 번째 프로젝트의 Google Cloud 프로젝트 ID입니다.
  • PROJECT_ID_2는 검사하려는 두 번째 프로젝트의 Google Cloud 프로젝트 ID입니다.

프로젝트 ID를 찾으려면 gcloud projects list를 사용하여 프로젝트 목록을 볼 수 있습니다.

여러 프로젝트에서 단일 API 호출은 지원되지 않습니다.

프로젝트의 모든 메타데이터를 대략적으로 파악합니다.

프로젝트 ID와 연결된 모든 발생을 요청합니다.

  curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

다음을 바꿉니다.

  • PROJECT_ID는 Google Cloud 프로젝트 ID입니다.

출력에는 취약점 정보와 프로젝트와 연결된 기타 지원되는 메타데이터 유형이 포함됩니다. 예를 들어 프로젝트에 빌드 세부정보 또는 증명이 있을 수 있습니다.

특정 어커런스에 대해 사용 가능한 모든 세부정보 쿼리

개별 발생에 관한 자세한 내용을 확인하려면 다음 요청을 사용하세요.

예를 들어 Pub/Sub를 사용하여 취약점 발생에 관한 알림을 받는 경우 Pub/Sub는 변경된 발생 횟수와 시점을 식별하는 데 도움이 되는 기본 세부정보를 전송합니다. 페이로드에는 어커런스 ID가 포함됩니다. 발생 ID를 사용하여 세부정보를 쿼리하여 문제를 분류하고 조치를 취할 수 있습니다.

  curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences/OCCURRENCE_ID

다음을 바꿉니다.

  • PROJECT_ID는 Google Cloud 프로젝트 ID입니다.
  • OCCURRENCE_ID는 이전 예의 발생 횟수 목록의 숫자 값입니다. 또는 Pub/Sub에서 메시지를 수신하는 경우 메시지의 URL 끝에 있는 숫자 값을 사용합니다.

출력에는 패키지 유형, 취약점 심각도, CVSS 점수, 수정사항 정보(있는 경우)와 같은 정보가 포함됩니다.

다음 단계