1. 程式人生 > >Docker 架構介紹:docker安全最佳實踐

Docker 架構介紹:docker安全最佳實踐

簡介

docker 賴以生存的“Secure by Default”,docker EE 預設的配置和策略提供基礎雄厚的安全環境,因此,他們可以非常容易的修改來適應不同組織的特殊需求。
docker 把重點放到了容器安全的三個關鍵領域:安全訪問、安全內容、安全平臺。這導致不僅在Docker EE中內建了隔離和包容功能,而且還啟用了開箱即用功能,Linux核心的攻擊面積減少。Docker守護程序的控制功能得到了改進,管理員可以構建,釋出並執行更安全的應用程式。

你會學到什麼

本文件概述了Docker EE的預設安全性以及進一步保護Universal Control Plane和Docker Trusted Registry的最佳做法。 Docker EE 2.0中引入的新功能,如Image Mirroring和Kubernetes也在探索中。

縮略語

UCP = Universal Control Plane
DTR = Docker Trusted Registry
RBAC = Role Based Access Control
CA = Certificate Authority
EE = Docker Enterprise Edition
HA = High Availability
BOM = Bill of Materials
CLI = Command Line Interface
CI = Continuous Integration

引擎和節點安全

已經有幾個資源涵蓋了Docker引擎安全性的基礎知識:

限制節點的root訪問

Docker EE使用來自主機的完全獨立的身份驗證後端,提供明確的職責分離,Docker EE可以利用現有的LDAP / AD基礎設施進行身份驗證。它甚至使用RBAC標籤來控制對映象和執行容器等物件的訪問,這意味著使用者團隊可以完全訪問正在執行的容器。 通過此訪問,使用者可以觀看日誌並在正在執行的容器內執行shell命令。 使用者永遠不需要登入到主機。 限制有權訪問主機的使用者數量會減少攻擊面。

遠端訪問daemon

不要啟用遠端守護程序socket。 如果您必須開啟它的引擎,那麼總是使用證書來保護它。 使用通用控制平面時,不應該開啟守護程式socket。 如果必須,請務必檢視有關保護守護程式的socker說明。

Privileged 容器

儘可能避免執行特權容器,執行特權容器可以讓容器訪問所有主機的namespace(net\pid等等),這將給予容器控制主機的許可權,通過保持容器和主機認證的獨立性,確保您的基礎設施安全。

容器UID管理

預設情況下,容器內的使用者是root使用者。 使用縱深防禦模型,建議不是所有的容器都以root身份執行。 緩解這種情況的簡單方法是在執行時使用–user宣告。 該容器作為指定使用者執行,實質上刪除了根訪問許可權。
另請注意,容器內的檔案的UID / GID組合與容器外部的檔案是相同的,看下面的例子:一個容器以UID 10000和GID 10000執行。如果使用者touch一個檔案在/tmp/secret_file目錄,則檔案的UID / GID在容器內部和外部都是相同的,如下所示:

root @ ~  docker run --rm -it -v /tmp:/tmp --user 10000:10000 alpine sh
/ $ whoami
whoami: unknown uid 10000
/ $ touch /tmp/secret_file
/ $ ls -asl /tmp/secret_file
     0 -rw-r--r--    1 10000    10000            0 Jan 26 13:48 /tmp/secret_file
/ $ exit
root @ ~  ls -asl /tmp/secret_file
0 -rw-r--r-- 1 10000 10000 0 Jan 26 08:48 /tmp/secret_file

開發人員在容器中應該儘可能少的使用root許可權,開發人員應該在他們的dockerfile中用USER宣告建立執行容器的使用者。

Seccomp

Seccomp(Secure Computing Mode的簡寫),是Linux核心的一項安全特性,用於限制給定程序的系統呼叫,這個特性出現在liunux核心2.6.12版本以後以及docker 1.10以後,當前的Docker Engine實現提供了一組預設的受限系統呼叫,並且還允許系統呼叫通過每個容器的白名單或黑名單進行過濾(不同的過濾器可以應用於執行在同一個引擎中的不同容器),Seccomp配置檔案在容器建立時應用,在容器執行以後不能更改。
開箱即用,Docker帶有一個預設的Seccomp配置檔案,對絕大多數用例都非常有效。 一般來說,除非絕對必要,否則不建議應用自定義配置檔案 有關構建自定義配置檔案並應用它們的更多資訊可以在Docker Seccomp文件中找到。
檢查自己的系統是否支援seccomp,使用下面的命令:

