이미지 출처 확인

커스텀 OS 이미지의 SLSA (소프트웨어 아티팩트에 대한 공급망 등급) 빌드 출처 기록 증명을 확인하여 소프트웨어 공급망 무결성을 보장할 수 있습니다.

Artifact Registry로 출력하고 확인 옵션을 사용 설정하도록 Image Builder 파이프라인을 구성하면 Cloud Build는 컴파일 중에 사용된 정확한 파이프라인 소스 코드, 구성, 실행 매개변수, 기본 이미지를 설명하는 암호화 증명을 자동으로 생성합니다. 이 빌드 출처 기록을 확인하면 신뢰할 수 있는 파이프라인이 무단 조작 없이 이미지를 안전하게 빌드했음을 확인할 수 있습니다.

시작하기 전에

  • 환경 준비의 환경 설정 단계를 완료합니다.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인합니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음 옵션 중 하나를 선택하여 Compute Engine에 인증하면 됩니다.

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    콘솔을 Google Cloud 사용하여 서비스 Google Cloud 및 API에 액세스하는 경우 인증을 설정할 필요가 없습니다.

    gcloud

    1. Google Cloud CLI를 설치합니다. 설치 후 Google Cloud CLI를 초기화하려면 다음 명령어를 실행합니다.

      gcloud init

      외부 ID 공급업체 (IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  • 기본 리전 및 영역을 설정합니다.
  • REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Google Cloud CLI를 설치합니다.

      외부 ID 공급업체 (IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

    자세한 내용은 인증 문서의 REST 사용을 위한 인증 을 참조하세요. Google Cloud

필요한 역할

빌드 출처 증명을 보고 확인하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대해 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

출처 생성 구성

빌드 출처 기록을 생성하려면 다음 스니펫과 같이 substitutions, options, results, 및 artifacts 블록을 cloudbuild.yaml 파일에서 구성해야 합니다.

substitutions:
  # 1. Specify your output path and target Artifact Registry resource URI
  _IMAGE_OUTPUT_PATH: 'image-builder/binaryOut'
  _ARTIFACT_REGISTRY_RESOURCE_URI: 'projects/PROJECT_ID/locations/REGION/repositories/REPOSITORY_NAME/packages/PACKAGE_NAME/versions/v${BUILD_ID}'

steps:
  # 2. Configure step results and base image attestations
  - name: 'REGION-docker.pkg.dev/image-builder-official/release/builder:stable'
    script: |
      #!/usr/bin/env bash
      /build
    id: 'imagebuilder-customize'
    results:
      - name: image_builder_telemetry_metrics
      - name: base_image
        attestationType: "https://cloudbuild.googleapis.com/attestations/build_content_restrictions"
        attestationContent: base_image

options:
  # 3. Enable Cloud Logging and cryptographic provenance generation
  logging: CLOUD_LOGGING_ONLY
  requestedVerifyOption: VERIFIED

artifacts:
  # 4. Upload generic image artifacts and provenance to Artifact Registry
  generic_artifacts:
    - folder: '${_IMAGE_OUTPUT_PATH}'
      registry_path: '${_ARTIFACT_REGISTRY_RESOURCE_URI}'

출처 데이터 확인

Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 빌드 출처 기록 데이터 및 실행 아티팩트를 보고 확인할 수 있습니다.

콘솔 (Cloud Build)

Cloud Build 빌드 기록을 통해 빌드 출처 기록 및 출력 아티팩트를 보려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 Cloud Build 페이지로 이동합니다.

    Cloud Build로 이동

  2. 기록 을 클릭하고 이미지 파이프라인 실행의 빌드 ID 를 선택합니다. 빌드 세부정보 페이지에는 세 가지 프로세스 단계(imagebuilder-customize, imagebuilder-validate, imagebuilder-publish)의 로그가 표시됩니다.

  3. 빌드 아티팩트 탭을 클릭하여 실행 중에 생성된 정확한 OS 이미지를 확인합니다.

  4. 첨부파일 탭을 클릭하여 서명된 SLSA 출처 증명 파일 및 결과 파일을 확인합니다. 결과 파일은 실행 중에 사용된 소스 기본 이미지를 기록합니다.

콘솔 (Artifact Registry)

Artifact Registry에서 직접 빌드 출처 기록을 보려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 Artifact Registry 페이지로 이동합니다.

    Artifact Registry로 이동

  2. 저장소 목록에서 일반 저장소의 이름을 클릭합니다.

  3. 패키지 목록에서 OS 이미지 패키지 이름을 클릭합니다.

  4. 버전 기록 목록에서 파이프라인 실행의 버전 ID (v${BUILD_ID})를 클릭합니다.

  5. 첨부파일 탭을 클릭하여 해당 이미지 버전의 서명된 SLSA 출처 증명 파일 및 결과 파일을 확인합니다. 결과 파일은 실행 중에 사용된 기본 소스 이미지를 기록합니다.

gcloud

Artifact Registry는 출처 레코드를 일반 이미지 tarball과 함께 첨부파일로 저장합니다.

증명은 Dead Simple Signing Envelope(DSSE)로 형식이 지정되므로 JSON 내부의 실제 출처 문 페이로드는 base64로 인코딩됩니다. 세부정보를 읽으려면 gcloud CLI 및 jq 유틸리티를 사용하여 다음 단계를 수행하세요.

  1. `gcloud artifacts versions list` 명령어를 실행하여 확인하려는 특정 빌드 ID 버전을 찾도록 패키지 버전을 나열합니다.

    gcloud artifacts versions list \
        --package=PACKAGE_NAME \
        --repository=REPOSITORY_NAME \
        --location=REPOSITORY_LOCATION \
        --project=PROJECT_ID
    

    다음을 바꿉니다.

    • PACKAGE_NAME: Artifact Registry 저장소의 패키지 이름(예: my-custom-image)
    • REPOSITORY_NAME: 일반 Artifact Registry 저장소의 이름(예: custom-os-images)
    • REPOSITORY_LOCATION: 저장소의 리전(예: us-central1)
    • PROJECT_ID: 프로젝트 ID
  2. gcloud artifacts attachments list 명령어를 실행하여 대상 패키지 버전과 일치하는 첨부파일 메타데이터를 쿼리합니다:

    gcloud artifacts attachments list \
        --target=projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_NAME/packages/PACKAGE_NAME/versions/vBUILD_ID \
        --repository=REPOSITORY_NAME \
        --location=REPOSITORY_LOCATION \
        --project=PROJECT_ID
    

    BUILD_ID를 1단계에서 반환된 버전 식별자(예: 12345)로 바꿉니다.

    명령어 출력에서 name 필드 에 build-result(유형: type: application/vnd.in-toto+json)가 포함된 첨부파일 항목을 찾고 files: 아래에 나열된 경로를 복사합니다(예:)

    projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_NAME/files/sha256:SHA256_HASH

  3. `gcloud artifacts files download` 명령어를 실행하여 저장소에서 JSON 메타데이터 첨부파일 페이로드를 다운로드합니다.

    gcloud artifacts files download ATTACHMENT_FILE_ID \
        --repository=REPOSITORY_NAME \
        --location=REPOSITORY_LOCATION \
        --project=PROJECT_ID \
        --destination=./provenance.json
    

    ATTACHMENT_FILE_ID를 이전 단계에서 가져온 files: 첨부파일 경로로 바꿉니다.

  4. 다음 명령어를 실행하여 JSON 페이로드 콘텐츠를 격리하고 base64로 디코딩하고 형식을 지정합니다.

    cat ./provenance.json | jq -r '.payload' | base64 --decode | jq
    

    출력에는 빌드 트리거, 레시피 저장소 세부정보, 사용된 컨테이너 이미지, 빌드 해시, 기본 이미지 속성을 강조 표시하는 표준 SLSA 형식 매개변수가 포함됩니다.