SLSA 레벨 3 provenance attestation
SLSA 레벨 3 provenance attestation
SLSA(Supply-chain Levels for Software Artifacts)의 레벨 3는 레벨 1·2보다 한 단계 더 강화된 요구 사항을 담고 있어요. 특히 격리(isolation)와 "위조 불가(unforgeable)" 요건이 핵심 차이점입니다. 이 글에서는 GitLab이 SLSA 레벨 3 호환 provenance attestation(생산 이력 증명)을 어떻게 생성하는지, 전제 조건부터 아티팩트·컨테이너별 attestation 생성 방법, 확인(verify) 방법까지 설명할게요. 참고로 이 기능은 아직 실험(Experiment) 상태예요.
출처: 문서
본문
-
Tier: Ultimate
-
Offering: GitLab.com
-
Status: Experiment
-
GitLab 18.3에서
slsa_provenance_statement라는 기능 플래그와 함께 도입됐어요. 기본적으로 비활성화되어 있죠.
이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 history를 참고하세요. 이 기능은 테스트용으로 제공되지만 아직 프로덕션 사용에는 적합하지 않아요.
GitLab은 SLSA 레벨 3 호환 provenance attestation을 생성할 수 있어요. 레벨 2와 레벨 3 provenance attestation의 핵심 차이는 격리와 "위조 불가" 요구 사항입니다.
attestation의 세부 사항은 GitLab SLSA provenance 사양을 참고하세요.
전제 조건
컨테이너 또는 아티팩트의 attestation에 대해 다음 조건이 충족되어야 해요.
- 빌드와 연결된 프로젝트가 공개(public)여야 해요. Rekor로 정보가 실수로 노출되는 것을 막기 위한 요구 사항입니다.
- 빌드가
build스테이지를 사용해야 해요. - 프로젝트에
slsa_provenance_statement기능 플래그가 활성화되어 있어야 해요.
아티팩트에 대한 attestation 생성
빌드가 생성한 모든 아티팩트에 대한 attestation을 생성하려면:
ATTEST_BUILD_ARTIFACTSCI/CD 변수를true로 설정하세요.- 아티팩트가 100 MB를 초과하면 안 돼요.
예를 들어 GitLab은 이 CI/CD job의 아티팩트에 대한 attestation을 생성합니다.
build-job:
stage: build
variables:
ATTEST_BUILD_ARTIFACTS: true
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
- echo "Hello, $GITLAB_USER_LOGIN!" > test.txt
artifacts:
paths:
- test.txt
컨테이너에 대한 attestation 생성
컨테이너에 대한 attestation을 생성하려면:
ATTEST_CONTAINER_IMAGES CI/CD 변수를 true로 설정하세요.
IMAGE_DIGEST 변수를 유효한 SHA256 참조로 설정하세요. 형식은 다음과 같습니다.
sha256:9bf00f5090086aba643d21f8ed663576855add63b7b780b4eaffc5124812c3c9
org/project-name@sha256:9bf00f5090086aba643d21f8ed663576855add63b7b780b4eaffc5124812c3c9
9bf00f5090086aba643d21f8ed663576855add63b7b780b4eaffc5124812c3c9
예를 들어 GitLab은 이 CI/CD job에서 만든 이미지에 대한 attestation을 생성합니다.
build-dockerhub:
stage: build
variables:
ATTEST_CONTAINER_IMAGES: true
CI_REGISTRY: docker.io
DOCKER_IMAGE_NAME: sroqueworcel/test-slsa-sbom:stable
script:
- echo $DOCKER_REGISTRY_PASSWORD | docker login $CI_REGISTRY -u $DOCKER_REGISTRY_USER --password-stdin
- docker build -t $DOCKER_IMAGE_NAME .
- docker push $DOCKER_IMAGE_NAME
- IMAGE_DIGEST="$(docker inspect --format='{{index .Id}}' "$DOCKER_IMAGE_NAME")"
- echo "IMAGE_DIGEST=$IMAGE_DIGEST" >> build.env
artifacts:
reports:
dotenv: build.env
attestation 보기
성공한 attestation은 attestations 페이지에 저장돼요. attestation을 보려면:
- 상단 바에서
Search or go to를 선택해 프로젝트를 찾으세요. - 왼쪽 사이드바에서 Build > Attestations를 선택하세요.
attestation이 성공하지 못하면 CI/CD job 로그에 오류가 표시됩니다.
Attestations API로 성공한 attestation을 가져올 수도 있어요.
attestation 확인
glab 명령줄 인터페이스로 아티팩트와 컨테이너를 모두 확인할 수 있어요. 예를 들어:
성공적인 확인:
% glab attestation verify ~/file-or-container -p org/project-name
Artifact provenance successfully verified. Signatures confirm file.txt was attested by org/project-name
실패한 확인:
% glab attestation verify ~/file.txt -p org/project-name
ERROR
Unable to find a provenance statement for 1f9e5808a340916aa5618ee13a893dcf9d4f7e2d42a254be0f7eb06a094ab8ea.
더 알아보기 (Learn more)
attestation이 담고 있는 필드의 구조와 의미를 자세히 알고 싶다면 SLSA provenance 사양 문서를 참고하세요. 레벨 2와의 차이를 다시 확인하려면 SLSA 개요 문서로 돌아가 보세요.