cat /boot/config-uname -r | grep CONFIG_SECCOMP=

輸入如下:
CONFIG_SECCOMP=y

AppArmor / SELinux

AppArmor和SELinux在使用配置檔案方面與Seccomp類似,儘管他們在執行上有所不同,AppArmor和SELinux使用的配置檔案語言不同,AppArmor僅適用於基於Debian的發行版,如Debian和Ubuntu。 SELinux可在Fedora / RHEL / CentOS / Oracle Linux上使用,而不是簡單的系統呼叫和引數列表,都允許定義角色(通常是程序),動作(讀取檔案,網路操作)和目標(檔案,IP,協議等)
要在Docker守護程式中啟用SELinux,請修改/etc/docker/daemon.json並新增以下內容:

“selinux-enabled”: true

要檢查SELinux是否啟用:
docker info |grep -A 3 “Security Options”
輸出如下:

[email protected]:~$ docker info |grep -A 3 "Security Options"
WARNING: No swap limit support
Security Options:
 apparmor
 seccomp
  Profile: default

AppArmor未應用於Docker守護程序。Apparmor配置檔案需要在容器執行時應用:

docker run –rm -it –security-opt apparmor=docker-default hello-world

Runtime Privilege 和 Linux Capabilities

相關推薦

Docker 架構介紹docker安全最佳實踐

簡介 docker 賴以生存的“Secure by Default”,docker EE 預設的配置和策略提供基礎雄厚的安全環境,因此,他們可以非常容易的修改來適應不同組織的特殊需求。 docker 把重點放到了容器安全的三個關鍵領域:安全訪問、安全內容、安

Docker系列一Docker介紹和安裝

實驗 start ner min docker-ce 周期 com set 自動化測試 Docker介紹 Docker是指容器化技術,用於支持創建和實驗Linux Container。借助Docker,你可以將容器當做重量輕、模塊化的虛擬機來使用,同時,你還將獲得高度的靈活

基礎架構Docker倉庫

step1 倉庫搭建 registry&web     wget   https://ra.githubusercontent.com/Thomas-YangHT/shell/master/docker-registry-srv.sh&nb

Docker系列(一)docker簡單介紹

docker簡介: 多語言和框架:支援多語言和框架以及語言框架的擴充套件機制 多服務:開放的核心服務以及服務的擴充套件機制 多雲和多IaaS技術:支援多種IaaS技術和多雲的部署,包括公有云和私有云 Docker----------第三代Paas平臺 Docker究竟是什麼?dotC

K8S安全軍規101對CNCF最佳實踐的擴充

cve 混亂 lan 正是 工作 Kubernete 不足 基礎 數據服務 在上篇文章裏,我們分享了CNCF為廣大Kubernetes用戶建議的9項Kubernetes安全最佳實踐,分享了用戶使用Kubernetes管理集群時的9個能進一步確保集群安全的基本操作。 上篇

docker第一天docker的基本原理與安裝

原理 docker安裝 Docker官網:www.docker.com 一、docker是虛擬機嗎?不是,很多人在剛開始接觸docker的時候往往會進入一個誤區,其實docker≠VM 圖(一)在兩者的原理圖中不難看出,虛擬機運行多個應用時,如圖(一)所示:Serv

Docker之七Docker數據卷管理

docker kuebernetes 容器數據持久化 1、數據卷:將本地磁盤mount進入容器-v /dest-v src:dst [ro]|[rw] 2、數據卷容器:將外部容器分享給容器--volumes-from數據卷容器專門用來掛載數據卷的容器,以供其他容器引用和使用 3、數據卷管理命令dock

Ansible自動化運維技術與最佳實踐

資深運維人員聯手打造。 掌握大規模叢集運維管理的必備參考。 詳細講解Ansible自動化運維方式與技巧。 Ansible是DevOps語言之一,是第一款可以讀/寫跨平臺的“Infrastructure-as-code”工具,從系統管理者到開發者,都可使用Ansible自動化部署並

