✕
Skip to main content
Skip to content

오프라인에서 증명 확인

인터넷 연결 없이 아티팩트 증명을 확인할 수 있습니다.

필수 조건

이 가이드를 시작하기 전에 빌드의 아티팩트 증명을 생성해야 합니다. 아티팩트 증명을 사용하여 빌드의 출처 설정을(를) 참조하세요.

1단계: 증명 번들 다운로드

먼저 증명 API에서 증명 번들을 가져옵니다.

온라인 컴퓨터에서 다음 명령을 사용하여 수행할 수 있습니다.

Bash
gh attestation download PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME

다음은 해당 명령의 출력 예시입니다.

Wrote attestations to file sha256:ae57936def59bc4c75edd3a837d89bcefc6d3a5e31d55a6fa7a71624f92c3c3b.jsonl.
Any previous content has been overwritten

The trusted metadata is now available at sha256:ae57936def59bc4c75edd3a837d89bcefc6d3a5e31d55a6fa7a71624f92c3c3b.jsonl

2단계: 신뢰할 수 있는 루트 다운로드

다음으로 신뢰할 수 있는 루트에서 키 자료를 가져옵니다.

아티팩트 증명은 공용 리포지토리에 Sigstore public good 인스턴스를 사용하고 프라이빗 리포지토리에는 GitHub Sigstore 인스턴스를 사용합니다. 하나의 명령을 사용하여 신뢰할 수 있는 루트를 모두 가져올 수 있습니다.

Bash
gh attestation trusted-root > trusted_root.jsonl

오프라인 환경에서 신뢰할 수 있는 루트 정보 업데이트

서명된 새 자료를 오프라인 환경으로 가져올 때마다 새 trusted_root.jsonl 파일을 생성하는 것이 가장 좋습니다.

trusted_root.jsonl의 키 자료에는 기본 제공 만료 날짜가 없으므로 신뢰할 수 있는 루트 파일을 생성하기 전에 서명된 모든 항목은 계속해서 성공적으로 확인됩니다. 파일이 생성된 후 서명된 모든 항목은 Sigstore 인스턴스가 키 자료를 회전할 때까지 확인되며, 이는 일반적으로 일년에 몇 번 발생합니다. 신뢰할 수 있는 루트 파일을 마지막으로 생성한 이후 키 자료가 해지되었는지 알 수 없습니다.

3단계: 오프라인 확인 수행

이제 아티팩트를 오프라인으로 검증할 준비가 되었습니다.

오프라인 환경으로 다음 항목을 가져와야 합니다.

  • GitHub CLI
  • 사용자 아티팩트
  • 번들 파일
  • 신뢰할 수 있는 루트 파일

그런 다음, 다음 명령을 사용하여 오프라인 확인을 수행할 수 있습니다.

Bash
gh attestation verify PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME --bundle sha256:ae57936def59bc4c75edd3a837d89bcefc6d3a5e31d55a6fa7a71624f92c3c3b.jsonl --custom-trusted-root trusted_root.jsonl

오프라인 환경에서 리포지토리 확인

오프라인으로 확인할 때 gh attestation verify, -R 값만 증명의 서명 인증서에 기록된 리포지토리 및 소유자 이름과 비교합니다. 이것은 증명이 만들어졌을 때 리포지토리와 소유자가 가지고 있던 이름입니다. 이 명령은 리포지토리 또는 소유자의 이름이 이후 변경되었는지 여부 또는 이제 다른 리포지토리 또는 소유자가 해당 이름을 사용하는지 여부를 감지할 수 없습니다.

증명이 현재 해당 이름을 사용하는 리포지토리에서 제공되는지 확인하려면 1단계에 설명된 대로 attestation API에서 해당 번들을 다운로드합니다. 증명 API는 해당 리포지토리의 증명만 반환합니다.

서명 인증서는 리포지토리의 ID도 기록합니다. 리포지토리는 이름이 바뀔 때 ID를 유지하고, 이전 이름을 사용하는 새 리포지토리는 다른 ID를 가져옵니다. 아티팩트와 함께 게시된 번들과 같은 다른 출처에서 번들을 확인하는 경우 이 ID를 예상한 리포지토리의 ID와 비교합니다.

  1. 온라인 상태인 머신에서 아티팩트가 가져올 것으로 예상되는 리포지토리의 ID를 가져옵니다.

    Bash
    gh api repos/ORGANIZATION_NAME/REPOSITORY_NAME --jq .id
    
  2. 오프라인 환경에서 확인 명령에 --jq 및 --format json 플래그를 추가하여 확인된 각 증명의 리포지토리 ID를 출력합니다.

-R의 경우 ORGANIZATION_NAME/REPOSITORY_NAME를 서명 인증서에 기록된 소유자 및 리포지토리 이름으로 바꿉니다. 리포지토리 또는 소유자의 이름이 변경된 경우 API 조회에 사용되는 현재 이름과 다릅니다.

Bash
gh attestation verify PATH/TO/YOUR/BUILD/ARTIFACT-BINARY \
  -R ORGANIZATION_NAME/REPOSITORY_NAME \
  --bundle PATH/TO/YOUR/BUNDLE.jsonl \
  --custom-trusted-root trusted_root.jsonl \
  --format json \
  --jq '.[].verificationResult.signature.certificate.sourceRepositoryIdentifier'
  1. 출력의 각 ID가 첫 번째 단계의 ID와 일치하는지 확인합니다. 동일한 이름을 사용한 다른 리포지토리가 증명을 생성했기 때문에 ID가 일치하지 않는 증명을 신뢰하지 마세요.