溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Docker容器的安全技巧有哪些

發(fā)布時間:2021-11-12 10:19:22 來源:億速云 閱讀:289 作者:小新 欄目:安全技術

這篇文章將為大家詳細講解有關使用Docker容器的安全技巧有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

首先,讓我們看看限制容器的訪問權(quán)限。

訪問管理-限制權(quán)限

啟動容器時,Docker將創(chuàng)建一組命名空間。 命名空間可防止容器中的進程看到或影響主機(包括其他容器)中的進程。  命名空間是Docker封鎖一個容器與另一個容器的主要方式。

Docker也提供私有容器網(wǎng)絡。 這樣可以防止容器獲得對同一主機上其他容器的網(wǎng)絡接口的特權(quán)訪問。

因此,Docker環(huán)境在某種程度上是孤立的,但對于您的用例而言,它可能不夠孤立。

使用Docker容器的安全技巧有哪些

> Does not look safe

良好的安全性意味著遵循最小特權(quán)原則。 您的容器應具有執(zhí)行所需功能的能力,但沒有其他能力。  棘手的事情是,一旦您開始限制可以在容器中運行的進程,則容器可能無法執(zhí)行其合法需要執(zhí)行的操作。

有幾種方法可以調(diào)整容器的權(quán)限。 首先,避免以root身份運行(如果必須以root身份運行,則應重新映射)。  其次,使用–cap-drop和–cap-add調(diào)整功能。

多數(shù)人需要做的是避免root和調(diào)整功能,以限制特權(quán)。 更高級的用戶可能想要調(diào)整默認的AppArmor和seccomp配置文件。  我將在即將出版的有關Docker的書中討論這些內(nèi)容,但此處已將它們排除在外,以防止本文如期膨脹。

避免以root身份運行

Docker的默認設置是使映像中的用戶以root用戶身份運行。 許多人沒有意識到這是多么危險。 這意味著攻擊者更容易訪問敏感信息和您的內(nèi)核。

一般最佳做法是,不要讓容器以root用戶身份運行。

使用Docker容器的安全技巧有哪些

> Roots

"防止來自容器內(nèi)部特權(quán)升級攻擊的最佳方法是將容器的應用程序配置為以非特權(quán)用戶身份運行。" — Docker文檔。

您可以在構(gòu)建時指定root以外的用戶名,如下所示:

docker run -u 1000 my_image

-user或-u標志可以指定用戶名或用戶ID。 如果userid不存在,那就很好。

在上面的示例中,1000是任意的非特權(quán)用戶標識。 在Linux中,通常保留0到499之間的用戶ID。  選擇一個超過500的用戶ID,以避免以默認系統(tǒng)用戶身份運行。

最好從鏡像的root用戶更改用戶,而不是從命令行設置用戶。 這樣,人們就不必記住在構(gòu)建時進行更改。  僅在需要root附帶功能的Dockerfile指令之后,在映像中包括USER Dockerfile指令。

換句話說,首先安裝所需的軟件包,然后切換用戶。 例如:

FROM alpine:latest RUN apk update && apk add --no-cache git USER 1000 …

如果必須以超級用戶身份在容器中運行進程,請將該超級用戶重新映射到Docker主機上的特權(quán)較低的用戶。 請參閱Docker文檔。

您可以通過更改功能來授予用戶所需的特權(quán)。

能力

功能是允許的流程包。

使用–cap-drop和–cap-add通過命令行調(diào)整功能。 最好的策略是使用–cap-drop  all刪除容器的所有特權(quán),并使用–cap-add重新添加所需的特權(quán)。

使用Docker容器的安全技巧有哪些

> Stop or go

您可以在運行時調(diào)整容器的功能。 例如,要放棄使用kill來停止容器的功能,可以刪除該默認功能,如下所示:

docker run --cap-drop=Kill my_image

避免為進程賦予SYS_ADMIN和SETUID特權(quán),因為它們具有廣泛的權(quán)力。  向用戶添加此功能類似于授予root權(quán)限(避免這種結(jié)果是不使用root的全部目的)。

禁止容器使用1到1023之間的端口號是更安全的做法,因為大多數(shù)網(wǎng)絡服務都在此范圍內(nèi)運行。  未經(jīng)授權(quán)的用戶可以偵聽諸如登錄之類的內(nèi)容并運行未經(jīng)授權(quán)的服務器應用程序。  這些編號較低的端口需要以root用戶身份運行或被明確賦予CAP_NET_BIND_SERVICE功能。

