Skip to content

Как подписывать Docker images

Коротко:

Cosign — open-source инструмент (Sigstore project) для cryptographic signing container images. Supply chain security essential в 2026. Keyless mode — использует OIDC (GitHub Actions / Google / Microsoft) вместо long-lived keys. Verify: cosign verify --certificate-identity=... image. SLSA (Supply-chain Levels for Software Artifacts) level 3 комплаенс достижим с cosign + GitHub Actions.

Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.

Попробовать бесплатно →

Пошаговая настройка

  1. brew install cosign или скачать binary
  2. Keyless sign (recommended): cosign sign --yes ghcr.io/me/app:v1
  3. Browser открывается для OIDC auth (GitHub/Google)
  4. Cosign обращается к Sigstore Fulcio для short-lived cert
  5. Signature + cert сохраняется в OCI registry как sidecar image
  6. Verify: cosign verify image --certificate-identity=user@example.com
  7. Kubernetes: sigstore-policy-controller admission webhook блокирует unsigned images

Рабочие примеры

СценарийКонфиг
GitHub Actions keyless sign# .github/workflows/release.yml permissions: id-token: write # OIDC для cosign packages: write - name: Sign image run: | cosign sign --yes \ ghcr.io/${{ github.repository }}:${{ github.sha }}
Verify signed imagecosign verify \ --certificate-identity-regexp='.+@example.com' \ --certificate-oidc-issuer=https://token.actions.githubusercontent.com \ ghcr.io/me/app:v1
Kubernetes policy-controllerapiVersion: policy.sigstore.dev/v1beta1 kind: ClusterImagePolicy metadata: name: enforce-signed spec: images: [ { glob: 'ghcr.io/me/*' } ] authorities: - keyless: identities: - issuer: https://token.actions.githubusercontent.com subjectRegExp: '.+'
Key-based (legacy)# Generate key pair $ cosign generate-key-pair # Sign with private key $ cosign sign --key cosign.key ghcr.io/me/app:v1 # Verify with public $ cosign verify --key cosign.pub ghcr.io/me/app:v1
SBOM attach + sign# Generate SBOM $ syft ghcr.io/me/app:v1 -o spdx-json > sbom.json # Attach + sign atomically $ cosign attest --predicate sbom.json --type spdx \ ghcr.io/me/app:v1

Типичные ошибки

  • Keyless = identity лимитирован OIDC provider uptime. Для strict enterprise — keys via KMS
  • Без admission controller в K8s — signed images не enforced. Deploy sigstore-policy-controller
  • Old cosign v1 не совместим с v2 verify. Use v2.0+ в 2026
  • CI без id-token permission — keyless не работает. permissions: id-token: write обязательно
  • Registry без cosign support (private self-host) — signatures stored но verify может не работать
ЗаголовкиCSP, HSTS, X-Frame-Options и др.
SSL/TLSШифрование и сертификат
КонфигурацияСерверные настройки и утечки
Оценка A-FОбщий балл безопасности

Почему нам доверяют

OWASP
рекомендации
15+
заголовков безопасности
<2с
результат
A–F
оценка безопасности

Как это работает

1

Введите URL сайта

2

Анализ заголовков безопасности

3

Получите оценку A–F

Что проверяет анализ безопасности?

Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.

Анализ заголовков

Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.

Проверка SSL

Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.

Обнаружение утечек

Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.

Отчёт с рекомендациями

Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.

Кому это нужно

Специалисты по безопасности

аудит HTTP-заголовков

DevOps

проверка конфигурации

Разработчики

CSP и HSTS настройка

Аудиторы

соответствие стандартам

Частые ошибки

Нет Content-Security-PolicyCSP — главная защита от XSS. Без него инъекция скриптов значительно проще.
Нет заголовка HSTSБез HSTS возможна downgrade-атака с HTTPS на HTTP. Включите Strict-Transport-Security.
Server header раскрывает версиюServer: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.
X-Frame-Options не установленСайт можно встроить в iframe для clickjacking-атаки. Установите DENY или SAMEORIGIN.
Нет X-Content-Type-OptionsБез nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).

Лучшие практики

Начните с базовых заголовковМинимум: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy. Займёт 5 минут.
Внедрите CSP постепенноНачните с Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.
Скройте серверные заголовкиУдалите Server, X-Powered-By, X-AspNet-Version из ответов.
Настройте Permissions-PolicyОграничьте доступ к камере, микрофону, геолокации — только то, что реально используется.
Проверяйте после каждого деплояЗаголовки безопасности могут быть перезаписаны при обновлении конфигурации сервера.

Получите больше с бесплатным аккаунтом

История security-проверок и мониторинг HTTP-заголовков безопасности.

Зарегистрироваться (FREE)

Больше по теме

Часто задаваемые вопросы

Зачем signing images?

Supply chain attacks (SolarWinds, xz) показали: untrusted images = RCE. Signing доказывает "это image was built by X CI". SLSA level 3 требует.

Keyless vs key-based?

Keyless: no key management, OIDC-based, suitable для most. Key-based: offline signing, для air-gapped, requires key storage (HSM / KMS).

SBOM — что?

Software Bill of Materials. syft / Trivy генерируют list packages в image. Combined с cosign attest — creates attested SBOM.

Admission в K8s?

sigstore-policy-controller (preferred 2025+) или Kyverno с cosign verify. Block unsigned images or wrong signer.