Docker Swarm - 安全管理

? 前言介紹

在 Docker Swarm 服務(wù)中, Secret 是一種 BLOB(二進(jìn)制大對象) 數(shù)據(jù), 就像密碼、SSH 私鑰、 SSL 證書或那些不應(yīng)該未加密就直接存儲在 Dockerfile 或應(yīng)用程序代碼中的數(shù)據(jù)。在 Docker 1.13 及更高版本中,可以使用 Docker Secrets 集中管理這些數(shù)據(jù),并將其安全地傳輸給需要訪問的容器。 一個給定的 Secret 只能被那些已被授予明確訪問權(quán)限的服務(wù)使用,并且只能在這些服務(wù)任務(wù)正在運(yùn)行的情況下。

不想在鏡像或代碼中管理的任何敏感數(shù)據(jù),都可以使用 Secret 來管理,比如:

  • 用戶名和密碼
  • TLS certificates and keys
  • SSH keys
  • 其他重要數(shù)據(jù):比如數(shù)據(jù)庫名、內(nèi)部服務(wù)器信息
  • 通用的字符串或二進(jìn)制內(nèi)容 (最大可達(dá) 500 Kb)

提醒: Docker Secret 僅對 Swarm 服務(wù)有效,對獨(dú)立的容器是無用的。如需使用,可以啟動 1 個副本的服務(wù)來使用 Docker Secret。

另一個使用 Secert 的用例是在容器和一組證書之間提供一個抽象層。考慮一種場景:有開發(fā)、測試和生產(chǎn)三套環(huán)境,同一個應(yīng)用程序在不同的環(huán)境中都可以擁有不同的憑證,并且以相同的 Secret Name 存儲在開發(fā)、測試和生產(chǎn)集群中。這樣容器只需要知道 Secret Name,就可以在不同的環(huán)境中正常工作。

當(dāng)然,你也可以使用 Docker Secret 管理非敏感數(shù)據(jù),比如配置文件。但是,非敏感數(shù)據(jù)還是建議使用 Docker Config 來管理。

? Docker Secret 基本操作

友情提示:“ 需 Swarm Manager 權(quán)限才能操作 !”

1、創(chuàng)建 Secret

用法

docker secret create [參數(shù)] SECRET [file|-]

參數(shù)

簡寫 參數(shù) 默認(rèn)值 描述
-d --driver Secret 驅(qū)動
-l --label 配置標(biāo)簽

2、Secret 列表

用法

docker secret ls [參數(shù)]

參數(shù)

簡寫 參數(shù) 默認(rèn)值 描述
-f --filter 按條件過濾輸出
--format GO 模板轉(zhuǎn)化
-q --quiet 僅展示 ID

3、Secret 詳情

用法

docker secret inspect [參數(shù)] SECRET [SECRET...]

參數(shù)

簡寫 參數(shù) 默認(rèn)值 描述
-f --format GO 模板轉(zhuǎn)化
--pretty 以人性化的格式打印信息

4、Secret 刪除

用法

docker secret rm SECRET [SECRET...]

? Swarm 對 Secret 的管理

方式類似:Docker Swarm 進(jìn)階:配置管理 Docker Config

? 構(gòu)建支持 Docker Secret 的鏡像

如果你開發(fā)的容器可以作為服務(wù)進(jìn)行部署,并需要敏感數(shù)據(jù)(如憑證)作為環(huán)境變量,則考慮調(diào)整鏡像以便充分利用 Docker Secret。

一種方法是確保在創(chuàng)建容器時傳遞給鏡像的每個參數(shù)也可以從文件中讀取。

提醒:Docker Secret 不直接設(shè)置環(huán)境變量。這是一個有意識的決定,因為環(huán)境變量可能會無意中在容器之間泄漏(例如使用 --link

? 示例:安全構(gòu)建 Wordpress 服務(wù)

1、創(chuàng)建文件 password.txt,里面存入 Mysql 的 root 密碼

touch password.txt

echo "myPassword" > password.txt

2、創(chuàng)建文件 wordpress.yml,用于啟動 mysql 和 wordpress 服務(wù),內(nèi)容:

version: '3.3'

services:
   db:
     image: mysql:latest
     environment:
       MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password
       MYSQL_DATABASE: wordpress
     secrets:
       - db_password

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: root
       WORDPRESS_DB_PASSWORD_FILE: /run/secrets/db_password
     secrets:
       - db_password

secrets:
   db_password:
     file: password.txt

3、啟動 wordpress 服務(wù)

docker stack deploy -c wordpress.yml wordpress

4、訪問 wordpress

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容