취약점 조사

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

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

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

필수 권한

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

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

  • 소유하지 않은 프로젝트를 분석하는 경우 IAM 액세스 관리 안내에 따라 권한을 부여하세요.

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

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

프로젝트 ID와 이미지의 전체 리소스 URL(https:// 포함)을 사용하여 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

각 항목의 의미는 다음과 같습니다.

  • PROJECT_ID는 Google Cloud 프로젝트 ID입니다.
  • RESOURCE_URL은 이미지의 전체 URL이며 형식은 https://HOST_NAME/PROJECT_ID/IMAGE_ID@sha256:HASH입니다. https://는 URL의 시작 부분에 포함되어야 합니다. 이미지의 URL을 찾아야 하는 경우 프로젝트의 모든 메타데이터 보기의 호출을 사용하면 됩니다.

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

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

대부분의 경우 Artifact Analysis는 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입니다.

취약점 ID가 있으면 다음 명령어를 실행하여 프로젝트에서 발생 ID가 VULN_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입니다.
  • VULN_ID는 취약점의 ID입니다(CVE ID 또는 GHSA ID 번호)(예: CVE-2021-32798 또는 GHSA-884p-74jh-xrg2).

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

curl globbing을 사용하여 프로젝트 전반에서 쿼리를 실행합니다.

예를 들어 다음 스니펫은 두 프로젝트 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와 연결된 모든 발생을 요청합니다.

  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입니다.

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

프로젝트에서 특정 패키지 확인

Artifact Analysis는 스캔된 아티팩트의 패키지 종속 항목을 만듭니다. 특정 패키지가 종속 항목인 모든 아티팩트를 찾으려면 패키지 이름으로 필터링하면 됩니다.

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

각 항목의 의미는 다음과 같습니다.

  • PROJECT_ID는 Google Cloud 프로젝트 ID입니다.
  • PACKAGE_NAME는 패키지의 이름입니다.

이미지의 모든 패키지 메타데이터 보기

이미지의 모든 다양한 유형의 패키지 메타데이터를 보려면 프로젝트 ID와 전체 이미지 리소스 URL을 사용하여 kind=PACKAGE_NAME 필터를 사용하세요.

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

각 항목의 의미는 다음과 같습니다.

  • PROJECT_ID는 Google Cloud 프로젝트 ID입니다.
  • RESOURCE_URLhttps://HOST_NAME/PROJECT_ID/IMAGE_ID@sha256:HASH 형식의 이미지 전체 URL입니다. https://는 URL의 시작 부분에 포함되어야 합니다. 이미지의 URL을 찾아야 하는 경우 프로젝트의 모든 메타데이터 보기의 호출을 사용하면 됩니다.

출력에는 종속 항목 이름, 버전, 라이선스 정보가 포함된 종속 항목 목록이 포함됩니다.

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

발생에 대한 자세한 내용을 쿼리할 수 있습니다. 예를 들어 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 점수, 수정 정보(있는 경우)와 같은 정보가 포함됩니다.

다음 단계