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

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

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

  • Artifact Analysis API
  • Cloud Storage

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

보안 메타데이터

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

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

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

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

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

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

  • 패키지와 연결된 모든 취약점에 대한 VulnerabilityNoteVulnerabilityOccurrence 메모와 발생을 결합하면 취약점 요약 또는 설명, 심각도, 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 클라이언트 라이브러리를 사용하는 경우 getNotesnote_name과 함께 사용하여 PackageNote를 쿼리합니다. PackageNote에는 다른 메모와 일정에 대한 링크가 있습니다.

옵션 2:

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

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

샘플 메타데이터

{
  "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 맵에 제공된 메모 및 발생 이름을 사용하여 소스, 빌드, 테스트, 취약점과 관련된 추가 데이터를 가져옵니다. 이렇게 하려면 GetNoteGetOccurrence API 또는 curl 명령어를 사용합니다. BUILD_OCCURRENCE의 경우 API를 사용할 때 https://containeranalysis.googleapis.com/v1/의 초기 접두사를 삭제합니다. 다른 항목의 경우 URL을 API 매개변수에서 note_name 또는 occurrence_name로 직접 사용합니다.

샘플 Python 스크립트

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

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 및 cryptography 패키지를 설치합니다.

    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`

다음 단계