要查找諸如容器是否具有特權(quán)端口訪問權(quán)限之類的信息,可以使用inspect。 使用docker container inspect  my_container_name將為您顯示有關容器分配的資源和安全配置文件的許多詳細信息。

這是Docker參考,更多關于特權(quán)的信息。

與Docker中的大多數(shù)事情一樣,最好在自動的自文檔文件中配置容器。 使用Docker Compose,您可以在服務配置中指定功能,如下所示:

cap_drop: ALL

或者,您可以按照此處的討論在Kubernetes文件中對其進行調(diào)整。

Linux功能的完整列表在這里。

如果要對容器特權(quán)進行更細粒度的控制,請在我即將出版的書中查看我對AppArmor和seccomp的討論。  訂閱我的電子郵件通訊,以便在可用時得到通知。

使用Docker容器的安全技巧有哪些

> Closed road

訪問管理-限制資源

最好限制容器對內(nèi)存和CPU等系統(tǒng)資源的訪問。 沒有資源限制,容器可以用盡所有可用內(nèi)存。  如果發(fā)生這種情況,Linux主機內(nèi)核將拋出"內(nèi)存不足"異常并殺死內(nèi)核進程。 這可能會導致整個系統(tǒng)崩潰。  您可以想象攻擊者如何利用這些知識來嘗試關閉應用程序。

如果您在同一臺計算機上運行多個容器,則可以明智地限制任何一個容器可以使用的內(nèi)存和CPU。 如果您的容器內(nèi)存不足,則會關閉。  關閉容器可能會導致應用崩潰,這很不好玩。 但是,這種隔離可以防止主機內(nèi)存不足,并且可以防止主機上的所有容器崩潰。 那是一件好事。

使用Docker容器的安全技巧有哪些

> Wind resource

適用于Mac v2.1.0的Docker Desktop CE具有默認資源限制。 您可以在Docker圖標->首選項下訪問它們。  然后單擊"資源"選項卡。 您可以使用滑塊來調(diào)整資源限制。

使用Docker容器的安全技巧有哪些

> Resource settings on Mac

另外,您可以通過指定–memory標志或-m的縮寫來限制命令行中的資源,后跟一個數(shù)字和一個度量單位。

4m表示4兆字節(jié),是最小的容器內(nèi)存分配。 兆字節(jié)(MiB)略大于兆字節(jié)(1 MiB = 1.048576 MB)。  該文檔目前不正確,但希望維護人員在您閱讀本文時已接受我的PR進行更改。

要查看您的容器正在使用哪些資源,請在新的終端窗口中輸入命令docker stats。 您會看到定期刷新運行中的容器統(tǒng)計信息。

使用Docker容器的安全技巧有哪些

> Stats

在后臺,Docker正在使用Linux控制組(cgroup)來實現(xiàn)資源限制。 該技術已經(jīng)過實戰(zhàn)測試。

在此處了解有關Docker上資源限制的更多信息。

鏡像安全

從Docker Hub抓取鏡像就像邀請某人進入您的家一樣。 您可能想要對此有所了解。

使用Docker容器的安全技巧有哪些

> Someone's home

使用值得信賴的鏡像

鏡像安全的規(guī)則之一是僅使用您信任的鏡像。 您如何知道哪些鏡像是可信賴的?

可以肯定,流行的官方鏡像相對安全。 此類鏡像包括alpine,ubuntu,python,golang,redis,busybox和node。  每個都有超過1000萬的下載量,并且很多人關注它們。

Docker解釋:

Docker贊助了一個專門的團隊,負責審查和發(fā)布正式映像中的所有內(nèi)容。  該團隊與上游軟件維護者,安全專家以及更廣泛的Docker社區(qū)合作,以確保這些映像的安全性。

減少攻擊面

與使用正式基礎鏡像有關,您可以使用最小基礎鏡像。

由于內(nèi)部代碼較少,因此安全漏洞的可能性較小。 較小,較不復雜的基本圖像更加透明。

與您的朋友的鏡像(依賴于朋友的鏡像,該鏡像依賴于另一基本鏡像)相比,查看Alpine鏡像中發(fā)生的事情要容易得多。 短線更容易解開。

使用Docker容器的安全技巧有哪些

> Tangled

同樣,僅安裝您實際需要的軟件包。 這樣可以減少攻擊面,并加快鏡像下載和鏡像構(gòu)建速度。

需要簽名的圖像鏡像

您可以使用Docker內(nèi)容信任來確保對鏡像進行簽名。

