溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

harbor容器安全工具介紹

發(fā)布時(shí)間:2020-05-25 17:32:22 來(lái)源:億速云 閱讀:295 作者:鴿子 欄目:云計(jì)算

harbor: 
  Harbor是構(gòu)建企業(yè)級(jí)私有docker鏡像的倉(cāng)庫(kù)的開(kāi)源解決方案,它是Docker Registry的更高級(jí)封裝,它除了提供友好的Web UI界面,角色和用戶(hù)權(quán)限管理,用戶(hù)操作審計(jì)等功能外,它還整合了K8s的插件(Add-ons)倉(cāng)庫(kù),即Helm通過(guò)chart方式下載,管理,安裝K8s插件,而chartmuseum可以提供存儲(chǔ)chart數(shù)據(jù)的倉(cāng)庫(kù)【注:helm就相當(dāng)于k8s的yum】。另外它還整合了兩個(gè)開(kāi)源的安全組件,一個(gè)是Notary,另一個(gè)是Clair,Notary類(lèi)似于私有CA中心,而Clair則是容器安全掃描工具,它通過(guò)各大廠商提供的CVE漏洞庫(kù)來(lái)獲取最新漏洞信息,并掃描用戶(hù)上傳的容器是否存在已知的漏洞信息,這兩個(gè)安全功能對(duì)于企業(yè)級(jí)私有倉(cāng)庫(kù)來(lái)說(shuō)是非常具有意義的。
 補(bǔ)充:
  Nexus 是Maven倉(cāng)庫(kù)管理器,如果你使用Maven,你可以從Maven中央倉(cāng)庫(kù) 下載所需要的構(gòu)件(artifact),但這通常不是一個(gè)好的做法,你應(yīng)該在本地架設(shè)一個(gè)Maven倉(cāng)庫(kù)服務(wù)器,在代理遠(yuǎn)程倉(cāng)庫(kù)的同時(shí)維護(hù)本地倉(cāng)庫(kù),以節(jié)省帶寬和時(shí)間,Nexus就可以滿(mǎn)足這樣的需要。此外,他還提供了強(qiáng)大的倉(cāng)庫(kù)管理功能,構(gòu)件搜索功能,它基于REST,友好的UI是一個(gè)extjs的REST客戶(hù)端,它占用較少的內(nèi)存,基于簡(jiǎn)單文件系統(tǒng)而非數(shù)據(jù)庫(kù)。這些優(yōu)點(diǎn)使其日趨成為最流行的Maven倉(cāng)庫(kù)管理器。

     Notary是一個(gè)允許任何人信任任意數(shù)據(jù)集合的項(xiàng)目。Notary項(xiàng)目包括服務(wù)器和客戶(hù)端,用于運(yùn)行和與可信集合交互。Notary旨在通過(guò)讓人們輕松發(fā)布和驗(yàn)證內(nèi)容,使互聯(lián)網(wǎng)更加安全。我們經(jīng)常依靠TLS來(lái)保護(hù)我們與Web服務(wù)器的通信,這本身就存在缺陷,因?yàn)榉?wù)器被攻破時(shí)可使惡意內(nèi)容替代合法內(nèi)容。借助Notary,發(fā)布商可以使用保持高度安全的密鑰離線(xiàn)簽署其內(nèi)容。一旦發(fā)布者準(zhǔn)備好內(nèi)容,他們可以將他們簽名的可信集合推送到Notary服務(wù)器。消費(fèi)者通過(guò)安全渠道獲得了發(fā)布者的公鑰,然后可以與任何Notary服務(wù)器或(不安全)鏡像進(jìn)行通信,僅依靠發(fā)布者的密鑰來(lái)確定接收內(nèi)容的有效性和完整性。Notary基于TUF項(xiàng)目,一個(gè)針對(duì)軟件分發(fā)和更新問(wèn)題的安全通用設(shè)計(jì)。

  Clair:
   參考: https://blog.csdn.net/liumiaocn/article/details/76697022
   通過(guò)對(duì)容器的layer進(jìn)行掃描,發(fā)現(xiàn)漏洞并進(jìn)行預(yù)警,其使用數(shù)據(jù)是基于Common Vulnerabilities and Exposures數(shù)據(jù)庫(kù)(簡(jiǎn)稱(chēng)CVE), 各Linux發(fā)行版一般都有自己的CVE源,而Clair則是與其進(jìn)行匹配以判斷漏洞的存在與否,比如HeartBleed的CVE為:CVE-2014-0160。 

  harbor容器安全工具介紹

  目前Clair支持如下數(shù)據(jù)源:

  harbor容器安全工具介紹

 

