Skip to main content

아티팩트 증명을 사용하여 빌드의 출처 설정

아티팩트 증명을 사용하면 소프트웨어가 빌드되는 위치와 방법을 공개적으로 설정하고 서명된 SBOM(소프트웨어 자료 청구서)과 연결하여 빌드의 공급망 보안을 강화할 수 있습니다.

Note

아티팩트 증명은 퍼블릭 베타로 제공되며 변경될 수 있습니다.

아티팩트 증명 정보

아티팩트 증명을 사용하면 빌드한 소프트웨어에 대해 수정할 수 없는 출처 및 무결성 보장을 생성할 수 있습니다. 따라서 소프트웨어를 사용하는 사용자는 소프트웨어가 빌드된 위치와 방법을 확인할 수 있습니다.

소프트웨어를 사용하여 아티팩트 증명을 생성하는 경우 빌드의 출처를 설정하고 다음 정보가 포함된 암호화 서명된 클레임을 만듭니다.

  • 아티팩트와 연결된 워크플로의 링크입니다.
  • 아티팩트의 리포지토리, 조직, 환경, 커밋 SHA 및 트리거 이벤트입니다.
  • 출처를 설정하는 데 사용되는 OIDC 토큰의 기타 정보입니다. 자세한 내용은 "OpenID Connect를 사용한 보안 강화 정보"을(를) 참조하세요.

관련 SBOM(소프트웨어 자료 청구서)을 포함하는 아티팩트 증명을 생성할 수도 있습니다. 빌드에 사용되는 오픈 소스 종속성 목록과 빌드를 연결하면 투명성을 보장하고 소비자가 데이터 보호 표준을 준수하도록 할 수 있습니다.

아티팩트 증명의 SLSA 수준 정보

SLSA 프레임워크는 공급망 보안을 평가하는 데 사용되는 업계 표준으로, 여러 수준으로 구성됩니다. 각 수준은 소프트웨어 공급망에 대한 보안과 신뢰성이 강화되는 정도를 나타냅니다. 아티팩트 증명은 SLSA v1.0 빌드 수준 2를 제공합니다.

아티팩트 증명을 사용하여 SLSA v1.0 빌드 수준 3을 달성할 수 있습니다. 단, 먼저 조직 전체에서 빌드 수준 2를 광범위하게 채택하는 데 중점을 두는 것이 좋습니다. 빌드의 작은 부분에서 수준 3에 도달하는 것보다 빌드 전체에서 수준 2를 일관되게 충족하는 것이 훨씬 낫습니다. 빌드 수준 3을 달성하려면 재사용 가능한 워크플로를 사용하여 빌드 프로세스를 표준화하고, 재사용 가능한 워크플로를 감사하여 수준 3 요구 사항을 충족하는지 확인하며, 감사된 재사용 가능한 워크플로를 요구하도록 확인 정책을 업데이트하는 것이 좋습니다.

자세한 내용은 SLSA 설명서의 출처 섹션을 참조하세요.

아티팩트 증명에 Sigstore 사용 정보

아티팩트 증명을 생성하기 위해 GitHub은(는) 증명을 통해 소프트웨어 아티팩트에 서명하고 확인하기 위한 포괄적인 솔루션을 제공하는 오픈 소스 프로젝트인 Sigstore를 사용합니다.

아티팩트 증명을 생성하는 퍼블릭 리포지토리Sigstore Public Good Instance를 사용합니다. 생성된 Sigstore 번들의 복사본은 GitHub와 함께 저장되며 인터넷에서 공개적으로 읽을 수 있는 변경 불가능한 투명도 로그에도 기록됩니다.

아티팩트 증명을 생성하는 프라이빗 리포지토리는 GitHub의 Sigstore 인스턴스를 사용합니다. GitHub의 Sigstore 인스턴스는 Sigstore Public Good Instance와 동일한 코드베이스를 사용하지만 투명도 로그가 없으며 GitHub Actions만 페더레이션합니다.

아티팩트 증명 확인 정보

아티팩트 증명을 게시하는 소프트웨어를 사용하는 경우 GitHub CLI을(를) 사용하여 해당 증명을 확인할 수 있습니다. 증명은 소프트웨어가 빌드된 위치와 방법에 대한 정보를 제공하므로, 해당 정보를 사용하여 공급망 보안을 강화하는 보안 정책을 만들고 적용할 수 있습니다. 자세한 내용은 "GitHub CLI을(를) 사용하여 아티팩트 증명 확인"을 참조하세요.

Warning

아티팩트 증명은 아티팩트가 안전하다는 보장이 아니라는 점을 기억해야 합니다. 대신, 아티팩트 증명은 소스 코드와 이를 생성한 빌드 지침에 연결해 줍니다. 소프트웨어를 사용할 때 정책 기준을 정의하고, 콘텐츠를 평가하여 해당 정책을 평가하고, 정보에 입각한 위험 결정을 내리는 것은 사용자의 몫입니다.

빌드의 아티팩트 증명 생성

GitHub Actions을(를) 사용하여 이진 파일 및 컨테이너 이미지와 같은 아티팩트에 대한 빌드 출처를 설정하는 아티팩트 증명을 생성할 수 있습니다.

아티팩트 증명을 생성하려면 다음을 수행해야 합니다.

  • 워크플로에 적절한 권한이 구성되어 있는지 확인합니다.
  • attest-build-provenance 작업을 사용하는 단계를 워크플로에 포함합니다.

업데이트된 워크플로를 실행하면 아티팩트가 빌드되고 빌드 출처를 설정하는 아티팩트 증명이 생성됩니다. 리포지토리의 **작업 **탭에서 증명을 볼 수 있습니다. 자세한 내용은 attest-build-provenance 리포지토리를 참조하세요.

