키 없는 서명 및 검증에 Sigstore 사용
GitLab CI/CD에서 Cosign과 Sigstore를 사용해 컨테이너 이미지와 빌드 아티팩트를 키 없이 서명하고 검증하는 방법을 설명합니다.
Sigstore 프로젝트는 Cosign 이라는 CLI를 제공하며, 이 CLI는 GitLab CI/CD로 빌드한 컨테이너 이미지에 대해 키 없는 서명을 수행하는 데 사용할 수 있습니다. 키 없는 서명에는 개인 키를 관리, 보호, 교체할 필요가 없어진다는 것을 비롯해 여러 이점이 있습니다. Cosign은 서명에 사용할 단기(short-lived) 키 쌍을 요청하고, 이를 인증서 투명성 로그(certificate transparency log)에 기록한 뒤 폐기합니다. 이 키는 파이프라인을 실행한 사용자의 OIDC ID를 사용해 GitLab 서버에서 획득한 토큰을 통해 생성됩니다. 이 토큰에는 해당 토큰이 CI/CD 파이프라인에서 생성되었음을 증명하는 고유한 클레임(claim)이 포함됩니다. 자세한 내용은 키 없는 서명에 대한 Cosign 문서 를 참조합니다. GitLab OIDC 클레임과 Fulcio 인증서 확장 항목 간의 매핑에 대한 자세한 내용은 OIDC 토큰 클레임과 Fulcio OID 매핑 문서의 GitLab 열을 참조합니다. 셀프 호스팅 Sigstore 인프라를 사용하는 GitLab Self-Managed의 경우 셀프 호스팅 Sigstore로 아티팩트 및 컨테이너 이미지 서명 을 참조합니다. 사전 요구 사항: GitLab.com을 사용하고 있어야 합니다. 프로젝트의 CI/CD 설정 파일이 해당 프로젝트 내에 있어야 합니다. Cosign을 사용해 컨테이너 이미지 및 빌드 아티팩트 서명 또는 검증 # Cosign을 사용해 컨테이너 이미지와 빌드 아티팩트를 서명하고 검증할 수 있습니다. 사전 요구 사항: Cosign >= 2.0.1 버전을 사용해야 합니다. 알려진 문제 CI/CD 설정 파일의 id_tokens 부분은 빌드 및 서명 대상 프로젝트 내에 있어야 합니다. Auto DevOps, 다른 리포지터리에서 포함(include)한 CI 파일, 하위 파이프라인(child pipeline)은 지원되지 않습니다. 이 제약을 제거하는 작업은 에픽 11637 에서 추적하고 있습니다. 모범 사례 : 서명되기 전에 변조되는 것을 방지하기 위해 이미지/아티팩트는 동일한 job에서 빌드하고 서명합니다. 컨테이너 이미지에 서명할 때는 태그 대신 불변(immutable)값인 다이제스트(digest)에 서명합니다. GitLab ID 토큰 은 Cosign의 키 없는 서명 에 사용할 수 있습니다. 이때 토큰의 aud 클레임이 sigstore 로 설정되어 있어야 합니다. 토큰을 SIGSTORE_ID_TOKEN 환경 변수에 설정하면 Cosign이 이를 자동으로 사용할 수 있습니다. Cosign 설치 방법에 대한 자세한 내용은 Cosign 설치 문서 를 참조합니다. 서명 # 컨테이너 이미지 # Cosign.gitlab-ci.yml 템플릿을 사용하면 GitLab CI에서 컨테이너 이미지를 빌드하고 서명할 수 있습니다. 서명은 이미지와 동일한 컨테이너 리포지터리에 자동으로 저장됩니다. include: - template: Cosign.gitlab-ci.yml 컨테이너 서