Agent с воспроизводимой сборкой и криптографической подписью образа.
GitHub (исходники) → GitHub Actions → GHCR (подписанный image)
↓
пользователь верифицирует cosign + SLSA
Опубликованный образ: ghcr.io/zorph-io/blockmoon-agent
| Проверка | Инструмент | Что доказывает |
|---|---|---|
| Подпись образа | Cosign (keyless, OIDC) | Образ собран доверенным GitHub Actions workflow |
| Provenance | SLSA v1 | Образ собран из конкретного коммита в этом репозитории |
| Reproducible build | Pinned base digest + SOURCE_DATE_EPOCH |
Одинаковый исходный код → одинаковый digest (при фиксированном toolchain) |
Установите Cosign:
# macOS
brew install cosignПо умолчанию пакеты GHCR приватные. cosign verify читает манифест и подписи из registry — без доступа будет UNAUTHORIZED.
Вариант A (рекомендуется): сделать пакет публичным
- Packages →
blockmoon-agent - Package settings → Change visibility → Public
После этого verify работает без логина.
Вариант B: авторизоваться (PAT с scope read:packages)
export GHCR_USERNAME="<your-github-username>"
export GHCR_TOKEN="$(gh auth token)" # или classic PAT
./scripts/verify-image.sh ghcr.io/zorph-io/blockmoon-agent:latestИли через Docker:
echo "$GHCR_TOKEN" | docker login ghcr.io -u "$GHCR_USERNAME" --password-stdin
./scripts/verify-image.sh ghcr.io/zorph-io/blockmoon-agent:latestchmod +x scripts/verify-image.sh
./scripts/verify-image.sh ghcr.io/zorph-io/blockmoon-agent:latestИли вручную:
# 1. Подпись (keyless, GitHub OIDC)
cosign verify ghcr.io/zorph-io/blockmoon-agent:latest \
--certificate-oidc-issuer=https://token.actions.githubusercontent.com \
--certificate-identity-regexp='^https://github.com/zorph-io/blockmoon-agent/.github/workflows/'
# 2. SLSA provenance — image = конкретный коммит
cosign verify-attestation ghcr.io/zorph-io/blockmoon-agent:latest \
--type slsaprovenance \
--certificate-oidc-issuer=https://token.actions.githubusercontent.com \
--certificate-identity-regexp='^https://github.com/zorph-io/blockmoon-agent/.github/workflows/'Рекомендуется проверять по digest, а не по тегу:
docker pull ghcr.io/zorph-io/blockmoon-agent@sha256:<digest>
./scripts/verify-image.sh ghcr.io/zorph-io/blockmoon-agent@sha256:<digest>Digest публикуется в GitHub Actions summary после каждого билда.
docker build \
--build-arg SOURCE_DATE_EPOCH=$(git log -1 --format=%ct) \
-t blockmoon-agent:local .
docker run --rm blockmoon-agent:localWorkflow .github/workflows/docker-publish.yml запускается при:
- push в
main(тегlatest+ sha) - push тега
v*(semver-теги)
Шаги: build → push GHCR → cosign sign → SLSA attestation.
- Settings → Actions → General → Workflow permissions — Read and write permissions
- Settings → Actions → General — включить Allow GitHub Actions to create and approve pull requests (для attestations)
- Сделайте пакет GHCR публичным (см. раздел «Верификация образа»), иначе пользователям нужен
read:packagesтокен
cargo build --release
./target/release/blockmoon-agent --version