Cloud Storage를 사용하여 메타데이터에 액세스

Assured OSS는 사용 가능한 모든 패키지에 대한 보안 메타데이터를 제공합니다. 패키지의 각 버전에는 자체 메타데이터가 있습니다. 이 페이지에서는 메타데이터의 일부로 제공되는 정보와 이 메타데이터에 액세스하는 방법을 설명합니다.

다음 옵션 중 하나를 사용하여 보안 메타데이터에 액세스할 수 있습니다.

  • Artifact Analysis API
  • Cloud Storage

이 페이지는 무료 등급에만 적용됩니다.

보안 메타데이터 파일

각 Assured OSS 패키지 버전의 보안 메타데이터는 Cloud Storage 버킷의 다음 네 파일에 분산되어 있습니다.

  • buildinfo.zip: 이 파일에는 패키지의 빌드 정보에 관한 메타데이터가 포함됩니다. 이 메타데이터는 패키지 재빌드, 인증서 순환, 새 필드 추가와 같은 매우 드문 시나리오에서 변경됩니다.
  • vexinfo.zip: 이 파일에는 CycloneDX 1.4 형식의 패키지에 관한 취약점 정보가 포함되어 있습니다. 패키지의 취약점에 관한 정보가 있을 때마다 변경될 것으로 예상됩니다.
  • healthinfo.zip: 이 파일에는 패키지에서 실행된 테스트에 관한 세부정보가 포함되어 있습니다. 패키지의 테스트 상태가 수정되면 변경될 수 있습니다. 예를 들어 새로운 보안 테스트가 실행되거나 커버리지 결과가 변경된 경우입니다.
  • licenseinfo.zip: 이 파일에는 패키지의 라이선스 정보와 관련된 메타데이터가 포함됩니다. 패키지 게시자가 정보를 수정하면 패키지의 라이선스 정보가 변경될 수 있습니다.

각 ZIP 파일에는 다음 두 파일이 포함되어 있습니다.

  • 데이터가 포함된 JSON 파일입니다.
  • 해당 데이터의 서명이 포함된 signature.zip 파일입니다.

JSON 파일 구조

JSON 파일의 구조는 다음 섹션에 설명되어 있습니다.

buildInfo.json

  • creationTime: 이 문서의 생성 시간입니다(RFC 3339 문자열 형식).
  • creator: 문서의 소유자입니다. 다음 세부정보가 제공됩니다.
    • name: 이 문서를 만든 조직의 이름입니다.
    • email: 문의 또는 불만사항이 있는 경우 조직의 이메일 주소입니다.
  • buildDetails: 바이너리 빌드와 관련된 세부정보입니다. 다음 세부정보가 제공됩니다.
    • packageFileName: 빌드 세부정보가 적용되는 파일의 이름입니다.
    • buildProvenance: SLSA v0.2 형식의 패키지 빌드 출처를 나타내는 문자열입니다. 이는 Cloud Build에 의해 생성됩니다.
    • envelope: 출처 문서의 무결성을 확인하는 데 사용할 수 있는 DSSE 봉투를 나타내는 문자열입니다. 이 파일도 Cloud Build에서 생성합니다.
    • slsaLevel: 빌드 시스템에서 준수하는 SLSA 수준을 나타냅니다.
    • buildTool: 패키지 빌드에 사용되는 도구의 이름(Cloud Build) 자세한 내용은 Cloud Build를 참고하세요.
    • transitiveClosureState: 패키지의 모든 빌드 종속 항목 (직접 또는 간접)이 Assured OSS 포트폴리오에도 있는지 여부를 나타내는 ENUM입니다. 다음 두 값을 가질 수 있습니다.
      • OPEN: Assured OSS에서 0개 또는 일부 전이 종속 항목만 지원하는 경우
      • CLOSED: 모든 전이적 종속 항목이 Assured OSS에서 지원되는 경우
  • sourceInfo: 패키지를 빌드하는 데 사용된 소스 코드에 관한 정보입니다. 다음 세부정보가 제공됩니다.
    • sourceUrl: GitHub URL 문자열
    • commitHash: 버전에 연결된 커밋 해시 문자열입니다.
    • tag: 패키지 버전과 연결된 출시 태그입니다.
    • host: GitHub에서 소스 코드를 호스팅하는 시스템의 이름입니다.
    • commitTime: RFC 3339 문자열 형식의 커밋 시간입니다.
  • sbom - SPDX 2.3 형식의 SBOM 문자열입니다.

vexInfo.json

  • creationTime: 이 문서의 생성 시간입니다(RFC 3339 문자열 형식).
  • creator: 문서의 소유자입니다. 다음 세부정보가 제공됩니다.
    • name: 이 문서를 만든 조직의 이름입니다.
    • email: 문의 또는 불만사항이 있는 경우 조직의 이메일 주소입니다.
  • vexData: CycloneDX 1.4 형식의 취약점 악용 가능성 교환 (VEX) 문자열입니다.

