Harbor 封面圖:開源的雲原生容器映像檔倉庫

Harbor:自架容器映像檔倉庫,用漏洞掃描守住供應鏈

內容概述

Harbor 是 CNCF 的開源雲原生映像檔倉庫(Registry),提供映像檔儲存、簽章與漏洞掃描功能。

它在 Docker Registry 的基礎上加入專案權限、稽核、複寫與安全政策,適合自架私有映像檔倉庫,守住容器的供應鏈安全。

應用場景

Harbor 適用於需要管理容器映像檔的企業和開發團隊,特別是在以下情境中:

  • 需要私有的映像檔倉庫來儲存和分發內部映像檔。
  • 需要對映像檔進行漏洞掃描,並阻擋有高風險漏洞的映像檔被拉取。
  • 需要以角色為基礎的存取控制(RBAC),管理不同使用者對映像檔的操作權限。
  • 需要在多個倉庫之間進行映像檔的複寫和同步。

技術特點

  • 安全性:支援 Cosign/Notation 映像檔簽章、可插拔的漏洞掃描器(預設搭配 Trivy)和 RBAC,確保映像檔的安全性和完整性。
  • 管理功能:支援使用者管理、專案管理、稽核日誌與垃圾回收(Garbage Collection),方便組織和追蹤映像檔。
  • 身分驗證:可整合 LDAP/AD 與 OIDC 單一登入。
  • 部署彈性:可用 Docker Compose 安裝在單台主機,或用官方 Helm Chart 部署到 Kubernetes。
  • 多倉庫複寫:可依政策與其他倉庫(如 Docker Hub、其他 Harbor)複寫映像檔,並提供 RESTful API 方便與 CI/CD 整合。

安裝步驟

以下是在 Linux 主機上以 Docker Compose 安裝 Harbor 的步驟。官方最低需求為 2 CPU、4 GB 記憶體、40 GB 硬碟(建議 4 CPU、8 GB、160 GB),並需 Docker Engine 20.10 以上與 Docker Compose 2.3 以上。

  1. 從 GitHub 下載安裝包(以 v2.15.4 為例,請以 Releases 頁面 的最新版本為準):
wget https://github.com/goharbor/harbor/releases/download/v2.15.4/harbor-online-installer-v2.15.4.tgz
wget https://github.com/goharbor/harbor/releases/download/v2.15.4/harbor-online-installer-v2.15.4.tgz.sigstore.json
  1. (建議)用 Cosign 驗證安裝包確實來自官方建置。Harbor 從 v2.15.0 起為安裝包簽章,驗證成功會顯示 Verified OK:
cosign verify-blob \
  --bundle harbor-online-installer-v2.15.4.tgz.sigstore.json \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp '^https://github.com/goharbor/harbor/.github/workflows/publish_release.yml@refs/tags/v.*$' \
  harbor-online-installer-v2.15.4.tgz
  1. 解壓縮,並複製設定檔:
tar xzvf harbor-online-installer-v2.15.4.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml
vi harbor.yml

在設定檔中,將 hostname 設為您的網域或 IP 位址,並務必修改 harbor_admin_password(預設 Harbor12345)與 database 的 password(預設 root123)。正式環境請一併設定 https 區塊的憑證路徑。

  1. 執行安裝腳本。預設安裝不包含 Trivy 漏洞掃描器,若要使用漏洞掃描,請加上 --with-trivy:
sudo ./install.sh --with-trivy

安裝完成後,您應該會看到類似以下的訊息:

✔ ----Harbor has been installed and started successfully.----
  1. 使用瀏覽器開啟 https://<您的主機名稱>,以 admin 和您在 harbor_admin_password 設定的密碼登入。注意:harbor_admin_password 只在第一次啟動時生效,之後請在 Harbor 介面中修改管理員密碼。

存取和操作

安裝完成後,先在 Harbor 介面建立專案(例如 myproject),再透過以下步驟將映像檔推送到 Harbor:

  1. 使用 Docker 登入 Harbor:
docker login <您的主機名稱>
  1. 為您的映像檔加上標籤:
