Artifact Analysis API를 사용하여 메타데이터 액세스

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

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

보안 메타데이터

Artifact Analysis는 오픈소스 Grafeas 모델에 따라 메타데이터 스토리지를 제공합니다. 패키지의 각 버전에 대해 다음 정보가 제공됩니다.

  • Assured OSS에서 출시한 각 패키지 버전에 대한 PackageNote 패키지 메모에는 다음이 포함됩니다.

    • distribution 여기서 각 distribution는 Assured OSS에서 제공하는 하나의 아티팩트에 해당합니다. 여기에는 바이너리 및 재현 가능한 소스의 위치와 다이제스트 url(서명 및 해시를 다운로드할 수 있는 위치)가 포함됩니다.
    • 빌드 출처 기록, 테스트 증명, 취약점과 같은 메타데이터에 대한 링크가 포함된 relatedURL
  • BuildOccurrence 이 빌드 일치 항목에 대한 링크는 패키지 메모의 relatedURL 섹션에 BUILD_OCCURRENCE 라벨과 함께 제공됩니다. 빌드 어커런스의 intotoStatement에는 SLSA v0.2 출처가 포함됩니다.

  • 두 번째 BuildOccurrenance. 이 빌드 일치 항목에 대한 링크는 패키지 메모의 relatedURL 섹션에 ORIGINAL_SOURCE_PROVENANCE 라벨과 함께 제공됩니다. 이 파일에는 소스 형식의 원본 소스(GitHub) 세부정보가 포함되어 있습니다.

  • AttestationOccurrence 이 증명 어커런스에 대한 링크는 패키지 메모의 relatedURL 섹션에 TEST_OCCURRENCE 라벨과 함께 제공됩니다. 증명의 직렬화된 페이로드에는 패키지 버전에서 수행된 모든 보안 테스트를 나타내는 JSON이 포함됩니다.

  • 두 번째 AttestationOccurrence 이 증명 어커런스에 대한 링크는 패키지 메모의 relatedURL 섹션에 PACKAGE_ATTESTATION_OCCURRENCE 라벨과 함께 제공됩니다. 증명의 JSON 직렬화된 페이로드는 패키지 메모의 페이로드와 이에 대한 서명입니다. 이 증명은 패키지 메모 콘텐츠의 무결성을 확인하는 데 사용됩니다.

  • 패키지와 연결된 모든 취약점에 대한 VulnerabilityNote 및 VulnerabilityOccurrence 메모와 일치 항목을 결합하면 취약점 요약 또는 설명, 심각도, CVSSV3 점수, 영향을 받는 버전 및 수정된 버전 정보, 해결 방법과 같은 취약점 정보를 제공합니다.

Artifact Analysis에서 보안 메타데이터 액세스

다양한 언어로 제공되는 Artifact Analysis API 클라이언트를 사용하여 Artifact Analysis에서 보안 메타데이터에 액세스할 수 있습니다. Artifact Analysis API용 Cloud 클라이언트 라이브러리를 시작하려면 필수 Artifact Analysis 클라이언트 라이브러리 설치를 참조하세요.

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

1단계 - 인증 설정

애플리케이션 기본 사용자 인증 정보(ADC)를 사용하여 인증을 설정합니다.

2단계 - 보안 메타데이터 가져오기

보안 메타데이터를 가져오려면 다음 정보를 사용하여 note_name 패키지를 만듭니다.

  • Project_ID: Google Cloud 프로젝트의 영숫자 식별자입니다.
  • Package Language: Java 또는 Python 대문자여야 합니다.
  • Package_ID: Java의 경우 groupId_artifactId, Python의 경우 packageName입니다. 이 값은 대소문자를 구분합니다. 패키지의 출시 이름에 유효한 대소문자는 Assured OSS의 모든 패키지 나열에서 확인할 수 있습니다.
  • Version: 패키지 버전입니다.

note_name의 구조는 projects/<project_id>/notes/<language>-<package_id>-<version>와 같아야 합니다.

예: projects/cloud-aoss/notes/JAVA-org.apache.commons_commons-compress-1.21

옵션 1:

Container Analysis 클라이언트 라이브러리를 사용하는 경우 note_name과 함께 getNotes를 사용하여 PackageNote를 쿼리합니다. PackageNote에는 다른 메모 및 일치 항목에 대한 링크가 있습니다.

옵션 2:

curl 명령어를 사용하는 경우 다음 명령어를 사용합니다.

