- Added security/audit-all-containers.sh: Automated Trivy scan for all 60+ project images - Added security/hardening/signed-images.md: Guide for Docker Content Trust (DCT) - Updated NODE1 with audit script and started background scan - Results will be saved to /opt/microdao-daarion/logs/audits/ Co-authored-by: Cursor Agent <agent@cursor.sh>
87 lines
3.6 KiB
Markdown
87 lines
3.6 KiB
Markdown
# 🔏 Docker Content Trust (DCT) — Signed Images Guide
|
||
|
||
**Мета:** Гарантувати, що в системі запускаються тільки перевірені та підписані образи.
|
||
|
||
---
|
||
|
||
## 🎯 Що таке Docker Content Trust?
|
||
|
||
DCT дозволяє використовувати цифрові підписи для даних, що надсилаються та отримуються з віддалених Docker реєстрів. Це гарантує:
|
||
1. **Integrity:** Образ не був змінений.
|
||
2. **Publisher:** Образ підписаний саме вами.
|
||
3. **Freshness:** Ви використовуєте останню версію підписаного образу.
|
||
|
||
---
|
||
|
||
## 🚀 Налаштування DCT
|
||
|
||
### 1. Увімкнення DCT (Local & Server)
|
||
|
||
Додайте змінну оточення у ваш `.zshrc` або `.bashrc`:
|
||
|
||
```bash
|
||
export DOCKER_CONTENT_TRUST=1
|
||
```
|
||
|
||
Після цього Docker буде блокувати будь-які операції з непідписаними образами.
|
||
|
||
### 2. Генерація ключів підпису
|
||
|
||
При першій спробі підписати образ, Docker згенерує ключі:
|
||
- **Root key:** Головний ключ (зберігайте в безпечному місці!).
|
||
- **Repository key:** Ключ для конкретного репозиторію.
|
||
|
||
### 3. Підписання образу при Push
|
||
|
||
Якщо `DOCKER_CONTENT_TRUST=1`, команда `docker push` автоматично підпише образ:
|
||
|
||
```bash
|
||
docker push your-registry/image:tag
|
||
```
|
||
|
||
### 4. Налаштування NODE1 для перевірки
|
||
|
||
На сервері NODE1 обов'язково увімкніть перевірку:
|
||
|
||
```bash
|
||
# /etc/environment
|
||
DOCKER_CONTENT_TRUST=1
|
||
```
|
||
|
||
Тепер `docker pull` або `docker compose up` завершаться помилкою, якщо образ не має валідного підпису.
|
||
|
||
---
|
||
|
||
## 🛠️ Інтеграція в CI/CD (GitHub Actions)
|
||
|
||
Використовуйте `cosign` — сучасний стандарт підпису контейнерів від Sigstore.
|
||
|
||
```yaml
|
||
- name: Install Cosign
|
||
uses: sigstore/cosign-installer@main
|
||
|
||
- name: Sign the images
|
||
run: |
|
||
cosign sign --key ${{ secrets.COSIGN_PRIVATE_KEY }} your-registry/image:tag
|
||
env:
|
||
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Стратегія переходу для DAARION
|
||
|
||
| Етап | Дія | Результат |
|
||
|------|-----|-----------|
|
||
| 1. Audit | Прогнати повний аудит поточних образів | Розуміння вразливостей |
|
||
| 2. Local Setup | Увімкнути `DOCKER_CONTENT_TRUST=1` локально | Тільки підписані білди |
|
||
| 3. Registry | Використовути приватний реєстр (GitHub GHCR) | Безпечне сховище |
|
||
| 4. Server Policy | Увімкнути примусову перевірку на NODE1 | Блокування непідписаного malware |
|
||
|
||
---
|
||
|
||
## ⚠️ Важливі застереження
|
||
|
||
1. **Втрата ключів:** Якщо ви втратите Root key, ви не зможете керувати підписами репозиторію. **Зробіть бекап `~/.docker/trust`!**
|
||
2. **Third-party images:** Офіційні образи (nginx, postgres) підписані Docker. Але деякі специфічні образи можуть не мати підписів. Для них потрібно буде створювати власні підписані версії.
|