이진 파일의 빌드 출처 생성

  1. 증명할 이진 파일을 빌드하는 워크플로에서 다음 권한을 추가합니다.

    permissions:
      id-token: write
      contents: read
      attestations: write
    
  2. 이진 파일이 빌드된 단계 뒤에 다음 단계를 추가합니다.

    - name: Generate artifact attestation
      uses: actions/attest-build-provenance@v1
      with:
        subject-path: 'PATH/TO/ARTIFACT'
    

    subject-path 매개 변수의 값은 증명할 이진 파일 경로로 설정해야 합니다.

컨테이너 이미지의 빌드 출처 생성

  1. 증명할 컨테이너 이미지를 빌드하는 워크플로에서 다음 권한을 추가합니다.

    permissions:
      id-token: write
      contents: read
      attestations: write
      packages: write
    
  2. 이미지가 빌드된 단계 뒤에 다음 단계를 추가합니다.

    - name: Generate artifact attestation
      uses: actions/attest-build-provenance@v1
      with:
        subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
        subject-digest: 'sha256:fedcba0...'
        push-to-registry: true
    

    subject-name 매개 변수의 값은 정규화된 이미지 이름을 지정해야 합니다. 예를 들어 ghcr.io/user/app 또는 acme.azurecr.io/user/app입니다. 이미지 이름의 일부로 태그를 포함하지 마세요.

    subject-digest 매개 변수의 값은 증명 주체의 SHA256 요약(sha256:HEX_DIGEST 형식)으로 설정해야 합니다. 워크플로에서 docker/build-push-action을 사용하는 경우 해당 단계의 digest 출력을 사용하여 값을 제공할 수 있습니다. 출력 사용에 대한 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을(를) 참조하세요.

SBOM(소프트웨어 자료 청구서)의 증명 생성

워크플로 아티팩트의 서명된 SBOM 증명을 생성할 수 있습니다.

SBOM의 증명을 생성하려면 다음을 수행해야 합니다.

  • 워크플로에 적절한 권한이 구성되어 있는지 확인합니다.
  • 아티팩트의 SBOM을 만듭니다. 자세한 내용은 GitHub Marketplace에서 anchore-sbom-action을(를) 참조하세요.
  • attest-sbom 작업을 사용하는 단계를 워크플로에 포함합니다.

업데이트된 워크플로를 실행하면 아티팩트가 빌드되고 SBOM 증명이 생성됩니다. 리포지토리의 작업 탭에서 증명을 볼 수 있습니다. 자세한 내용은 attest-sbom 작업 리포지토리를 참조하세요.

이진 파일의 SBOM 증명 생성

  1. 증명할 이진 파일을 빌드하는 워크플로에서 다음 권한을 추가합니다.

    permissions:
      id-token: write
      contents: read
      attestations: write
    
  2. 이진 파일이 빌드된 단계 뒤에 다음 단계를 추가합니다.

    - name: Generate SBOM attestation
      uses: actions/attest-sbom@v1
      with:
        subject-path: 'PATH/TO/ARTIFACT'
        sbom-path: 'PATH/TO/SBOM'
    

    subject-path 매개 변수의 값은 SBOM에서 설명하는 이진 파일의 경로로 설정해야 합니다. sbom-path 매개 변수의 값은 생성한 SBOM 파일의 경로로 설정해야 합니다.

컨테이너 이미지의 SBOM 증명 생성

  1. 증명할 컨테이너 이미지를 빌드하는 워크플로에서 다음 권한을 추가합니다.

    permissions:
      id-token: write
      contents: read
      attestations: write
      packages: write
    
  2. 이미지가 빌드된 단계 뒤에 다음 단계를 추가합니다.

    - name: Generate SBOM attestation
      uses: actions/attest-sbom@v1
      with:
        subject-name: ${{ env.REGISTRY }}/PATH/TO/IMAGE
        subject-digest: 'sha256:fedcba0...'
        sbom-path: 'sbom.json'
        push-to-registry: true
    

    subject-name 매개 변수의 값은 정규화된 이미지 이름을 지정해야 합니다. 예를 들어 ghcr.io/user/app 또는 acme.azurecr.io/user/app입니다. 이미지 이름의 일부로 태그를 포함하지 마세요.

    subject-digest 매개 변수의 값은 증명 주체의 SHA256 요약(sha256:HEX_DIGEST 형식)으로 설정해야 합니다. 워크플로에서 docker/build-push-action을 사용하는 경우 해당 단계의 digest 출력을 사용하여 값을 제공할 수 있습니다. 출력 사용에 대한 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을(를) 참조하세요.

    sbom-path 매개 변수의 값은 증명할 JSON 형식의 SBOM 파일 경로로 설정해야 합니다.

GitHub CLI을(를) 사용하여 아티팩트 증명 확인

이진 파일의 아티팩트 증명을 확인하려면 다음 GitHub CLI 명령을 사용합니다.

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

컨테이너 이미지의 아티팩트 증명을 확인하려면 이진 파일의 경로 대신 oci:// 접두사가 있는 이미지의 FQDN을 제공해야 합니다. 다음 GitHub CLI 명령을 사용할 수 있습니다.

Bash
docker login ghcr.io

gh attestation verify oci://ghcr.io/ORGANIZATION_NAME/IMAGE_NAME:test -R ORGANIZATION_NAME/REPOSITORY_NAME

자세한 내용은 GitHub CLI 매뉴얼의 attestation 섹션을 참조하세요.