Docker內(nèi)容信任阻止用戶使用帶標簽的鏡像,除非它們包含簽名。 可信來源包括來自Docker Hub的Official Docker  Images和來自用戶可信來源的簽名鏡像。

使用Docker容器的安全技巧有哪些

> Signed

默認情況下禁用內(nèi)容信任。 要啟用它,請將DOCKER_CONTENT_TRUST環(huán)境變量設置為1。在命令行中,運行以下命令:

export DOCKER_CONTENT_TRUST=1

現(xiàn)在,當我嘗試從Docker Hub下拉我自己的未簽名映像時,它已被阻止。

Error: remote trust data does not exist for docker.io/discdiver/frames: notary.docker.io does not have trust data for docker.io/discdiver/frames

內(nèi)容信任是防止riff竊的一種方法。 在此處了解有關內(nèi)容信任的更多信息。

Docker通過其內(nèi)容的加密校驗和存儲和訪問圖像。 這樣可以防止攻擊者創(chuàng)建圖像沖突。 這是很酷的內(nèi)置安全功能。

管理密碼

您的訪問受到限制,鏡像安全,現(xiàn)在該管理您的密碼了。"

管理敏感信息的規(guī)則1:請勿將其添加到您的鏡像中。 在代碼存儲庫,日志和其他地方找到未加密的敏感信息并不難。

規(guī)則2:也不要將環(huán)境變量用于敏感信息。 任何可以在容器中運行docker inspect或exec的人都可以找到您的密碼。  以root身份運行的任何人都可以。 希望我們已經(jīng)進行了一些配置,以便用戶不會以root用戶身份運行,但是冗余是良好安全性的一部分。  通常,日志也會轉(zhuǎn)儲環(huán)境變量值。 您不希望您的敏感信息只泄露給任何人。

Docker卷更好。 建議使用它們在Docker文檔中訪問您的敏感信息。 您可以將卷用作保存在內(nèi)存中的臨時文件系統(tǒng)。 卷消除了docker  inspect和日志記錄風險。 但是,root用戶仍然可以看到秘密,任何可以執(zhí)行到容器中的人都可以看到秘密。 總體而言,卷是一個很好的解決方案。

比卷更好,請使用Docker Secret。 Secret已加密。

使用Docker容器的安全技巧有哪些

> Secrets

一些Docker文檔指出您只能在Docker Swarm中使用機密。 不過,您可以在沒有Swarm的情況下在Docker中使用機密。

如果您只需要映像中的秘密,則可以使用BuildKit。 BuildKit是比當前用于構(gòu)建Docker映像的構(gòu)建工具更好的后端。  它大大縮短了構(gòu)建時間,并具有其他不錯的功能,包括對構(gòu)建時機密的支持。

BuildKit相對較新-Docker Engine 18.09是BuildKit支持附帶的第一個版本。  有三種方法可以指定BuildKit后端,因此您可以立即使用其功能。 將來,它將是默認的后端。

  • 使用export DOCKER_BUILDKIT = 1將其設置為環(huán)境變量。

  • 使用DOCKER_BUILDKIT = 1啟動構(gòu)建或運行命令。

  • 默認情況下啟用BuildKit。 使用以下命令將/etc/docker/daemon.json中的配置設置為true:{" features":{"  buildkit":true}}。 然后重啟Docker。

然后,您可以在構(gòu)建時使用–secret標志使用機密,如下所示:

docker build –secret my_key = my_value,src = path / to / my_secret_file。

文件將您的Secret指定為鍵值對的位置。

這些Secret不會存儲在最終映像中。 它們也從映像構(gòu)建緩存中排除。 安全第一!

如果您需要運行容器中的Secret,而不僅僅是在構(gòu)建映像時,請使用Docker Compose或Kubernetes。

使用Docker Compose,將secrets鍵值對添加到服務中并指定secret文件。 改寫以下示例的有關Docker  Compose秘密的Stack Exchange答案的技巧。

帶有Secret的示例docker-compose.yml:

version: "3.7"services: my_service: image: centos:7 entrypoint: "cat /run/secrets/my_secret" secrets: - my_secretsecrets: my_secret: file: ./my_secret_file.txt

然后像往常一樣使用docker-compose up –build my_service啟動Compose。

如果您使用的是Kubernetes,它支持秘密。 Helm-Secrets可以幫助簡化K8中的秘密管理。 此外,K8和Docker  Enterprise一樣,都具有基于角色的訪問控制(RBAC)。 RBAC使團隊的訪問秘密管理更易于管理和更安全。

