Skip to main content

아티팩트 증명 및 재사용 가능한 워크플로를 사용하여 SLSA v1 빌드 수준 3 달성

재사용 가능한 워크플로 및 아티팩트 증명을 사용하여 소프트웨어를 빌드하면 공급망 보안을 간소화하고 SLSA v1.0 빌드 수준 3을 달성할 수 있습니다.

소개

아티팩트 증명은 빌드한 소프트웨어에 대해 수정할 수 없는 출처 및 무결성 보장을 생성할 수 있는 좋은 방법입니다.

그러나 아티팩트 증명은 그 자체로 SLSA v1.0 빌드 수준 2를 충족하는 아티팩트가 빌드된 빌드 지침과 같은 링크를 제공합니다. 정보에 입각한 위험 결정을 내리기 위해 이러한 링크를 따르고 해당 빌드 지침을 평가하는 것은 사용자의 몫입니다.

여기서 한 단계 더 나아가 알려지고 검증된 빌드 지침을 사용하도록 할 수도 있습니다. 이 작업을 수행하는 좋은 방법은 조직 전체의 많은 리포지토리가 공유하는 재사용 가능한 워크플로에서 빌드를 수행하는 것입니다. 재사용 가능한 워크플로는 빌드 프로세스와 호출 워크플로를 격리하여 SLSA v1.0 빌드 수준 3을 충족할 수 있습니다.

이 가이드를 시작하기 전에 다음 사항을 숙지해야 합니다.

1단계: 빌드 구성

먼저 아티팩트 증명과 재사용 가능한 워크플로를 모두 사용하여 빌드해야 합니다.

재사용 가능한 워크플로를 사용하여 빌드

재사용 가능한 워크플로를 사용하여 소프트웨어를 빌드하지 않은 경우, 빌드 단계를 수행하고 재사용 가능한 워크플로로 이동해야 합니다. 재사용 가능한 워크플로를 작성하고 호출하는 방법에 대한 자세한 내용은 "워크플로 다시 사용"을 참조하세요.

아티팩트 증명을 사용하여 빌드

소프트웨어를 빌드하는 데 사용하는 재사용 가능한 워크플로도 빌드 출처를 설정하기 위해 아티팩트 증명을 생성해야 합니다. 자세한 내용은 "아티팩트 증명을 사용하여 빌드의 출처 설정"을(를) 참조하세요.

재사용 가능한 워크플로를 사용하여 아티팩트 증명을 생성하는 경우 호출 워크플로와 재사용 가능한 워크플로 모두에 다음 권한이 있어야 합니다.

YAML
permissions:
  attestations: write
  contents: read
  id-token: write

컨테이너 이미지를 빌드하는 경우 packages: write 권한도 포함해야 합니다.

2단계: 재사용 가능한 워크플로를 사용하여 빌드한 아티팩트 증명 확인

빌드를 사용하여 생성된 아티팩트 증명을 확인하려면 GitHub CLI에서 gh attestation verify를 사용할 수 있습니다.

gh attestation verify 명령은 --owner 또는 --repo 플래그를 함께 사용해야 합니다. 이 플래그들은 두 가지 작업을 수행합니다.

  • 증명을 가져올 위치를 gh attestation verify에게 알려줍니다. 이는 항상 호출자 워크플로가 됩니다.
  • 서명을 한 워크플로가 어디에서 왔는지 gh attestation verify에게 알려줍니다. 이는 항상 attest-build-provenance 작업을 사용하는 워크플로이며 재사용할 수 있는 워크플로일 수 있습니다.

선택적으로 gh attestation verify 명령과 함께 플래그를 사용할 수 있습니다.

  • 재사용 가능한 워크플로가 호출자 워크플로와 동일한 리포지토리에 없는 경우 --signer-repo 플래그를 사용하여 재사용 가능한 워크플로가 포함된 리포지토리를 지정합니다.
  • 아티팩트 증명이 특정 워크플로로 서명되도록 하려면 --signer-workflow 플래그를 사용하여 사용해야 하는 워크플로 파일을 지정합니다.

예를 들어 호출하는 워크플로가 ORGANIZATION_NAME/REPOSITORY_NAME/.github/workflows/calling.yml이고 REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml를 사용하는 경우, 다음을 수행할 수 있습니다.

Bash
gh attestation verify -o ORGANIZATION_NAME --signer-repo REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME PATH/TO/YOUR/BUILD/ARTIFACT-BINARY

또는 정확한 워크플로를 지정하려는 경우 다음과 같이 수행할 수 있습니다.

Bash
gh attestation verify -o ORGANIZATION_NAME --signer-workflow REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml PATH/TO/YOUR/BUILD/ARTIFACT-BINARY

결론

이제 재사용 가능한 워크플로에서 아티팩트를 빌드하고 서명하면 SLSA v1.0 빌드 수준 3에 필요한 격리를 제공할 수 있습니다. 재사용 가능 여부와 상관없이 특정 워크플로로 아티팩트가 빌드되도록 하면 알려지고 검증된 빌드 지침으로 아티팩트가 빌드되었는지 확인할 수 있습니다.