Files
llm-wiki/raw/official-docs/cosign-keyless-identity-verification-policy.md
T

107 lines
10 KiB
Markdown

---
title: Cosign Keyless Identity Verification Policy
source_type: official-doc
status: raw
confidence: high
url: https://docs.sigstore.dev/cosign/verifying/verify/
archive_url:
tags: [ca-supply-chain, cosign, sigstore, keyless, identity-verification]
related_projects: [ca-skeleton-operational-contract]
related_branches: [feature-build-release-supply-chain-contract]
created: 2026-05-22
last_reviewed: 2026-05-27
---
# Cosign Keyless Identity Verification Policy
> Layer: `raw/official-docs/` — Sigstore Cosign 공식 docs (`docs.sigstore.dev`) 의 keyless verify 명령 + identity 매칭 flag verbatim 발췌. ca-tmpl 의 "Cosign keyless signing 의무" 결정 누락분 (identity 매칭 정책) 의 보강 근거.
## Parent / 활용 branch (필수)
| Branch | 이 자료가 정당화하는 결정 |
|---|---|
| [[raw/branch-notes/feature-build-release-supply-chain-contract]] | "Cosign keyless signing 의무, signature 없이 deploy forbidden" 의 보강 — keyless 모드는 `--certificate-identity` + `--certificate-oidc-issuer` 가 필수임을 박는다. (G-E 후속 보강) |
## 컨텍스트 / 왜 저장했는지
ca-tmpl `feature-build-release-supply-chain-contract` branch 가 "Cosign keyless signing 의무, signature 없이 deploy forbidden" 까지만 결정하고 **identity 매칭 정책** (`--certificate-identity` + `--certificate-oidc-issuer`) 을 누락한 것이 G-E 후속 보강 항목으로 식별됐다. Sigstore 공식 문서가 keyless 모드에서 두 flag 의 사용을 명시 제시하므로, signature 존재 검증만으로는 임의의 OIDC identity 가 만든 서명도 통과할 수 있다는 사고 시나리오를 외부 근거로 박아두기 위함.
## 출처 / Source
- 원본 URL: https://docs.sigstore.dev/cosign/verifying/verify/
- 보조 출처: https://github.com/sigstore/cosign/issues/3671 (cosign verify 키리스 검증 시 identity flag 강제 동작 확인 — sigstore/cosign issue tracker)
- 보조 출처: https://www.qcecuring.com/blog/sigstore-cosign-keyless-github-actions (GitHub Actions OIDC identity 포맷 — 3rd-party blog, **참고용**)
- 아카이브 URL: (미수집)
- 저자 / 조직: Sigstore project (Linux Foundation)
- 발행일: docs.sigstore.dev 현행 문서 (fetch 일자 2026-05-22, 재확인 2026-05-27)
- 마지막 확인일: 2026-05-27
## 핵심 인용 / Key quotes (verbatim)
> [§Verifying Signatures — identity-based verification command] "cosign verify <image URI> --certificate-identity=name@example.com --certificate-oidc-issuer=https://accounts.example.com"
> [§OIDC Issuer Endpoints] "Google: https://accounts.google.com" + "Microsoft: https://login.microsoftonline.com" + "GitHub: https://github.com/login/oauth" + "GitLab: https://gitlab.com"
> [§Identity flag 강제 — sigstore/cosign Issue #3671 (보조 출처)] "--certificate-identity or --certificate-identity-regexp is required for verification in keyless mode"
> [§Keyless 모델 — Sigstore docs paraphrase] 키리스 검증은 identity-based approach (OIDC issuer 와 결합) 를 사용하며, signing service 는 long-term key 가 아닌 short-lived credential 을 통해 identity 와 signature 를 연결한다. (docs.sigstore.dev 본문 요약 — verbatim "keyless signing" 정의 문장은 본 verify 페이지에 단독 존재하지 않으며, 본 인용은 페이지가 시사하는 모델 정리.)
> [§GitHub Actions OIDC subject 형식 — 3rd-party blog 보조 출처] GitHub Actions OIDC 로 서명된 image 의 expected `--certificate-identity` 는 워크플로 경로 + git ref 형식: `https://github.com/<ORG>/<REPO>/.github/workflows/<WORKFLOW-FILE>@refs/heads/<BRANCH>` (또는 `@refs/tags/<TAG>`).
## Claims Extracted / 추출된 주장
| Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove |
|---|---|---|---|---|---|
| CSIGN-KL-C1 | identity-based 검증의 cosign verify 명령은 `--certificate-identity=<subject>``--certificate-oidc-issuer=<issuer URL>` 두 flag 를 함께 사용 | [§Verifying Signatures] "cosign verify <image URI> --certificate-identity=name@example.com --certificate-oidc-issuer=https://accounts.example.com" | `official-vendor-doc` | Sigstore Cosign keyless 검증 | 두 flag 가 모든 cosign verify 모드에서 강제라는 뜻은 아님 — key-based 검증은 `--key` 사용 (별도 모드) |
| CSIGN-KL-C2 | Sigstore docs 가 제시하는 OIDC issuer 예시 URL: Google = `https://accounts.google.com`, Microsoft = `https://login.microsoftonline.com`, GitHub (사람 사용자) = `https://github.com/login/oauth`, GitLab = `https://gitlab.com` | [§OIDC Issuer Endpoints] "Google: https://accounts.google.com" + "Microsoft: https://login.microsoftonline.com" + "GitHub: https://github.com/login/oauth" + "GitLab: https://gitlab.com" | `official-vendor-doc` | 사람 사용자 OIDC issuer 매칭 | GitHub Actions OIDC token issuer (`https://token.actions.githubusercontent.com`) 와 동일하지 않음 — CI 환경은 별도 issuer URL 사용 (docs verify 페이지에 명시 없음 — 보조 출처 / 별도 docs 확인 필요) |
| CSIGN-KL-C3 | keyless 모드에서 `--certificate-identity` (또는 `--certificate-identity-regexp`) 는 검증에 필수 | [§sigstore/cosign Issue #3671] "--certificate-identity or --certificate-identity-regexp is required for verification in keyless mode" | `needs-confirmation` | Sigstore Cosign keyless verify | 본 인용은 cosign issue tracker (보조 출처) 기반. 공식 docs 가 동일 문장으로 명시했는지는 별도 확인 필요. `--certificate-oidc-issuer` 가 동일하게 필수인지도 별도 확인 필요 |
| CSIGN-KL-C4 | Sigstore 키리스 모델 = identity-based verification + short-lived credentials (long-term key 미사용) | [§Keyless 모델] (docs paraphrase) 키리스 검증은 identity-based approach 를 사용하며 long-term key 가 아닌 short-lived credential 을 통해 identity 와 signature 를 연결 | `needs-confirmation` | Sigstore Cosign keyless 일반 모델 이해 | 본 인용은 verify 페이지 paraphrase 이며 verbatim "keyless signing" 정의 문장 출처는 별도 페이지 (Fulcio 등). 본 자료만으로 Fulcio 의 정확한 동작을 증명하지 않음 |
### Strength 근거
- `CSIGN-KL-C1`, `CSIGN-KL-C2`: `official-vendor-doc` — Sigstore docs.sigstore.dev 공식 verify 페이지 verbatim
- `CSIGN-KL-C3`: `needs-confirmation` — issue tracker 기반. 공식 docs 동일 문장 확인 필요
- `CSIGN-KL-C4`: `needs-confirmation` — verify 페이지 paraphrase, 정의 문장 출처 별도 페이지 확인 필요
## Usage Boundaries / 적용 경계
- **이 자료가 직접 증명하는 것**:
- `CSIGN-KL-C1`: identity-based verify 의 정확한 cosign 명령 구문 (두 flag 함께 사용)
- `CSIGN-KL-C2`: 사람 사용자 OIDC issuer URL 의 정확한 형식
- **이 자료가 증명하지 않는 것**:
- 두 flag (`--certificate-identity` + `--certificate-oidc-issuer`) 가 keyless 모드에서 모두 hard-required 라는 cosign CLI 동작 (issue tracker 기반 보조 출처. 본 docs 페이지는 권장 예시로만 제시. 1차 공식 인용 확인 필요)
- GitHub Actions OIDC 의 정확한 expected `--certificate-identity` 포맷 (보조 출처 / GitHub OIDC docs 별도 확인 필요)
- Kubernetes admission controller (Sigstore policy-controller / Kyverno) 의 정확한 verify rule 구문 (별도 admission controller docs)
- Cosign 이 사용하는 DSSE envelope signing 알고리즘 (별도 sigstore docs)
- **내 프로젝트에 적용하려면 추가 확인이 필요한 것**:
- ca-tmpl deploy gate 가 GitHub Actions OIDC 기반인 경우, expected identity 의 정확한 워크플로 경로 + ref 매칭 규칙
- Cosign CLI 의 정확한 fail-fast 동작 (identity mismatch 시 exit code 등)
- admission controller 또는 Kyverno 정책 syntax 의 expected identity/issuer 선언 방식
## 메모 / Notes (내 프로젝트 해석)
> 본 섹션은 자료 직접 인용 아님. ca-tmpl 결정 컨텍스트 해석.
- 키리스 검증의 두 강제 flag (cosign CLI 동작 + Sigstore docs 결합 권장):
- `--certificate-identity=<expected subject>` (또는 `--certificate-identity-regexp`)
- `--certificate-oidc-issuer=<expected issuer URL>` (또는 `--certificate-oidc-issuer-regexp`)
- 둘 중 하나만 검사하면 우회 가능 (사고 모델):
- issuer 만 검사 → 같은 IdP 사용자라면 누구든 통과 (예: 같은 GitHub org 의 다른 repo workflow 도 통과)
- identity 만 검사 → IdP 가 임의여도 통과 (예: 동일 subject 문자열을 발급하는 다른 OIDC IdP)
- 클러스터 단 강제: Kubernetes admission controller (Sigstore policy-controller, Kyverno `verifyImages` 룰) 에서 expected identity/issuer 를 정책으로 선언해 unsigned + identity-mismatch image 를 admission 단계에서 차단.
- ca-tmpl 약식 표현 정정 필요 지점: 단순 "Cosign signature 누락 차단" 이 아니라 "Cosign signature + identity 매칭 차단".
- 본 파일은 docs.sigstore.dev fetch 결과 + sigstore/cosign issue tracker + 정리 블로그 교차 확인으로 작성. 인용은 Sigstore 공식 docs 1차 출처를 우선으로 표기 (CSIGN-KL-C1, C2). 보조 출처 기반 claim 은 `needs-confirmation` 으로 표기 (C3, C4).
## Related / 관련
- 같은 주제 다른 official-doc:
- [[raw/official-docs/supply-chain-slsa-provenance-framework]] (SLSA build level + provenance)
- [[raw/official-docs/slsa-v1-provenance-schema]] (in-toto Statement / DSSE envelope subject)
- 인용하는 branch:
- [[raw/branch-notes/feature-build-release-supply-chain-contract]] — Cosign keyless 의무 결정의 원천 branch-note. identity 매칭 정책 누락이 본 문서 작성 trigger
- 인용하는 project-note:
- [[raw/project-notes/ca-skeleton-operational-contract]] — Contract Registry (canonical SSOT). 본 보강은 supply chain contract 항목에 반영되어야 함
- 인용하는 wiki:
- [[wiki/concepts/devops-ci-supply-chain-dx]] — 한계/주의점 섹션 Cosign 항목과 직접 연결
- [[wiki/projects/ca-tmpl/devops-ci-supply-chain-dx]] — documented-only/planned 섹션 보강 대상