SLSA
Supply-chain Levels for Software Artifacts, 공급망 보안 프레임워크
Supply-chain Levels for Software Artifacts, 공급망 보안 프레임워크
SLSA(Supply-chain Levels for Software Artifacts, 발음: 살사)는 Google이 주도하는 소프트웨어 공급망 보안 프레임워크입니다. 소프트웨어가 어디서 왔는지, 누가 빌드했는지, 변조되지 않았는지를 검증하는 표준을 정의합니다.
SLSA는 4단계(L1-L4) 성숙도 모델을 제시합니다. L1은 빌드 프로세스 문서화, L2는 호스팅된 빌드 서비스 사용, L3는 빌드 환경 격리와 출처 증명 생성, L4는 완전 재현 가능 빌드입니다. 대부분의 조직은 L3를 목표로 합니다.
핵심 개념은 "Provenance(출처 증명)"입니다. 빌드 시스템이 "이 아티팩트는 이 소스 코드에서, 이 빌더가, 이 시점에 빌드했다"는 증명을 서명하여 첨부합니다. 소비자는 이를 검증하여 신뢰할 수 있는 출처인지 확인합니다.
GitHub Actions, GitLab CI에서 SLSA provenance를 자동 생성하는 도구가 있습니다. slsa-github-generator, slsa-verifier로 L3 수준의 공급망 보안을 구현할 수 있습니다.
# GitHub Actions에서 SLSA L3 Provenance 생성
# .github/workflows/slsa-build.yml
name: SLSA Build
on:
release:
types: [published]
jobs:
build:
outputs:
hashes: \${{ steps.hash.outputs.hashes }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: make build
- name: Generate hash
id: hash
run: |
HASHES=\$(sha256sum dist/* | base64 -w0)
echo "hashes=\$HASHES" >> \$GITHUB_OUTPUT
- uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
provenance:
needs: [build]
permissions:
actions: read
id-token: write
contents: write
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.0.0
with:
base64-subjects: "\${{ needs.build.outputs.hashes }}"
upload-assets: true
# SLSA Provenance 검증
slsa-verifier verify-artifact myapp-v1.0.tar.gz \
--provenance-path myapp-v1.0.tar.gz.intoto.jsonl \
--source-uri github.com/myorg/myapp \
--source-tag v1.0
# Provenance 내용 확인
cat myapp-v1.0.tar.gz.intoto.jsonl | jq '.payload | @base64d | fromjson'
# {
# "buildType": "https://github.com/slsa-framework/slsa-github-generator/...",
# "builder": {"id": "https://github.com/slsa-framework/slsa-github-generator/..."},
# "invocation": {"configSource": {"uri": "git+https://github.com/myorg/myapp@refs/tags/v1.0"}},
# "materials": [{"uri": "git+https://github.com/myorg/myapp", "digest": {"sha1": "abc123"}}]
# }
보안: "SolarWinds 같은 공급망 공격 방지하려면 SLSA L3 필요해요. 빌드 출처 증명을 생성하고 배포 전 검증해야 합니다."
DevOps: "기존 파이프라인에 추가하기 어렵나요?"
보안: "slsa-github-generator 쓰면 재사용 워크플로 하나 추가로 L3 달성 가능해요."
면접관: "SLSA Level 3 요구사항을 설명해주세요."
지원자: "L3는 호스팅된 빌드 서비스에서 격리된 환경으로 빌드하고, 빌드 시스템이 변조 불가능한 출처 증명(provenance)을 생성해야 합니다. Provenance에는 소스 코드 출처, 빌더 신원, 빌드 파라미터가 서명되어 포함됩니다."
리뷰어: "slsa-verifier에서 --source-uri가 잘못됐어요. 정확한 리포지토리 경로로 수정해주세요."
작성자: "확인했습니다. github.com/myorg/myapp으로 수정하겠습니다."