curl  -H "Content-Type: application/json" -H   "Authorization: Bearer $(gcloud auth print-access-token)" $URL
  • Java의 경우 https://containeranalysis.googleapis.com/v1/projects/cloud-aoss/notes/JAVA-org.jsoup_jsoup-1.15.2 URL을 사용합니다.
  • Python의 경우 https://containeranalysis.googleapis.com/v1/projects/cloud-aoss/notes/PYTHON-Flask-Cors-3.0.10 URL을 사용합니다.

샘플 메타데이터

{
  "name": "projects/cloud-aoss/notes/JAVA-org.jsoup_jsoup-1.15.2",
  "kind": "PACKAGE",
  "relatedUrl": [
    {
      "url": "projects/cloud-aoss/occurrences/621d7e7b-8e6c-4313-b24b-eae3a1d1b884",
      "label": "ORIGINAL_SOURCE_PROVENANCE"
    },
    {
      "url": "https://containeranalysis.googleapis.com/v1/projects/cloud-aoss/occurrences/a0967d97-634c-4066-b6da-0a723273a165",
      "label": "BUILD_OCCURRENCE"
    },
    {
      "url": "projects/cloud-aoss/occurrences/6005db73-7310-44f9-9a36-6ca0174732a1",
      "label": "TEST_OCCURRENCE"
    },
    {
      "url": "projects/cloud-aoss/notes/GHSA-gp7f-rwcx-9369",
      "label": "VULNERABILITY_GHSA-gp7f-rwcx-9369"
    }
  ],
  "createTime": "2022-10-12T06:48:19.162016Z",
  "updateTime": "2022-10-18T05:31:15.081736Z",
  "package": {
    "distribution": [
      {
        "cpeUri": "cpe:2.3:a:JAVA::org.jsoup:jsoup:1.15.2:*:*:*:*:*:*:*",
        "url": "https://us-maven.pkg.dev/…/org/jsoup/jsoup/1.15.2/jsoup-1.15.2.jar",
        "description": "..."
      },
      {
        "cpeUri": "cpe:2.3:a:JAVA::org.jsoup:jsoup:1.15.2:*:*:*:*:*:*:*",
        "url": "https://us-maven.pkg.dev/…/org/jsoup/jsoup/1.15.2/jsoup-1.15.2-sources.jar",
        "description": "..."
      }
]}}

relatedURL 맵에 제공된 메모 및 일치 항목 이름을 사용하여 소스, 빌드, 테스트, 취약점과 관련된 추가 데이터를 가져옵니다. 이렇게 하려면 GetNote 및 GetOccurrence API 또는 curl 명령어를 사용합니다. BUILD_OCCURRENCE의 경우 API를 사용할 때 https://containeranalysis.googleapis.com/v1/의 초기 프리픽스를 삭제합니다. 다른 항목의 경우 URL을 API 매개변수에서 note_name 또는 occurrence_name로 직접 사용합니다.

샘플 Python 스크립트

다운로드한 전체 메타데이터를 출력하는 샘플 Python 스크립트는 README 파일과 함께 다음 Cloud Storage 위치에서 사용할 수 있습니다.

gs://cloud-aoss/utils/python-download-metadata/v1.1

Google Cloud CLI를 사용하여 스크립트를 다운로드하려면 다음 단계를 따르세요.

  1. 애플리케이션 기본 사용자 인증 정보(ADC)를 사용하여 인증을 설정합니다.

  2. container-analysis 클라이언트 라이브러리를 설치합니다. 특히 이 명령어는 다음을 설치해야 합니다.

    pip install google-cloud-containeranalysis
    
  3. 다음 명령어를 사용하여 cloud-kms 및 암호화 패키지를 설치합니다.

    pip install --upgrade google-cloud-kms
    pip install --upgrade cryptography
    
  4. 다음 명령어를 사용하여 시스템에 download_metadata.py를 다운로드합니다.

    gcloud storage cp gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata.py
    PATH_TO_LOCAL_STORE --recursive
    

    PATH_TO_LOCAL_STORE를 파일을 저장할 로컬 경로로 바꿉니다.

  5. 다음 명령어를 사용하여 스크립트 사용 안내가 포함된 README.md를 다운로드합니다.

    gcloud storage cp gs://cloud-aoss/utils/python-download-metadata/v1.1/README.md PATH_TO_LOCAL_STORE --recursive
    

    PATH_TO_LOCAL_STORE를 파일을 저장할 로컬 경로로 바꿉니다.

명령어 샘플

python ./download_metadata.py -l 'JAVA' -p 'org.apache.logging.log4j:log4j-core' -v '2.17.1'

컨테이너 분석 메타데이터의 서명을 확인하려면 스크립트에 다음 명령어를 추가합니다.

python ./download_metadata.py -l 'JAVA' -p 'org.apache.logging.log4j:log4j-core' -v '2.17.1' -s`

다음 단계