Цепочки поставок программного обеспечения становятся всё сложнее и чаще подвергаются атакам, поэтому безопасность образов контейнеров становится фундаментальным требованием для обеспечения доверия в современных конвейерах доставки.
Подписывая образы с помощью Cosign и защищая ключи подписи в OVHcloud KMS, команды могут хранить криптографические материалы вне локальных сред и переменных CI/CD, одновременно упрощая контроль, аудит и интеграцию подписи образов в конвейеры доставки.
В этой статье вы узнаете, как использовать плагин OVHcloud KMS для Cosign: сгенерировать ключ, подписать им образ контейнера и проверить, что OCI-образ был подписан корректно.
Cosign
Cosign — это инструмент из проекта Sigstore, используемый для подписи, проверки и подтверждения OCI-образов контейнеров и артефактов программного обеспечения.
Cosign поддерживает несколько режимов подписи, включая keyless-подпись через Sigstore (где краткосрочные сертификаты генерируются во время подписи на основе вашей учётной записи — GitHub, Google или другой OIDC-провайдер), а также генерацию эфемерных ключей, подпись с использованием аппаратных модулей и KMS, а также интеграцию с собственной PKI.
Cosign поддерживает множество KMS-провайдеров для генерации и подписи ключей. Поддерживаются несколько внешних KMS, включая HashiCorp Vault, AWS KMS, GCP KMS и Azure Key Vault.
Теперь Cosign также можно интегрировать с OVHcloud KMS с помощью плагина Sigstore Cosign OVHcloud KMS 💪.
OVHcloud Key Management Service (KMS)
OVHcloud KMS, часто называемый OKMS, — это управляемый сервис, централизующий создание, хранение и управление ключами шифрования. Его основная цель — помочь компаниям защищать данные и контролировать криптографические операции с единой платформы.
Каждый KMS привязан к региону, поэтому ключи, хранящиеся в этом регионе, гарантированно остаются в нём. Вы можете заказать несколько KMS, как в разных регионах, так и в одном регионе.
Предварительные требования
Чтобы использовать провайдер Sigstore KMS OVHcloud, необходимо выполнить следующие предварительные условия:
- Иметь учётную запись OVHcloud
- Создать домен OKMS (например, «
305db938-1234-5678-9012-3a0a29291661» в этой статье) - Создать локального пользователя IAM (например, «cosign-
305db938-1234-5678-9012-3a0a29291661» в этой статье) - Установить OVHcloud CLI
- Установить uuidgen CLI
💡Плагин cosign для OVHcloud поддерживает аутентификацию как с помощью token, так и с помощью mTLS. В рамках этой статьи мы будем использовать режим аутентификации по токену. Если вы хотите использовать режим mTLS, следуйте руководству Sigstore Cosign KMS plugin for OVHcloud.
Генерация PAT-токена (только для аутентификации по токену)
Выведите список доменов OKMS:
$ ovhcloud okms list
┌──────────────────────────────────────┬─────────────┐
│ id │ region │
├──────────────────────────────────────┼─────────────┤
│ 305db938-1234-5678-9012-3a0a29291661 │ eu-west-par │
│ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │ eu-west-par │
└──────────────────────────────────────┴─────────────┘
Сохраните ID OKMS в переменную окружения:
export KMS_RESTAPI_OKMSID="305db938-1234-5678-9012-3a0a29291661"
Плагин cosign OVHcloud требует разрешения на создание и получение ключей из OVHcloud KMS.
Если вы хотите использовать аутентификацию по токену, вам понадобится токен (PAT). Вы можете сделать это с помощью ovhcloud CLI:
PAT_TOKEN=$(ovhcloud iam user token create <iam-local-user-name> --name pat-<iam-local-user-name> --description "PAT cosign for domain $KMS_RESTAPI_OKMSID" -o json | jq .details.token | tr -d '"')
echo $PAT_TOKEN
Результат должен выглядеть примерно так:
$ PAT_TOKEN=$(ovhcloud iam user token create cosign-305db938-1234-5678-9012-3a0a29291661 --name pat-cosign-305db938-1234-5678-9012-3a0a29291661 --description "PAT cosign for domain 305db938-1234-5678-9012-3a0a29291661" -o json | jq .details.token | tr -d '"')
2026/05/07 08:48:34 Final parameters:
{
"description": "PAT cosign for domain 305db938-1234-5678-9012-3a0a29291661",
"name": "pat-cosign-305db938-1234-5678-9012-3a0a29291661"
}
$ echo $PAT_TOKEN
eyJhbGciOiJFZE...ASgXy55_DDFHdy4Z5uSq8lww-Bw
Сохранение информации о KMS
Сохраните информацию о KMS в переменные окружения. Например:
export KMS_RESTAPI_ENDPOINT=$(ovhcloud okms get $KMS_RESTAPI_OKMSID -o json | jq .restEndpoint | xargs)
export KMS_RESTAPI_TYPE="token"
export KMS_RESTAPI_TOKEN=$PAT_TOKEN
Отобразите сохранённую информацию:
$ echo $KMS_RESTAPI_ENDPOINT
https://eu-west-par.okms.ovh.net
$ echo $KMS_RESTAPI_OKMSID
305db938-1234-5678-9012-3a0a29291661
$ echo $KMS_RESTAPI_TYPE
token
$ echo $KMS_RESTAPI_TOKEN
eyJ...BIoHCA
Установка плагина Cosign KMS
Установите плагин локально:
curl -fsSL https://raw.githubusercontent.com/ovh/sigstore-kms-ovhcloud/main/install.sh | sh
⚠️ По умолчанию бинарный файл устанавливается в $HOME/.local/bin (создаётся, если не существует). Убедитесь, что этот каталог есть в вашем PATH.
Или воспользуйтесь другими способами установки.
Теперь вы можете использовать плагин OVHcloud KMS непосредственно в команде cosign 🎉.
Давайте используем Cosign с OVHcloud KMS!
Генерация ключа
Сначала, чтобы подписать образ, нам нужно сгенерировать пару ключей. Для этого сгенерируем UUID и используем его в команде cosign generate-key-pair.
export KEY_ID=$(uuidgen)
cosign generate-key-pair --kms ovhcloud://$KEY_ID
Ключ подписи создаётся в OVHcloud KMS, а открытый ключ записывается локально.
Вы должны увидеть вывод примерно такого вида:
$ export KEY_ID=$(uuidgen)
$ cosign generate-key-pair --kms ovhcloud://$KEY_ID
Public key written to cosign.pub
Команда генерирует пару ключей с использованием алгоритма ECDSA и записывает открытый ключ в cosign.pub.
Проверьте, что ключи были созданы:
$ ls -l cosign.pub
-rw------- 1 avache staff 178 18 juin 16:06 cosign.pub
$ cat cosign.pub
-----BEGIN PUBLIC KEY-----
MFkw...QgwA==
-----END PUBLIC KEY-----
После того как пара ключей сгенерирована, используйте соответствующий ID ключа OVHcloud KMS в URI ovhcloud://$KEY_ID при подписи и проверке образов.
Или получите существующий открытый ключ (необязательно)
Вместо создания нового открытого ключа вы можете получить существующий с помощью следующей команды:
cosign public-key --key ovhcloud://$KEY_ID --outfile cosign-ovhcloud.pub
Подпишите образ
Замените параметр $IMAGE@sha256:$HASH на URI вашего образа и его хэш, затем выполните эту команду:
cosign sign --key ovhcloud://$KEY_ID $IMAGE@sha256:$HASH
Вы должны увидеть примерно такой вывод:
$ cosign sign --key ovhcloud://$KEY_ID 12345678.c1.de1.container-registry.ovh.net/my-project/my-image@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Проверьте, что образ подписан
cosign verify --key ovhcloud://$KEY_ID $IMAGE@sha256:$HASH
Вы должны увидеть примерно такой вывод:
$ cosign verify --key ovhcloud://$KEY_ID 12345678.c1.de1.container-registry.ovh.net/my-project/my-image@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Verification for 12345678.c1.de1.container-registry.ovh.net/my-project/my-image@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx --
The following checks were performed on each of these signatures:
- The cosign claims were validated
- Existence of the claims in the transparency log was verified offline
- The signatures were verified against the specified public key
[{"critical":{"identity":{"docker-reference":"12345678.c1.de1.container-registry.ovh.net/my-project/my-image@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"},"image":{"docker-manifest-digest":"sha256:b1202...2334e2"},"type":"https://sigstore.dev/cosign/sign/v1"},"optional":{}}]
Заключение
В этой записи блога мы показали, как использовать Cosign с плагином OVHcloud KMS для генерации ключевой пары, подписи контейнерного образа и проверки его подписи.
Храня ключи подписи в управляемом KMS, команды могут сократить распространение секретов, защитить конфиденциальный криптографический материал и упростить интеграцию подписи образов в безопасные CI/CD-процессы.

Комментарии
Категории
Случайное

Выделенный аккаунт-менеджер для

Yoast или Surfer SEO: какой инструмент

WordPress 6.9: Полный гид по финальному

Как включить GZIP-сжатие в WordPress и
