메인 콘텐츠로 건너뛰기
이 문서는 vantage-packager 이미지 게시 파이프라인에서 생성된 암호화 서명 및 어테스테이션을 검증하는 방법을 설명합니다.

개요

vantage-packager 파이프라인은 게시된 각 이미지마다 다음과 같은 보안 관련 아티팩트를 생성합니다.
  • 컨테이너 이미지 서명(Container Image Signature): Cosign을 사용한 암호화 서명
  • SPDX SBOM 보증(Attestation): SPDX 2.3 형식의 소프트웨어 자재 명세서(SBOM)
  • 취약점 스캔 보증(Vulnerability Scan Attestation): SARIF 형식의 보안 스캔 결과
모든 아티팩트는 동일한 개인 키로 서명되며, 해당 공개 키를 사용해 검증할 수 있습니다.

사전 준비 사항

다음 도구들이 설치되어 있어야 합니다:
  • cosign - 서명 및 어테스테이션 검증용
  • jq - JSON 파싱 및 분석용
  • curl - 아티팩트 다운로드용 (선택 사항)

서명 검증

기본 서명 검증

공개 키를 사용해 이미지 서명을 검증합니다:
# 서명 확인 (프라이빗 레지스트리의 경우 투명성 로그 건너뛰기)
cosign verify --key cosign.key.pub --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1

TLS 검증이 비활성화된 경우

자체 서명 인증서를 사용하는 레지스트리의 경우:
cosign verify --key cosign.key.pub --insecure-ignore-tlog --allow-insecure-registry \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
예상 출력 결과:
[{
  "critical": {
    "identity": {
      "docker-reference": "abyvtgonprm27.azurecr.io/vantage-installer"
    },
    "image": {
      "docker-manifest-digest": "sha256:a4190ad9d5289d7ad2d02d05749c10713a7aac217e8010b5e4ef15161b181c94"
    },
    "type": "cosign container image signature"
  }
}]

Attestation 검증

SPDX SBOM 보증

SPDX Software Bill of Materials(SBOM) 보증을 검증합니다:
# SPDX 증명 확인
cosign verify-attestation --key cosign.key.pub --type spdx --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1

취약점 스캔 증명서

취약점 스캔 증명서를 검증합니다:
# 취약점 스캔 증명 확인
cosign verify-attestation --key cosign.key.pub --type vuln --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1

인증 데이터 가져오기

SPDX SBOM 다운로드

Attestation에서 SPDX SBOM을 추출합니다:
# SPDX SBOM 다운로드 및 추출
cosign download attestation --predicate-type spdx \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1 | \
  jq -r '.payload' | base64 -d | jq -r '.predicate' > sbom.json

취약점 스캔 다운로드

취약점 스캔 결과를 추출합니다:
# 취약점 스캔 다운로드 및 추출
cosign download attestation --predicate-type vuln \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1 | \
  jq -r '.payload' | base64 -d | jq -r '.predicate' > vuln-scan.sarif

SPDX SBOM 데이터 분석

기본 SBOM 정보

# SBOM 메타데이터 보기
jq '{
  name: .name,
  spdxVersion: .spdxVersion,
  creationInfo: .creationInfo,
  packageCount: (.packages | length)
}' sbom.json

모든 패키지 목록 보기

# 버전과 함께 모든 패키지 나열
jq -r '.packages[] | "\(.name) \(.versionInfo // "unknown")"' sbom.json | sort

알려진 취약점이 있는 패키지 검색

# CPE 식별자가 있는 패키지 나열(취약점 참조)
jq -r '.packages[] | select(.externalRefs[]?.referenceType == "cpe23Type") |
  "\(.name) \(.versionInfo // "unknown") - \(.externalRefs[0].referenceLocator)"' sbom.json

라이선스 정보

# 선언된 라이선스가 있는 패키지 표시
jq -r '.packages[] | select(.licenseDeclared != "NOASSERTION") |
  "\(.name): \(.licenseDeclared)"' sbom.json

취약점 스캔 데이터 분석

기본 스캔 정보

# 스캔 메타데이터 보기
jq '{
  version: .version,
  tool: .runs[0].tool.driver.name,
  toolVersion: .runs[0].tool.driver.version,
  resultCount: (.runs[0].results | length)
}' vuln-scan.sarif

취약점 목록

# 발견된 모든 취약점 목록 출력
jq -r '.runs[0].results[] |
  "\(.ruleId) - \(.level // "unknown") - \(.message.text)"' vuln-scan.sarif

심각도가 높은 취약점

# 높은 심각도 취약점만 표시
jq -r '.runs[0].results[] | select(.level == "error") |
  "\(.ruleId): \(.message.text)"' vuln-scan.sarif

SBOM 시각화 도구

CLI 도구

CycloneDX SBOM Utility

고급 분석을 위해 CycloneDX SBOM 유틸리티를 설치하여 사용합니다.
# sbom-utility 설치(사용 가능한 경우)
go install github.com/CycloneDX/sbom-utility@latest

# SPDX SBOM 유효성 검사
sbom-utility validate --input-file sbom.json

# 컴포넌트 보고서 생성
sbom-utility query --input-file sbom.json --select "name,version" --from "packages"

jq를 사용한 맞춤형 분석

# 종속성 트리 뷰 생성
jq -r '.packages[] |
  select(.name != null) |
  "\(.name)@\(.versionInfo // "unknown") (\(.supplier // "unknown"))"' sbom.json |
  sort | uniq

웹 기반 시각화

SBOM.sh 온라인 뷰어

  1. https://sbom.sh/ 사이트에 접속합니다.
  2. sbom.json 파일을 업로드합니다.
  3. 인터랙티브 컴포넌트와 종속성 시각화 기능을 살펴봅니다.

아티팩트 참조 찾기

서명 아티팩트 검색

# 서명 아티팩트 참조 찾기
cosign triangulate --type signature \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1

Attestation 아티팩트 찾기

# 증명 아티팩트 참조 찾기
cosign triangulate --type attestation \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1