Quay lại danh sách
Tin tức công nghệ

Xây dựng Private Docker Registry bảo mật cao với Harbor và ký số Container Image bằng Cosign

14 tháng 6, 2026

1. Đặt vấn đề: Thách thức bảo mật chuỗi cung ứng phần mềm trong kỷ nguyên Cloud Native

Trong kỷ nguyên chuyển đổi số và kiến trúc vi dịch vụ (Microservices), Docker và Kubernetes đã trở thành những tiêu chuẩn không thể thay thế. Tuy nhiên, việc quản lý và phân phối hàng nghìn container image trong môi trường doanh nghiệp đặt ra những thách thức lớn về an ninh mạng. Khi mã nguồn và ứng dụng được đóng gói thành các image, làm thế nào để đảm bảo rằng các image này không bị giả mạo, chèn mã độc hoặc rò rỉ ra bên ngoài trong suốt quá trình từ CI/CD cho đến khi chạy trên môi trường Production?

Sử dụng các Public Registry như Docker Hub mang lại sự tiện lợi, nhưng lại không đáp ứng được các tiêu chuẩn khắt khe về quyền riêng tư, kiểm soát truy cập và tốc độ băng thông nội bộ của doanh nghiệp. Đây là lý do tại sao việc xây dựng một Private Docker Registry là bước đi chiến lược bắt buộc đối với các tổ chức tài chính, ngân hàng, thương mại điện tử và các doanh nghiệp công nghệ lớn.

Bài viết này sẽ hướng dẫn bạn cách xây dựng một hệ thống Private Registry chuẩn doanh nghiệp bằng cách kết hợp Harbor – nền tảng quản lý artifact mạnh mẽ thuộc Cloud Native Computing Foundation (CNCF) – và Cosign (thuộc dự án Sigstore) để thực hiện ký số, xác thực container image, giúp hoàn thiện mảnh ghép quan trọng trong mô hình DevSecOps.

2. Harbor và Cosign là gì? Tại sao nên kết hợp hai công cụ này?

Harbor: Nền tảng Private Registry chuẩn doanh nghiệp

Harbor là một mã nguồn mở registry giúp lưu trữ, ký và quét các artifact (Docker Image, Helm Chart). Khác với các registry cơ bản, Harbor cung cấp các tính năng cao cấp dành riêng cho doanh nghiệp:

  • Quản lý quyền truy cập (RBAC): Tích hợp mượt mà với hệ thống định danh sẵn có của doanh nghiệp như LDAP hoặc Active Directory.
  • Quét lỗ hổng bảo mật (Vulnerability Scanning): Tự động quét các image bằng Trivy để phát hiện mã độc hoặc thư viện lỗi thời trước khi cho phép deploy.
  • Chính sách sao chép (Replication Policy): Hỗ trợ đồng bộ hóa dữ liệu giữa các trung tâm dữ liệu (Data Center) hoặc các vùng Cloud khác nhau để đảm bảo tính sẵn sàng cao.

Cosign: Chuẩn mực mới cho việc ký số Container Image

Cosign là một công cụ nằm trong hệ sinh thái Sigstore, được thiết kế để đơn giản hóa quy trình ký số (signing) và xác thực (verification) các artifact. Trước đây, Docker Content Trust (Notary v1) thường rất phức tạp để cấu hình và vận hành. Cosign ra đời như một giải pháp thay thế hoàn hảo nhờ các ưu điểm:

  • Không cần hạ tầng lưu trữ khóa (Key Management) quá phức tạp ở phía server; chữ ký được lưu trữ trực tiếp như một artifact song song với container image ngay trên Harbor.
  • Tích hợp dễ dàng vào các pipeline CI/CD hiện đại như GitHub Actions, GitLab CI, hay Jenkins.
  • Hỗ trợ cơ chế không cần khóa (Keyless signing) thông qua giao thức OpenID Connect (OIDC).

Sự kết hợp hoàn hảo: Khi tích hợp Cosign vào Harbor, doanh nghiệp không chỉ có một kho lưu trữ bảo mật mà còn thiết lập được một "trạm kiểm soát". Chỉ những container image đã được ký số bởi các kỹ sư hoặc hệ thống CI/CD được ủy quyền mới được phép đẩy lên (push) hoặc tải về (pull) để chạy trên cụm Kubernetes.

3. Hướng dẫn các bước triển khai chi tiết

Bước 1: Chuẩn bị hạ tầng và cài đặt Harbor

