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

Assured Open Source Software(Assured OSS)는 사용 가능한 모든 패키지 및 패키지 버전에 대한 보안 메타데이터를 제공합니다. Cloud Storage에서 이 메타데이터에 액세스하여 빌드 세부정보, 취약점 상태, 테스트 결과, 라이선스 정보를 검토할 수 있습니다.

이 문서는 무료 등급에만 적용됩니다. Artifact Analysis API를 사용하여 메타데이터에 액세스하는 방법은 Artifact Analysis API를 사용하여 메타데이터 액세스를 참조하세요.

보안 메타데이터 파일

각 Assured OSS 패키지 버전에 대한 보안 메타데이터는 Cloud Storage 버킷의 다음 4개 파일에 분산됩니다.

  • 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에서 전이적 종속 항목이 지원되지 않거나 일부만 지원되는 경우
      • 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(Vulnerability Exploitability eXchange) 문자열입니다.

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

메타데이터는 3개의 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

다음 단계