업데이트로 돌아가기
New releaseAug 6, 2026

cosign v3.1.3

컨테이너 및 바이너리를 위한 코드 서명 및 투명성

공유

Cosign logo

cosign

Sigstore를 사용하여 OCI 컨테이너(및 기타 아티팩트)에 서명하세요!

Go Report Card e2e-tests CII Best Practices OpenSSF Scorecard

Cosign은 서명을 보이지 않는 인프라로 만드는 것을 목표로 합니다.

Cosign이 지원하는 기능:

  • Sigstore 공공재 Fulcio 인증 기관과 Rekor 투명성 로그를 사용한 "키리스 서명" (기본값)
  • 하드웨어 및 KMS 서명
  • cosign으로 생성된 암호화된 개인/공개 키페어로 서명
  • OCI 레지스트리에서 컨테이너 서명, 검증 및 저장
  • 자체 PKI 사용(Bring-your-own PKI)

정보

Cosign은 sigstore 프로젝트의 일부로 개발되고 있습니다. 또한 slack 채널도 사용합니다! 초대 링크는 여기를 클릭하세요.

설치

Homebrew, Arch, Nix, GitHub Action 및 Kubernetes 설치에 대한 자세한 내용은 설치 문서를 참조하세요.

Linux 및 macOS 바이너리는 GitHub 릴리스 자산을 참조하세요.

🚨 GCS 버킷에서 cosign 릴리스를 다운로드하는 경우 2023년 7월 31일 지원 중단 공지에서 자세한 정보를 확인하세요. 🚨

개발자 설치

Go 1.22+가 있다면 개발 환경을 설정할 수 있습니다:```shell $ git clone https://github.com/sigstore/cosign $ cd cosign $ go install ./cmd/cosign $ $(go env GOPATH)/bin/cosign

## 기여

`cosign`에 기여하는 데 관심이 있으시면 [기여 문서](https://github.com/sigstore/cosign/blob/main/CONTRIBUTING.md)를 읽어 주세요.

향후 Cosign 개발은 [sigstore-go](https://github.com/sigstore/sigstore-go)를 기반으로 하는 다음 주요 릴리스에
집중될 것입니다. 유지 관리자는 sigstore-go 내의 기능 개발에 집중할 것입니다.
sigstore-go에 대한 기여, 특히 자체 키(bring-your-own keys) 및 서명과 관련된 기여를 환영합니다.
좋은 첫 이슈는 [이슈 트래커](https://github.com/sigstore/sigstore-go/issues)를 참조하세요.

Cosign 2.x는 안정적인 릴리스이며 계속해서 주기적인 기능 업데이트와 버그 수정을 받게 됩니다. 범위와 크기가 작은
PR은 가장 빠르게 검토될 가능성이 높습니다.

API를 크게 수정하거나 중단시키는 PR은 수락되지 않습니다. 크기는 크지만 호환성을 깨뜨리지 않는 PR은
수락될 수 있지만, sigstore-go의 PR보다 낮은 우선순위로 간주됩니다.

## Dockerfile

다음은 ghcr.io/sigstore/cosign/cosign 이미지를 통해 Dockerfile 내부에 cosign을 설치하고 사용하는 방법입니다:```shell
FROM ghcr.io/sigstore/cosign/cosign:v2.4.1 as cosign-bin

# Source: https://github.com/chainguard-images/static
FROM cgr.dev/chainguard/static:latest
COPY --from=cosign-bin /ko-app/cosign /usr/local/bin/cosign
ENTRYPOINT [ "cosign" ]

빠른 시작

다음 방법을 보여줍니다:

  • 기본 ID 기반 "키리스 서명" 방식으로 컨테이너 이미지 서명 (자세한 내용은 문서 참조)
  • 컨테이너 이미지 검증
  • Sigstore Cosign 빠른 시작에서 더 광범위한 키리스 blob 서명/검증 흐름 탐색

컨테이너 서명 및 레지스트리에 서명 저장

이미지는 태그(:latest)보다는 다이제스트(@sha256:...)를 기준으로 항상 서명해야 합니다. 그렇지 않으면 의도하지 않은 것을 서명할 수 있기 때문입니다!```shell cosign sign $IMAGE

Generating ephemeral keys... Retrieving signed certificate...

Note that there may be personally identifiable information associated with this signed artifact.
This may include the email address associated with the account with which you authenticate.
This information will be used for signing this artifact and will be stored in public transparency logs and cannot be removed later.

By typing 'y', you attest that you grant (or have permission to grant) and agree to have this information stored permanently in transparency logs. Are you sure you would like to continue? [y/N] y Your browser will now be opened to: https://oauth2.sigstore.dev/auth/auth?access_type=online&client_id=sigstore&code_challenge=OrXitVKUZm2lEWHVt1oQWR4HZvn0rSlKhLcltglYxCY&code_challenge_method=S256&nonce=2KvOWeTFxYfxyzHtssvlIXmY6Jk&redirect_uri=http%3A%2F%2Flocalhost%3A57102%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=2KvOWfbQJ1caqScgjwibzK2qJmb Successfully verified SCT... tlog entry created with index: 12086900 Pushing signature to: $IMAGE

Cosign은 OIDC를 통해 인증을 요청하며, 이메일 주소로 로그인하게 됩니다.
내부적으로 cosign은 Fulcio 인증 기관에서 코드 서명 인증서를 요청합니다.
인증서의 주체는 로그인한 이메일 주소와 일치합니다.
그런 다음 cosign은 서명과 인증서를 Rekor 투명성 로그에 저장하고, 서명하는 이미지와 함께 OCI 레지스트리에 서명을 업로드합니다.


### 컨테이너 검증

이미지를 검증하려면 `--certificate-identity` 및 `--certificate-oidc-issuer` 플래그를 통해 예상 인증서 주체와 인증서 발급자를 전달해야 합니다.```
cosign verify $IMAGE --certificate-identity=$IDENTITY --certificate-oidc-issuer=$OIDC_ISSUER

또한 인증서 ID 및 발급자 플래그에 대한 정규식을 전달할 수 있습니다, --certificate-identity-regexp 및 --certificate-oidc-issuer-regexp.

공개 키로 컨테이너 검증

이 명령은 이미지에 대해 공개 키와 일치하는 하나 이상의 cosign 형식 서명이 발견되면 0을 반환합니다. 다른 서명 형식에 대한 정보와 주의 사항은 아래의 자세한 사용법을 참조하십시오.

유효한 페이로드는 json 형식으로 stdout에 출력됩니다. 이 서명된 페이로드에는 컨테이너 이미지의 다이제스트가 포함되어 있으며, 이를 통해 이러한 "분리된" 서명이 올바른 이미지를 다루고 있음을 확신할 수 있습니다.```shell $ cosign verify --key cosign.pub $IMAGE_URI:1h The following checks were performed on these signatures:

  • The cosign claims were validated
  • The signatures were verified against the specified public key {"Critical":{"Identity":{"docker-reference":""},"Image":{"Docker-manifest-digest":"sha256:87ef60f558bad79beea6425a3b28989f01dd417164150ab3baab98dcbf04def8"},"Type":"cosign container image signature"},"Optional":null}
### 에어갭 환경에서 컨테이너 검증

**참고:** 이 섹션은 최신 상태가 아닙니다.

**참고:** 대부분의 검증 워크플로는 TUF 저장소에서 서비스 키를 주기적으로 요청해야 합니다.
public-good 인스턴스를 사용하여 서명을 에어갭 검증하려면 프로덕션 TUF 저장소에서
[trusted root](https://github.com/sigstore/root-signing/blob/main/targets/trusted_root.json) 파일을 검색해야 합니다.
이 파일의 내용은 통지 없이 변경될 수 있습니다. TUF를 사용하지 않는 경우, 이 파일의 에어갭 사본을
최신 상태로 유지하는 자체 메커니즘을 구축해야 합니다.

Cosign은 일반적으로 이미지 매니페스트의 주석으로 배포되는 [bundle](https://github.com/sigstore/cosign/blob/main/specs/SIGNATURE_SPEC.md#properties)을 검증하여 완전히 오프라인 검증을 수행할 수 있습니다.
이 주석이 존재하는 한 오프라인 검증을 수행할 수 있습니다.
이 번들 주석은 키리스 서명에 기본적으로 항상 포함되므로 기본 `cosign sign` 기능에는 오프라인 검증에 필요한 모든 자료가 포함됩니다.

에어갭 환경에서 이미지를 검증하려면 이미지와 서명이 로컬 파일 시스템에 있어야 합니다.

이미지는 `cosign save`를 사용하여 로컬에 저장할 수 있습니다 (참고: 이 단계는 네트워크 연결이 있는 상태에서 수행해야 합니다):```
cosign initialize # This will pull in the latest TUF root
cosign save $IMAGE_NAME --dir ./path/to/dir

이제 에어갭(air-gapped) 환경에서는 이 로컬 이미지를 검증할 수 있습니다:```shell cosign verify
--certificate-identity $CERT_IDENTITY
--certificate-oidc-issuer $CERT_OIDC_ISSUER
--offline=true
--new-bundle-format=false \ # for artifacts signed without the new protobuf bundle format --trusted-root ~/.sigstore/root/tuf-repo-cdn.sigstore.dev/targets/trusted_root.json \ # default location of trusted root --local-image ./path/to/dir

이 이미지를 올바르게 검증하려면 `$CERT_IDENTITY` 및 `$CERT_OIDC_ISSUER`에 대한 예상 값을 전달해야 합니다.
키페어로 서명한 경우, 공개 키 자료가 로컬에 존재한다면 동일한 명령이 작동합니다:```
cosign verify --key cosign.pub --offline --local-image ./path/to/dir

신원 기반 블롭 서명 및 검증

키 없는 블롭 서명(cosign sign-blob에서 --key 없이)을 사용하고 예상 서명자 신원을 기준으로 검증하세요:```shell $ cosign sign-blob artifact --bundle artifact.sigstore.json --yes $ cosign verify-blob artifact
--bundle artifact.sigstore.json
--certificate-identity "https://github.com/ORG/REPO/.github/workflows/release.yml@refs/heads/main"
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"

### 문제 해결

Cosign에 문제가 발생하면 먼저 최신 릴리스를 사용 중인지 확인하세요. Cosign 프로젝트는 가장 최신 릴리스와 v2 시리즈의 마지막 릴리스를 적극적으로 지원합니다.

#### 일반적인 문제 및 해결 방법

카테고리