HARBOR:
  這是VMWare公司提供的一個(gè)docker私有倉(cāng)庫(kù)構(gòu)建程序,功能非常強(qiáng)大.
    1. 支持多租戶(hù)簽名和認(rèn)證
    2. 支持安全掃描和風(fēng)險(xiǎn)分析
    3. 這次日志審計(jì)
    4. 基于角色的訪問(wèn)控制
    5. 支持可擴(kuò)展的API和GUI
    6. Image replication between instances
    7. 國(guó)際化做的很好(目前僅支持英文和中文)

 Harbor部署:
  1. 從GitHub上下載Harbor的二進(jìn)制發(fā)行包.
  2. 準(zhǔn)備必要的環(huán)境:
    yum install docker-ce docker-compose

  3. 解壓后,先編輯harbor.cfg
    vim harbor.cfg
      hostname = node1.test.com
      ui_url_protocol = http 
      max_job_workers = 3    #啟動(dòng)3個(gè)處理用戶(hù)上傳下載的進(jìn)程,若為4核,3個(gè)就是最好的。
      admiral_url = NA      #NA:不自定義管理URL
      harbor_admin_password = Harbor12345    #默認(rèn)的管理員密碼

      #默認(rèn)它會(huì)自動(dòng)創(chuàng)建一個(gè)mysql容器,并設(shè)置mysql的root密碼為root123,
      #注意:從harbor v1.7.5以后使用的數(shù)據(jù)庫(kù)默認(rèn)是postgresql
      db_password = root123
      #若想讓其使用外部數(shù)據(jù)庫(kù),可修改下面參數(shù)為外部數(shù)據(jù)庫(kù)的地址.
      db_host = postgresql

      #若啟用了--with-clair時(shí),注意修改clair的數(shù)據(jù)庫(kù)密碼,還有redis的密碼,因?yàn)閏lair需要使用redis。
      clair_db_password = root123


  4. 運(yùn)行 install.sh ,若需要啟用harbor的其它功能,可查看 install.sh --help
    安裝完成后,它會(huì)提示你訪問(wèn)harbor的地址是多少,你就可以直接在瀏覽器中訪問(wèn)這個(gè)地址了。

  5. 可測(cè)試打開(kāi)harbor,并測(cè)試上傳鏡像。
  5.1 在測(cè)試上傳鏡像時(shí),需要先登錄harbor的Web界面,然后創(chuàng)建一個(gè)項(xiàng)目,這個(gè)項(xiàng)目就相當(dāng)于公司中不同的項(xiàng)目組,每個(gè)項(xiàng)目組分別管理各自的項(xiàng)目鏡像,以便后期該項(xiàng)目不需要時(shí),可直接刪除該項(xiàng)目。

  5.2 然后到harbor客戶(hù)端,測(cè)試登錄harbor倉(cāng)庫(kù),并嘗試上傳鏡像
  5.2.1 因?yàn)檫@里使用了非安全的HTTP,因此需要修改docker的啟動(dòng)參數(shù)
    vim /usr/lib/systemd/system/docker.service
      ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --selinux-enabled=false --insecure-registry 192.168.10.154
    #若沒(méi)有啟用SELinux可設(shè)置不啟用它
    #--insecure-registry 即指定一個(gè)非安全的倉(cāng)庫(kù),這里指定內(nèi)網(wǎng)harbor地址為192.168.10.154
    # 若有多個(gè)可重復(fù)--insecure-registry

  5.2.2 測(cè)試上傳鏡像
    ~]# docker login http://192.168.10.154
    Authenticating with existing credentials...
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json. #這里需要注意: 登錄成功后,用戶(hù)名密碼會(huì)保存到config.json中。
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store

    Login Succeeded

    ~]# docker push 192.168.10.154/test1/nginx-alpine:v1    #這樣就可以上傳鏡像到harbor上了。

  6. 可自行查看 docker-compose.yml, install.sh 實(shí)際執(zhí)行的docker-compose命令.
    docker-compose   
     #命令在運(yùn)行時(shí),會(huì)自動(dòng)在當(dāng)前目錄下,找docker-compose.yml配置文件,若找到則安裝里面的定義
     #來(lái)決定到哪里去找鏡像,先啟動(dòng)那個(gè)容器,啟動(dòng)鏡像需要掛載什么卷等。

    在配置Harbor時(shí),若出現(xiàn)問(wèn)題,可結(jié)合/var/log/harbor中的日志文件來(lái)查看問(wèn)題.
    我通常會(huì)這樣查看:
      tail -f /var/log/harbor/*.log

  Harbor配置HTTPS:
    1. 修改 harbor.cfg
      hostname = harbor.zcf.com
      ui_url_protocol = https
      ssl_cert = /data/docker/certs/harbor.zcf.com.crt
      ssl_cert_key = /data/docker/certs/harbor.zcf.com.key
      harbor_admin_password = adminpass

    2. 創(chuàng)建證書(shū),并放到上面定義的目錄中
      測(cè)試使用,可使用我用shell寫(xiě)的證書(shū)制作工具:
       https://github.com/zhang75656/shell-tools/blob/master/gencret.sh
       chmod +x  gencret.sh
       ./gencret.sh  --help     #可查看使用幫助.但前提是必須安裝openssl
    3. 重新執(zhí)行 ./install.sh 即可,這樣harbor服務(wù)端就可以工作了.

  Harbor 客戶(hù)端配置:
    1. 在docker配置目錄下創(chuàng)建證書(shū)目錄, 
      #注意: 證書(shū)目錄是存放harbor服務(wù)器的證書(shū)文件.
      # docker login harbor.zcf.com 
      # 當(dāng)執(zhí)行上面命令登錄harbor時(shí),默認(rèn)docker會(huì)到/etc/docker/certs.d/下去找 harbor.zcf.com這個(gè)目錄,看其下面是否有證書(shū)可用。
      # 所以,需要將harbor服務(wù)器上的證書(shū)scp過(guò)來(lái),放到docker客戶(hù)端的這個(gè)目錄中。
     mkdir /etc/docker/certs.d/harbor.zcf.com
 

Harbor通過(guò)Systemd管理時(shí),所需要的systemd腳本參考:

[Unit]
Description=BigDisk docker-compose container starter
After=docker.service network-online.target
Requires=docker.service network-online.target

[Service]
WorkingDirectory=/[path_to_harbor]      #這里需要修改為Harbor的安裝目錄.
Type=oneshot
RemainAfterExit=yes

ExecStart=/usr/bin/docker-compose up -d    #這里需要確認(rèn),docker-compose的路徑是否與自己的系統(tǒng)的路徑一致.
ExecStop=/usr/local/bin/docker-compose down
ExecReload=/usr/bin/docker-compose up -d

[Install]
WantedBy=multi-user.target


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI