選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
3 分鐘閱讀時間 (583 個字)

每日小知識 #12 - Container 資安(3)

shutterstock_198004562
  1. 確認 Image 出處

    • 怎麼知道目前用的 Image 本身沒被動過手腳
    • 最先想到的就是安全散列(Secure Hash),比方說常見的 MD5 或是 SHA系列。
    • 但…有什麼根據可以如此信任 Secure Hash?
    • 沒有根據,所以最好的解答就是公私鑰(private/public key pairs)搭配數位簽章(Cryptographic Signature)
    • 透過數位簽章,我們可以確認某個 Artifact 的出處。
    • 此外,透過作者的私鑰加密過後,如果取得公鑰的人本身為人正直,而且公鑰沒被動過手腳,那就可以確保取得的內容是正確的。
  2. Docker Content Trust

    • 前面講了這麼多,究竟在 Docker 要如何確定 Image 沒毒呢?
    • 在 Docker 的世界中,Secure Hash 被稱作 Digest
    • 承上,與其搭配的稱作 Manifest,是一個描述 Image 組成的 Metadata。
    • 再來就是重點了,DockerHub 提供了一個機制叫作 Docker Content Trust,其中:
      • Image 提供者可以用私鑰加密
      • Image 使用者會取得數位簽章以及公鑰
    • 開啟 DCT 的方式就是 export DOCKER_CONTENT_TRUST=1,不過我試的情況是這只在 Linux 有用,或許是因為 Windows/Mac 中間都還藏了一層 VM 的關係
    • 如果是第一次開啟,那 push image 到 repository 的時候,會分別要求你針對 root key 以及 tagging key 輸入 passphrase。
    • root key 就是所謂的 private key,它會拿來替「各」repository 產 tagging key。
    • Tagging key 則是發佈方,也就是 push 的團隊拿來簽 同一個 repository 時共享的。
    • 請留意,redis、ubuntu、postgres,各是一個 repository,如果是 redis:2.1、ubuntu:14.04、postgres:9.5,那冒號後面接的稱作 tag
    • 使用方 在第一次 pull 的時候,會被要求接受一個憑證存放在電腦,往後都是靠這個憑證驗真身。
    • 承上,同時 DCT 會偷偷依 timestamp 產一個 public key 讓使用方可以解密,據說這是為了防止 Replay Attacks
  3. Notary

    • 以上,都僅限 Docker Hub,如果自己的 private registry 要達到這種驗證方式,要使用 Notary,但那又是另一個故事了…
  4. 手動

    • 如果覺得,以上的機制都太不安全了,我不相信,你也可以 …
      • 透過 docker save 匯出
      • 自行實作加密、數位簽章
      • 透過 docker load 匯入
    • 只不過…最後你會發現用別人的比較快

這個議題實在太深奧,小弟沒學過密碼學,有更深興趣的人還是去看官方的文件說明,這是我理解的極限了…
Reference: https://docs.docker.com/engine/security/trust/

(To be continued …)

如何選擇測試工具來進行自動化測試
當 Tomcat 將 CPU 占滿時該如何 Debug

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/12, 週日

Captcha 圖像