SLSA provenance 사양
SLSA provenance 사양
GitLab이 생성하는 SLSA 레벨 3 provenance attestation이 정확히 어떤 구조인지, buildType 참조가 무엇을 의미하는지 궁금할 수 있어요. 이 문서는 GitLab SLSA provenance 문의 특정 필드를 소비자가 파싱할 때 참고할 수 있도록, SLSA 사양이 요구하는 buildType 참조를 설명합니다. 참고로 이 기능은 아직 실험(Experiment) 상태입니다.
출처: 문서
본문
-
Tier: Ultimate
-
Offering: GitLab.com
-
Status: Experiment
-
GitLab 18.3에서
slsa_provenance_statement라는 기능 플래그와 함께 도입됐어요. 기본적으로 비활성화되어 있죠.
이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 history를 참고하세요. 이 기능은 테스트용으로 제공되지만 아직 프로덕션 사용에는 적합하지 않아요.
SLSA provenance 사양은 buildType 참조가 문서화되고 게시되도록 요구합니다. 이 참조는 GitLab SLSA provenance 문에만 있는 특정 필드를 파싱할 때 GitLab SLSA attestation 소비자를 돕기 위한 것입니다.
자세한 내용은 SLSA buildType 문서를 참고하세요.
buildType
이 공식 SLSA Provenance buildType 참조는:
- GitLab CI/CD job의 실행을 설명해요.
- GitLab이 호스팅하고 유지 관리합니다.
설명
이 buildType은 소프트웨어 아티팩트를 빌드하는 워크플로의 실행을 설명해요.
소비자는 인식할 수 없는 외부 파라미터를 무시해야 합니다. 어떤 변경도 기존 외부 파라미터의 의미를 바꾸면 안 됩니다.
외부 파라미터
외부 파라미터는 다음과 같아요.
| 필드 | 값 | | source | 프로젝트의 URL | | entryPoint | 빌드를 트리거한 CI/CD job의 이름 | | variables | 빌드를 위한 다음 CI/CD 변수의 값: CI_PIPELINE_ID, CI_PIPELINE_URL, CI_JOB_ID, CI_JOB_URL, CI_JOB_NAME, CI_PROJECT_ID, CI_PROJECT_NAME |
내부 파라미터
기본적으로 채워지는 내부 파라미터는 다음과 같아요.
| 필드 | 값 | | name | 러너의 이름 | | executor | 러너의 executor | | architecture | CI/CD job이 실행되는 아키텍처 | | job | 빌드를 트리거한 CI/CD job의 ID |
예제
이 예제는 GitLab이 생성한 provenance 문의 형식을 보여줍니다.
{
"_type": "https://in-toto.io/Statement/v1",
"subject": [
{
"name": "artifacts.zip",
"digest": {
"sha256": "717a1ee89f0a2829cf5aad57054c83615675b04baa913bdc19999d7519edf3f2"
}
}
],
"predicateType": "https://slsa.dev/provenance/v1",
"predicate": {
"buildDefinition": {
"buildType": "<Link to Build Type>",
"externalParameters": {
"source": "http://gdk.test:3000/root/repo_name",
"entryPoint": "build-job",
"variables": {
"CI_PIPELINE_ID": "576",
"CI_PIPELINE_URL": "http://gdk.test:3000/root/repo_name/-/pipelines/576",
"CI_JOB_ID": "412",
"CI_JOB_URL": "http://gdk.test:3000/root/repo_name/-/jobs/987",
"CI_JOB_NAME": "job_name",
"CI_PROJECT_ID": "123",
"CI_PROJECT_NAME": "repo_name",
}
},
"internalParameters": {
"architecture": "arm64",
"executor": "docker",
"job": 412,
"name": "9-mfdkBG"
},
"resolvedDependencies": [
{
"uri": "http://gdk.test:3000/root/repo_name",
"digest": {
"gitCommit": "a288201509dd9a85da4141e07522bad412938dbe"
}
}
]
},
"runDetails": {
"builder": {
"id": "http://gdk.test:3000/groups/user/-/runners/33",
"version": {
"gitlab-runner": "4d7093e1"
}
},
"metadata": {
"invocationId": 412,
"startedOn": "2025-06-05T01:33:18Z",
"finishedOn": "2025-06-05T01:33:23Z"
}
}
}
}
더 알아보기 (Learn more)
attestation을 실제로 생성하고 확인하는 방법이 궁금하다면 SLSA 레벨 3 문서를 참고하세요. SLSA 전반의 레벨 체계는 SLSA 개요 문서에서 확인할 수 있어요.