建議Maven安裝最佳實踐

設定MAVEN_OPTS環境變數 在Maven安裝目錄時,執行mvn命令實際上是執行了Java命令,既然是執行Java,那麼執行Java命令可用的引數當然也應該在執行mvn命令時可用。這個時候,MAVEN_OPTS環境變數就能派上用場。 我們通常需要設定MAVEN_OPTS的值為:-Xms1

Docker $ 專案部署 Docker 部署微服務 + Mysql

一.準備工作 這裡以兩個專案為例: micro-servive-client micro-servive-server   這裡配置方面需要注意,服務提供者的host名稱為server的映象名,否則服務無法向註冊中心註冊。 eureka: client:

Docker $ 專案部署 Docker 部署 SpringBoot + Mysql

一.Dockerfile常用指令 FROM 目的 指定基礎映象 特點 需要寫在其他指令之前,之後的指令都依賴於該指令指定的映象。 語法 FROM <image> FROM <image&g

Docker $ 第二篇Docker 映象的使用

一.Docker映象簡介 1.映象是Docker三大元件之一,Docker執行容器需要對應的映象,如果說映象是程式,那容器就是程序,如果本地不存在映象,Docker就會從倉庫自動下載映象。 二.Docker使用映象 拉取映象 # docker pull

SonarQube學習系列2Maven+SonarQube 最佳實踐

本文記錄了Maven工程使用SonarQube完成程式碼評估,並對其中指定模組進行排除和專案許可權管理等 有些程式碼是使用相關外掛或工具生成的,這些程式碼通常存在高冗餘或書寫不規範現象,不符合程式碼質量要求,但不影響使用,應排除在程式碼質量評估之外 本文基於上一

Python貓薦書系統之二《Python最佳實踐指南》

在介紹今天的書目之前,我想先跟大家介紹一下這個薦書系列。本系列打算聚焦Python領域的書籍,初期選書的標準主要有兩條:一是要有中文版,二是要有免費開源的線上資源,原因很簡單,技術書籍由於其特殊性,線上閱讀的體驗是最佳的,不管是排版、獲取原始碼、摘錄筆記還是分享交流,

Docker $ 第二篇Docker映象的使用

一.Docker映象簡介 1.映象是Docker三大元件之一,Docker執行容器需要對應的映象,如果說映象是程式,那容器就是程序,如果本地不存在映象,Docker就會從倉庫自動下載映象。 二.Dock

京東三級列表頁持續架構優化—Golang+Lua(OpenResty)最佳實踐

作者:謝剛,京東商城架構師,負責京東分類列表、鳳凰等系統的架構開發工作;之前在搜狐視訊負責UGC視訊架構開發工作。 ***招聘:京東列表頁目前有Java、Golang、Lua(OpenResty)、資料探勘等職位,歡迎投簡歷到[email protected]

Docker系列(四)docker容器互聯

基於Volume的互聯 為什麼需要Volume docker檔案系統是分層的,下面的是全部是隻讀的,最上面的是可寫層,容器中的程序如果修改了某個檔案,比如修改了下層的某個檔案,其實是在最頂層複製下層檔案,進行修改,然後覆蓋原來的檔案,原來的檔案就隱藏了。 執行時的容器是映象疊加

Docker系列(三)docker自定義容器映象

將容器程式設計映象: docker commit [repo:tag] 網上有這句話:當我們在製作自己的映象的時候,會在container中安裝一些工具、修改配置,如果不做commit儲存 起來,那麼container停止以後再啟動,這些更改就消失了。 docker create

Docker系列(二)docker基礎命令

docker的部署安裝(Linux kernel至少3.8以上): yum install docker docker1.8安裝:(下面 是兩個命令) # cat >/etc/yum.repos.d/docker.repo<<-EOF [dockerrep

Kubernetes(k8s)部署安全最佳實踐_Kubernetes中文社群

編者按:本文作者是來自 Aqua Security 的 Amir Jerbi 和 Michael Cherny,他們以大量的案例和經驗為基礎,總結並描述了 Kubernetes 部署中的最佳安全實踐。 Kubernetes 提供了很多能夠提高應用安全的方法。要進行這些配置,就要掌握 Kuber