
Подписание кода и прозрачность для контейнеров и бинарных файлов
Подписывание OCI-контейнеров (и других артефактов) с помощью Sigstore!
Cosign стремится сделать подписи невидимой инфраструктурой.
Cosign поддерживает:
Cosign разрабатывается в рамках проекта sigstore.
Мы также используем канал в Slack!
Нажмите здесь, чтобы получить ссылку-приглашение.
Для установки через Homebrew, Arch, Nix, GitHub Action и Kubernetes см. документацию по установке.
Для бинарных файлов Linux, macOS и Windows см. ресурсы релизов на GitHub.
🚨 Если вы загружаете релизы cosign из нашего бакета GCS — пожалуйста, ознакомьтесь с дополнительной информацией в уведомлении об устаревании от 31 июля 2023 г. 🚨
Если у вас установлен Go 1.22+, вы можете настроить среду разработки:
$ git clone https://github.com/sigstore/cosign
$ cd cosign
$ go install ./cmd/cosign
$ $(go env GOPATH)/bin/cosign
Если вы заинтересованы в участии в разработке cosign, пожалуйста, прочитайте документацию по участию.
Будущая разработка Cosign будет сосредоточена на следующем крупном релизе, который будет основан на sigstore-go. Сопровождающие сосредоточатся на разработке функций в sigstore-go. Вклад в sigstore-go, особенно в части собственных ключей и подписывания, приветствуется. Пожалуйста, ознакомьтесь с трекером задач в поисках подходящих первых задач.
Cosign 2.x — это стабильный релиз, который продолжит получать периодические обновления функций и исправления ошибок. PR, небольшие по объёму и масштабу, с наибольшей вероятностью будут быстро рассмотрены.
PR, которые существенно изменяют или нарушают API, не будут приняты. PR, значительные по размеру, но не вносящие критических изменений, могут быть приняты, но будут считаться менее приоритетными, чем PR в sigstore-go.
Вот как установить и использовать cosign внутри Dockerfile через образ ghcr.io/sigstore/cosign/cosign:
FROM ghcr.io/sigstore/cosign/cosign:v2.4.1 as cosign-bin
# Source: https://github.com/chainguard-images/images/tree/main/images/static
FROM cgr.dev/chainguard/static:latest
COPY --from=cosign-bin /ko-app/cosign /usr/local/bin/cosign
ENTRYPOINT [ "cosign" ]
Здесь показано, как:
Обратите внимание, что всегда следует подписывать образы на основе их дайджеста (@sha256:...),
а не тега (:latest), потому что иначе вы можете подписать не то, что
намеревались!
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
Вы также можете передать регулярное выражение для флагов идентификатора сертификата и издателя: --certificate-identity-regexp и --certificate-oidc-issuer-regexp.
Эта команда возвращает 0, если для образа найдена хотя бы одна подпись в формате cosign,
соответствующая открытому ключу.
Подробности использования и предостережения относительно других форматов подписей см. ниже.
Все допустимые полезные нагрузки выводятся в stdout в формате json. Обратите внимание, что эти подписанные полезные нагрузки включают дайджест образа контейнера, что позволяет убедиться, что эти «отсоединённые» подписи относятся к правильному образу.
$ 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}
Примечание: Этот раздел устарел.