🔒 보안

Sigstore

소프트웨어 서명 및 검증 프로젝트

📖 상세 설명

Sigstore는 Linux Foundation 프로젝트로, 소프트웨어 서명과 검증을 무료로 제공하는 공개 인프라입니다. SolarWinds, Log4j 사태 이후 소프트웨어 공급망 보안의 필요성이 높아지면서 주목받고 있습니다.

Sigstore는 세 가지 핵심 컴포넌트로 구성됩니다. Fulcio(인증서 발급), Rekor(투명성 로그), Cosign(서명 도구)입니다. Fulcio는 OIDC 인증으로 단기 인증서를 발급하고, Rekor는 모든 서명을 공개적으로 기록합니다.

Keyless Signing이 가장 큰 특징입니다. 장기 보관 키 없이 GitHub Actions, GitLab CI의 OIDC 토큰으로 서명합니다. 키 관리 부담이 사라지고, 서명자의 신원이 인증서에 바인딩됩니다.

SLSA 프레임워크와 함께 사용되며, 빌드 출처 증명(provenance attestation)을 생성하고 검증하는 데 활용됩니다. npm, PyPI, Maven 등 패키지 레지스트리에서도 Sigstore 채택이 확산되고 있습니다.

💻 코드 예제

# Sigstore 구성요소 설명
# Fulcio: OIDC 기반 인증서 발급 서비스
# Rekor: 변조 불가 투명성 로그 (Merkle Tree)
# Cosign: 컨테이너 이미지 서명 CLI

# Keyless 서명 (GitHub Actions에서)
# .github/workflows/sign.yml
jobs:
  sign:
    runs-on: ubuntu-latest
    permissions:
      id-token: write  # OIDC 토큰 발급
      packages: write
    steps:
      - uses: sigstore/cosign-installer@v3

      - name: Sign container image
        run: cosign sign --yes ${{ env.IMAGE }}
        # OIDC 토큰으로 Fulcio에서 인증서 발급
        # Rekor에 서명 기록

# 서명 검증 (소비자 측)
cosign verify ghcr.io/myorg/myapp:v1.0 \
  --certificate-identity="https://github.com/myorg/myapp/.github/workflows/build.yml@refs/tags/v1.0" \
  --certificate-oidc-issuer="https://token.actions.githubusercontent.com"

# Rekor에서 서명 기록 조회
rekor-cli search --email=user@example.com

# SLSA Provenance 생성 및 검증
# slsa-verifier로 빌드 출처 증명
slsa-verifier verify-artifact myapp.tar.gz \
  --provenance-path myapp.tar.gz.sigstore \
  --source-uri github.com/myorg/myapp

# 프라이빗 Sigstore 구축 (기업 환경)
# Helm으로 Fulcio, Rekor, CTFE 배포
helm install sigstore sigstore/scaffold -n sigstore

🗣️ 실무에서 이렇게 말해요

보안: "오픈소스 라이브러리 공급망 보안 강화하려고요. npm, PyPI에서 Sigstore 서명 검증을 CI에 추가합시다."

개발자: "우리 패키지도 서명해야 하나요?"

보안: "내부 배포용은 Cosign으로 컨테이너 서명하면 되고, 외부 공개 패키지는 npm provenance 사용하면 됩니다."

면접관: "소프트웨어 공급망 보안을 어떻게 구현하시겠어요?"

지원자: "Sigstore를 활용합니다. CI에서 Cosign으로 컨테이너 이미지를 keyless 서명하고, slsa-github-generator로 SLSA L3 provenance를 생성합니다. Kubernetes에서는 Kyverno verifyImages로 서명된 이미지만 배포하도록 강제합니다."

리뷰어: "cosign verify에 --certificate-identity가 없으면 아무 서명이나 통과해요. 우리 워크플로만 허용하도록 추가해주세요."

작성자: "맞습니다. --certificate-identity와 --certificate-oidc-issuer 추가하겠습니다."

⚠️ 주의사항

📚 더 배우기