docker tag <本機映像檔> <您的主機名稱>/<專案名稱>/<映像檔名稱>:<標籤>
  1. 推送映像檔到 Harbor:
docker push <您的主機名稱>/<專案名稱>/<映像檔名稱>:<標籤>

若 Harbor 使用 HTTPS,Docker 用戶端需信任 Harbor 的憑證;若只用 HTTP 測試,需在 /etc/docker/daemon.json 的 insecure-registries 加入 Harbor 位址並重新啟動 Docker,正式環境不建議這樣做。

漏洞掃描

以 --with-trivy 安裝後即可使用 Trivy 掃描映像檔,也可以在「Interrogation Services」中連接其他相容的掃描器。常用設定如下:

  • 手動掃描:進入專案的「Repositories」分頁,選取映像檔後按「Scan Vulnerability」,即可在「Vulnerabilities」欄位看到掃描狀態與結果。
  • 推送時自動掃描:在專案的「Configuration」分頁勾選「Automatically scan images on push」,新推送的映像檔會立即掃描。
  • 阻擋有漏洞的映像檔:勾選「Prevent vulnerable images from running」並選擇嚴重度門檻,達到或超過該等級的映像檔將無法被拉取。
  • 定期掃描:系統管理員可在「Interrogation Services」設定排程,定期重新掃描所有映像檔,及早發現新公布的漏洞。

映像檔簽章

Harbor 透過 Cosign 與 Notation 支援映像檔簽章,簽章會以附屬物(Accessory)的形式和映像檔一起存放與複寫。以 Cosign 為例,官方文件的簽章方式如下(需先在本機安裝 cosign 並產生金鑰):

cosign generate-key-pair
cosign sign --key cosign.key <您的主機名稱>/<專案名稱>/<映像檔名稱>:<標籤>

簽章後,可在 Harbor 介面中展開該映像檔,查看附屬的簽章。若要強制「只能拉取已簽章的映像檔」,請在專案的「Configuration」分頁勾選 Cosign 或 Notation 部署政策並儲存。

注意:Cosign v3 起預設改用新的 bundle 格式,並以 OCI 1.1 referrer 存放容器簽章;若在 Harbor 介面看不到簽章,請先對照 Harbor 與 Cosign 的官方文件確認版本相容性。

小技巧

  • 一定要啟用 HTTPS:映像檔倉庫會存放帳號密碼與內部程式,對外開放前請設定 HTTPS,並限制只有內網或 VPN 能存取管理介面。
  • 定期更新:定期更新 Harbor 和相關元件,確保取得最新的功能和安全修補;升級前先備份資料庫與設定檔。
  • 善用專案與角色:利用 Harbor 的專案和角色功能,實現對映像檔的精細化管理;CI/CD 請使用權限最小的機器人帳號(Robot Account)。
  • 清理空間:刪除映像檔後要執行垃圾回收,才會真正釋放磁碟空間。

教學影片

影片來源:Engineering with Morris/YouTube

參考連結

成本與風險摘要

  • 適用對象與規模:需要私有映像檔倉庫、並重視漏洞掃描與簽章的團隊;單台主機以 Docker Compose 即可運作,需要高可用時改用 Kubernetes 上的 Helm Chart。
  • 成本(硬體、訂閱、授權):軟體以 Apache-2.0 授權免費使用;硬體最低 2 CPU、4 GB 記憶體、40 GB 硬碟,映像檔越多,儲存空間需求越大。
  • 維護時間:需定期升級、備份資料庫、執行垃圾回收,並更新 Trivy 漏洞資料庫。
  • 資安注意事項:修改預設的管理員與資料庫密碼、啟用 HTTPS、開啟推送時自動掃描與漏洞阻擋政策、使用機器人帳號給 CI/CD。
  • 常見誤區:以為預設安裝就有漏洞掃描(實際需加 --with-trivy);只修改登入後的管理員密碼,卻忘了 harbor.yml 中的資料庫密碼。
  • 不建議使用的情況:只有少量個人映像檔、沒有人力維護時,使用雲端服務商的託管倉庫可能更省事。
  • 測試日期與版本號:資料查核日期:2026-10-28;Harbor v2.15.4、Cosign v3.1.4。
返回頂端