Để triển khai Harbor, bạn cần một máy chủ Linux (Ubuntu Server 22.04 LTS hoặc mới hơn) đã cài đặt sẵn Docker và Docker Compose. Hãy đảm bảo bạn đã cấu hình tên miền (Domain Name) và chứng chỉ SSL (Let's Encrypt hoặc chứng chỉ nội bộ của doanh nghiệp) vì Harbor bắt buộc sử dụng HTTPS để đảm bảo an toàn dữ liệu truyền tải.

  1. Tải bản phân phối Harbor mã nguồn mở từ GitHub chính thức.
  2. Giải nén và cấu hình tệp harbor.yml: Khai báo hostname, đường dẫn đến chứng chỉ SSL (crt và key), và mật khẩu quản trị viên.
  3. Chạy lệnh ./install.sh để kích hoạt Harbor cùng với các thành phần như Trivy scanner.
Lưu ý quan trọng: Luôn luôn thay đổi mật khẩu mặc định của cơ sở dữ liệu và tài khoản admin ngay sau khi cài đặt thành công để tránh các rủi ro bị rà quét mật khẩu trong mạng nội bộ.

Bước 2: Cài đặt Cosign trên môi trường local hoặc CI/CD

Để bắt đầu ký ứng dụng, các kỹ sư DevOps cần cài đặt công cụ CLI của Cosign trên máy trạm hoặc cấu hình trong runner của pipeline. Việc cài đặt vô cùng đơn giản bằng lệnh tải trực tiếp bản binary từ Sigstore hoặc sử dụng các trình quản lý gói như Homebrew (macOS) hoặc apt (Linux).

Bước 3: Khởi tạo cặp khóa ký số (Keypair)

Sử dụng Cosign để tạo ra một cặp khóa công khai (public key) và khóa bí mật (private key). Khóa bí mật sẽ được dùng để ký image (phải được giữ bí mật tuyệt đối, có thể lưu trữ trong Vault), còn khóa công khai sẽ dùng để xác thực.

Khi chạy lệnh khởi tạo, Cosign sẽ yêu cầu bạn nhập một chuỗi mật khẩu (passphrase) để mã hóa khóa bí mật. Hãy lưu giữ chuỗi này cẩn thận.

Bước 4: Quy trình Ký số và Push Image lên Harbor

Quy trình chuẩn hóa trong chuỗi DevSecOps sẽ diễn ra như sau:

  1. Build image: Kỹ sư tiến hành đóng gói ứng dụng thành một Docker image với tag cụ thể (ví dụ: [hub.company.com/production/web-app:v1.0](https://hub.company.com/production/web-app:v1.0)).
  2. Login và Push: Đăng nhập vào Harbor Private Registry bằng lệnh docker login và thực hiện push image lên hệ thống. lúc này image đã nằm trên Harbor nhưng chưa có chữ ký.
  3. Ký số với Cosign: Chạy lệnh ký số của Cosign bằng cách chỉ định đường dẫn tới file khóa bí mật và đường dẫn của image vừa push trên Harbor. Hệ thống sẽ tính toán mã hash của image, ký bằng khóa bí mật và đẩy phần chữ ký (signature) lên Harbor dưới dạng một OCI artifact phụ thuộc.

4. Cấu hình xác thực tự động trên Kubernetes (Admission Controller)

Xây dựng kho lưu trữ và ký số mới chỉ là điều kiện cần. Điều kiện đủ là làm sao ngăn chặn triệt để việc deploy các image lậu, image chưa qua kiểm duyệt lên cụm Production của Kubernetes. Để làm được điều này, chúng ta sử dụng một thành phần gọi là Kyverno hoặc Policy Controller trên Kubernetes.

Các công cụ này hoạt động như một Admission Controller. Khi có một yêu cầu tạo Pod mới, Kyverno sẽ chặn yêu cầu đó lại, lấy thông tin container image, sử dụng khóa công khai (Public Key) mà chúng ta đã cấu hình sẵn để kiểm tra xem image đó đã được ký bởi Cosign hay chưa. Nếu chữ ký hợp lệ và trùng khớp, Pod sẽ được khởi tạo. Ngược lại, yêu cầu sẽ bị từ chối ngay lập tức kèm theo thông báo lỗi rõ ràng hệ thống.

5. Kết luận và các khuyến nghị bảo mật nâng cao

Xây dựng hệ thống Private Docker Registry với Harbor và Cosign là một giải pháp toàn diện, giúp doanh nghiệp làm chủ hoàn toàn kho lưu trữ artifact của mình và bảo vệ chuỗi cung ứng phần mềm khỏi các cuộc tấn công tinh vi. Việc triển khai này không chỉ nâng cao tính bảo mật mà còn giúp doanh nghiệp tuân thủ các tiêu chuẩn quốc tế nghiêm ngặt như ISO 27001 hoặc SOC 2.

Để hệ thống hoạt động tối ưu và an toàn nhất, doanh nghiệp nên áp dụng thêm các khuyến nghị sau:

  • Quản lý khóa tập trung: Thay vì lưu file khóa bí mật thủ công, hãy tích hợp Cosign với các dịch vụ KMS chuyên dụng như HashiCorp Vault, AWS KMS hoặc Google Cloud KMS.
  • Tự động hóa hoàn toàn: Tích hợp bước ký số Cosign vào giai đoạn cuối cùng của pipeline CI/CD (sau khi image đã pass qua bước quét lỗ hổng bảo mật của Trivy).
  • Bật tính năng Immutable Tags: Cấu hình trên Harbor để ngăn chặn việc ghi đè lên các tag image cũ (như tag latest), tránh việc làm sai lệch lịch sử phiên bản và chữ ký số.