- Published on
DevSecOps: Sign Image (ký image) giải thích dễ hiểu cho người mới
- Authors
- Name
- Bạch Đăng Tuấn
- Occupation
- Kỹ sư công nghệ thông tin
- Zalo: 0934.01.07.04
🔐 Ký Docker Image là gì?
Ký Image (image signing) là quá trình gắn chữ ký số vào file image sau khi build, giống như bạn đóng dấu xác nhận rằng:
- Đây là image chính chủ bạn build ra.
- Không ai sửa hoặc chèn mã độc vào sau đó.
- Có thể kiểm tra được ai là người ký image đó.
🧱 Quá trình ký image nằm ở đâu trong DevSecOps?
Ký image xảy ra ở giai đoạn giữa CI/CD pipeline – sau khi build, trước khi đẩy (push) image lên registry.
⚙️ Mô hình đơn giản:
[Giai đoạn phát triển]
↓
🔍 Quét mã (SAST, Dependency Scan)
↓
🐳 Build Docker Image
↓
✅ Ký image (Cosign ký file image bằng private key)
↓
📦 Push lên Docker Hub / GHCR / Registry riêng
↓
🚀 Triển khai ra môi trường (Kubernetes, ...)
🎯 Tại sao phải ký Docker Image?
Lý do | Ý nghĩa |
---|---|
✅ Xác thực nguồn gốc | Đảm bảo image do bạn build, không phải kẻ xấu tạo |
✅ Phát hiện thay đổi | Nếu ai đó sửa image → chữ ký sẽ không khớp |
✅ Tăng độ tin cậy | DevOps team, QA, production có thể verify chính xác |
✅ Bảo mật chuỗi cung ứng | Giúp bảo vệ supply chain từ đầu đến cuối |
🧰 Dùng công cụ gì để ký?
Phổ biến nhất hiện nay là:
✅ Cosign (thuộc dự án Sigstore)
- Ký image bằng:
- Khóa riêng (private key)
- Hoặc không cần khóa (OIDC: GitHub Actions, Google, etc.)
- Dễ tích hợp vào CI/CD
📦 Ví dụ:
# Tạo khóa
cosign generate-key-pair
# Ký image sau khi build
cosign sign --key cosign.key myrepo/myapp:v1
# Kiểm tra chữ ký
cosign verify --key cosign.pub myrepo/myapp:v1
🚦 Tích hợp vào CI/CD như thế nào?
Trong pipeline, bạn thêm bước ký sau khi build:
🔧 Ví dụ (GitHub Actions):
- name: Đăng nhập Registry
run: docker login ...
- name: Build image
run: docker build -t myrepo/myapp:${{ github.sha }} .
- name: Ký image với Cosign
run: cosign sign --key cosign.key myrepo/myapp:${{ github.sha }}
- name: Push image
run: docker push myrepo/myapp:${{ github.sha }}
🧠 Tổng kết
Nội dung | Chi tiết |
---|---|
Khi nào ký? | Sau khi build, trước khi push image |
Dùng gì để ký? | Cosign, Sigstore, Notary v2 |
Lợi ích | Bảo mật, xác thực, chống giả mạo |
Tích hợp vào đâu? | CI/CD pipeline (GitHub Actions, GitLab CI, Jenkins,...) |
Cần học thêm gì? | Cosign, SBOM, Supply Chain Security, SLSA framework |
📚 Tài liệu tham khảo
- https://sigstore.dev
- https://github.com/sigstore/cosign
- https://slsa.dev
- https://docs.docker.com/notary/
Bảo mật không phải là phần cuối cùng – nó là phần giữa và xuyên suốt quá trình DevOps. Ký image là bước không thể thiếu để đảm bảo niềm tin trong CI/CD.