Secret的最佳做法是使用機密管理服務,例如Vault。 Vault是HashiCorp的一項服務,用于管理對機密的訪問。  它還限制了時間的Secret。 您可以在此處找到有關Vault的Docker映像的更多信息。

AWS Secrets Manager和其他云提供商的類似產(chǎn)品也可以幫助您管理云中的機密。

使用Docker容器的安全技巧有哪些

> Keys

請記住,管理機密的關鍵是保持。 絕對不要將它們添加到您的鏡像中或?qū)⑺鼈冏兂森h(huán)境變量。

更新

與任何代碼一樣,使鏡像中的語言和庫保持最新,以從最新的安全修復程序中受益。

使用Docker容器的安全技巧有哪些

> Hopefully your security is more up to date than this lock

如果您在鏡像中引用基礎鏡像的特定版本,請確保也保持最新。

相關地,您應該使Docker版本保持最新,以進行錯誤修復和增強,以允許您實施新的安全功能。

最后,保持主機服務器軟件為最新。 如果您使用的是托管服務,則應該為您完成此操作。

更好的安全性意味著保持更新。

考慮Docker Enterprise

如果您的組織擁有一堆人和一堆Docker容器,那么您可以從Docker Enterprise中受益。 管理員可以為所有用戶設置策略限制。  所提供的RBAC,監(jiān)視和日志記錄功能可能會使您的團隊更輕松地進行安全管理。

借助Enterprise,您還可以在Docker Trusted Registry中私有地托管自己的映像。  Docker提供了內(nèi)置的安全掃描功能,以確保您的映像中沒有已知的漏洞。

Kubernetes免費提供了其中一些功能,但是Docker Enterprise對容器和映像具有附加的安全功能。 最好的是,Docker  Enterprise 3.0于2019年7月發(fā)布。它包括具有"明智的安全默認設置"的Docker Kubernetes服務。

其他提示

  • 永遠不要以特權(quán)方式運行容器,除非您有特殊需要,例如需要在Docker容器中運行Docker,而且您知道自己在做什么。

  • 在Dockerfile中,建議使用COPY而不是ADD。 ADD會自動提取壓縮文件,并可以從URL復制文件。 COPY沒有這些功能。  盡可能避免使用ADD,這樣您就不會受到來自遠程URL和Zip文件的攻擊。

  • 如果您在同一服務器上運行任何其他進程,請在Docker容器中運行它們。

  • 如果您使用網(wǎng)絡服務器和API創(chuàng)建容器,請仔細檢查參數(shù),以免創(chuàng)建您不想要的新容器。

  • 如果公開REST API,請使用HTTPS或SSH保護API端點。

  • 考慮使用Docker Bench for Security進行檢查,以了解您的容器遵循其安全準則的程度。

  • 僅將敏感數(shù)據(jù)存儲在卷中,而不能存儲在容器中。

  • 如果將單主機應用程序與網(wǎng)絡一起使用,請不要使用默認的橋接網(wǎng)絡。 它具有技術缺陷,不建議用于生產(chǎn)。  如果發(fā)布端口,則可以訪問橋接網(wǎng)絡上的所有容器。

  • 將Lets Encrypt用于HTTPS證書進行服務。 在此處查看有關NGINX的示例。

  • 僅在需要讀取卷時,才將卷掛載為只讀。 請參閱此處的幾種方法。

摘要

您已經(jīng)了解了許多使Docker容器更安全的方法。 安全不是一成不變的。 它需要保持警惕,以確保鏡像和容器的安全。

使用Docker容器的安全技巧有哪些

> Keys

考慮安全性時,請記住AIM:

(1) 訪問管理

  • 避免以超級用戶身份運行。 如果必須使用root,則重新映射。

  • 刪除所有功能,然后重新添加所需的功能。

  • 如果您需要細粒度的權(quán)限調(diào)整,請進入AppArmor。

  • 限制資源。

(2) 鏡像安全

  • 使用官方的,流行的,最小的基本鏡像。

  • 不要安裝不需要的東西。

  • 要求對鏡像進行簽名。

  • 保持Docker,Docker映像和其他與Docker相關的軟件的更新。

(3) 機密Secret管理

  • 使用Secret或卷。

  • 考慮一個機密管理器,例如vault。

使用Docker容器的安全技巧有哪些

> Bullseye!

保持Docker容器安全意味著實現(xiàn)安全的目標。

不要忘了讓Docker,您的語言和庫,您的圖像以及您的主機軟件保持更新。 最后,如果您作為團隊的一部分運行Docker,請考慮使用Docker  Enterprise。

關于“使用Docker容器的安全技巧有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

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

AI