healthInfo.json

  • creationTime: 이 문서의 생성 시간입니다(RFC 3339 문자열 형식).
  • creator: 문서의 소유자입니다. 다음 세부정보가 제공됩니다.
    • name: 이 문서를 만든 조직의 이름입니다.
    • email: 문의 또는 불만사항이 있는 경우 조직의 이메일 주소입니다.
  • testingData: 패키지에서 실행된 보안 테스트에 관한 세부정보입니다. 다음 세부정보가 제공됩니다.
    • testType: 실행된 테스트 유형입니다. 예를 들면 FUZZ입니다.
    • tool: 테스트를 실행하는 데 사용된 도구의 이름입니다.
    • testStatus: 테스트 상태입니다. 상태는 다음 중 하나일 수 있습니다.
      • TESTED: 테스트가 실행되었습니다.
      • NOT_REQUIRED: 패키지에 테스트가 필요하지 않았습니다. 예를 들어 인터페이스만 포함된 패키지에서는 퍼즈 테스트가 필요하지 않습니다.
      • UNTESTED: 패키지가 테스트되지 않았습니다.

licenseInfo.json

  • package_name: 문자열 형식의 패키지 이름입니다.
  • package_version: 패키지 버전입니다.
  • license_info: 패키지와 연결된 라이선스입니다.

Cloud Storage에서 보안 메타데이터에 액세스

Cloud Storage에서 보안 메타데이터에 액세스하려면 다음 단계를 따르세요.

1단계 - 인증 설정

인증 설정에 대한 자세한 내용은 인증 설정을 참고하세요.

2단계 - URL 구성

gcloud storage 또는 curl 명령어를 사용하여 메타데이터를 다운로드할 수 있습니다. 다음 정보를 사용하여 두 메타데이터 모두의 URL을 구성합니다.

  • 언어: java 또는 python 값은 소문자여야 합니다.
  • Package_ID: Java의 경우 groupId:artifactId, Python의 경우 packageName입니다. 값은 소문자여야 합니다.
  • 버전: 패키지 버전입니다.
  • Metadata_Type: buildinfo.zip, vexinfo.zip, healthinfo.zip 중에서 선택합니다.

URL은 다음과 같은 형식이어야 합니다.

gcloud

gs://cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type>

URL은 소문자여야 합니다.

샘플 Python URL: gs://cloud-aoss-metadata/python/cryptography/37.0.4/buildinfo.zip

샘플 Java URL: gs://cloud-aoss-metadata/java/com.google.errorprone:error_prone_annotations/2.15.0/buildinfo.zip

curl

https://storage.googleapis.com/cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type>

URL은 소문자여야 합니다.

샘플 Python URL: https://storage.googleapis.com/cloud-aoss-metadata/python/cryptography/37.0.4/buildinfo.zip

샘플 Java URL: https://storage.googleapis.com/cloud-aoss-metadata/java/com.google.errorprone:error_prone_annotations/2.15.0/buildinfo.zip

3단계 - 메타데이터 다운로드

다음 명령어를 사용하여 메타데이터를 다운로드합니다.

gcloud

gcloud storage cp  "gs://cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type>" outputFolderLocation

특정 패키지 및 버전에 대해 빌드 정보, 상태 정보, VEX 정보와 같은 모든 메타데이터 유형을 함께 다운로드하려면 다음 명령어를 사용하세요.

gcloud storage cp "gs://cloud-aoss-metadata/<language>/<package_id>/<version>" outputFolderLocation --recursive

메타데이터는 세 개의 zip 파일 (buildinfo.zip, healthinfo.zip, vexinfo.zip)에 분산되어 출력 폴더에 다운로드됩니다.

curl

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -L https://storage.googleapis.com/cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type> -o output.zip

4단계 - 메타데이터 추출

ZIP 파일의 압축을 풉니다. macOS 또는 Linux에서는 unzip 명령어(unzip input.zip -d outputFolder)를 사용합니다. 각 zip 파일에는 JSON 파일과 signature.zip 파일이 포함되어 있습니다. JSON 파일에는 실제 보안 메타데이터가 포함되어 있고 signature.zip 파일에는 JSON의 Google 서명을 확인하는 파일이 포함되어 있습니다.

라이선스 정보 다운로드

모든 Assured OSS 패키지의 라이선스 정보는 단일 JSON 파일에서 확인할 수 있습니다. 이 파일을 다운로드하려면 다음 명령어를 실행하세요.

gcloud

gcloud storage cp  "gs://cloud-aoss/info/LicenseInfo.json" outputFolderLocation

curl

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -L https://storage.googleapis.com/cloud-aoss/info/LicenseInfo.json

라이선스 메타데이터 파일의 서명을 다운로드하려면 다음 명령어를 실행합니다.

gcloud

gcloud storage cp "gs://cloud-aoss/info/LicenseInfo.json-sig.zip" outputFolderLocation

curl

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -L https://storage.googleapis.com/cloud-aoss/info/LicenseInfo.json-sig.zip -o output.zip

다음 단계