自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用Docker容器的二十大安全技巧

安全 云安全
您需要如何關(guān)注Docker的安全性? 這取決于Docker內(nèi)置了明智的安全性功能。本文包含可幫助您安全使用Docker的技巧。

本文包含可幫助您安全使用Docker的技巧。 如果您是Docker的新手,建議您先閱讀我以前有關(guān)Docker概念,Docker生態(tài)系統(tǒng),Dockerfile,精簡(jiǎn)映像,常用命令和Docker中的數(shù)據(jù)的文章。

[[341880]]

您需要如何關(guān)注Docker的安全性? 這取決于Docker是否內(nèi)置了明智的安全性功能。如果您使用的是官方Docker映像并且未與其他計(jì)算機(jī)通信,則無需擔(dān)心。

但是,如果您使用的是非官方的鏡像,提供文件或在生產(chǎn)環(huán)境中運(yùn)行應(yīng)用程序,那么情況就不同了。 在這種情況下,您需要對(duì)Docker安全性有更多的了解。

您的主要安全目標(biāo)是防止惡意用戶獲取有價(jià)值的信息或造成嚴(yán)重破壞。 為此,我將在幾個(gè)關(guān)鍵領(lǐng)域分享Docker安全最佳實(shí)踐。 到本文結(jié)尾,您將看到20多個(gè)Docker安全提示!

在第一部分中,我們將重點(diǎn)關(guān)注三個(gè)領(lǐng)域:

  • 訪問管理
  • 鏡像安全
  • 機(jī)密管理

請(qǐng)考慮縮寫AIM,以幫助您記住它們。

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

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

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

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

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

[[341881]]

> Does not look safe

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

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

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

避免以root身份運(yùn)行

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

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

[[341882]] 

> Roots

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

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

  1. docker run -u 1000 my_image 

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

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

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

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

  1. FROM alpine:latest 
  2. RUN apk update && apk add --no-cache git 
  3. USER 1000 
  4. … 

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

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

能力

功能是允許的流程包。

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

[[341883]]

> Stop or go

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

  1. docker run --cap-drop=Kill my_image 

避免為進(jìn)程賦予SYS_ADMIN和SETUID特權(quán),因?yàn)樗鼈兙哂袕V泛的權(quán)力。 向用戶添加此功能類似于授予root權(quán)限(避免這種結(jié)果是不使用root的全部目的)。

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

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

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

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

  1. cap_drop: ALL 

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

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

如果要對(duì)容器特權(quán)進(jìn)行更細(xì)粒度的控制,請(qǐng)?jiān)谖壹磳⒊霭娴臅胁榭次覍?duì)AppArmor和seccomp的討論。 訂閱我的電子郵件通訊,以便在可用時(shí)得到通知。

[[341884]]

> Closed road

訪問管理-限制資源

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

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

[[341885]]

> Wind resource

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

使用Docker容器的二十大安全技巧

> Resource settings on Mac

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

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

要查看您的容器正在使用哪些資源,請(qǐng)?jiān)谛碌慕K端窗口中輸入命令docker stats。 您會(huì)看到定期刷新運(yùn)行中的容器統(tǒng)計(jì)信息。

使用Docker容器的二十大安全技巧

> Stats

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

在此處了解有關(guān)Docker上資源限制的更多信息。

鏡像安全

從Docker Hub抓取鏡像就像邀請(qǐng)某人進(jìn)入您的家一樣。 您可能想要對(duì)此有所了解。

[[341886]]

> Someone's home

使用值得信賴的鏡像

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

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

Docker解釋:

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

減少攻擊面

與使用正式基礎(chǔ)鏡像有關(guān),您可以使用最小基礎(chǔ)鏡像。

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

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

[[341887]]

> Tangled

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

需要簽名的圖像鏡像

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

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

使用Docker容器的二十大安全技巧

> Signed

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

  1. export DOCKER_CONTENT_TRUST=1 

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

  1. 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竊的一種方法。 在此處了解有關(guān)內(nèi)容信任的更多信息。

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

管理密碼

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

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

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

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

比卷更好,請(qǐng)使用Docker Secret。 Secret已加密。

[[341888]]

> Secrets

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

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

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

  • 使用export DOCKER_BUILDKIT = 1將其設(shè)置為環(huán)境變量。
  • 使用DOCKER_BUILDKIT = 1啟動(dòng)構(gòu)建或運(yùn)行命令。
  • 默認(rèn)情況下啟用BuildKit。 使用以下命令將/etc/docker/daemon.json中的配置設(shè)置為true:{" features":{" buildkit":true}}。 然后重啟Docker。

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

  1. docker build –secret my_key = my_valuesrc = path / to / my_secret_file。 

文件將您的Secret指定為鍵值對(duì)的位置。

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

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

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

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

  1. 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啟動(dòng)Compose。

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

Secret的最佳做法是使用機(jī)密管理服務(wù),例如Vault。 Vault是HashiCorp的一項(xiàng)服務(wù),用于管理對(duì)機(jī)密的訪問。 它還限制了時(shí)間的Secret。 您可以在此處找到有關(guān)Vault的Docker映像的更多信息。

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

[[341889]]

> Keys

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

更新

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

[[341890]]

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

如果您在鏡像中引用基礎(chǔ)鏡像的特定版本,請(qǐng)確保也保持最新。

相關(guān)地,您應(yīng)該使Docker版本保持最新,以進(jìn)行錯(cuò)誤修復(fù)和增強(qiáng),以允許您實(shí)施新的安全功能。

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

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

考慮Docker Enterprise

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

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

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

其他提示

  • 永遠(yuǎn)不要以特權(quán)方式運(yùn)行容器,除非您有特殊需要,例如需要在Docker容器中運(yùn)行Docker,而且您知道自己在做什么。
  • 在Dockerfile中,建議使用COPY而不是ADD。 ADD會(huì)自動(dòng)提取壓縮文件,并可以從URL復(fù)制文件。 COPY沒有這些功能。 盡可能避免使用ADD,這樣您就不會(huì)受到來自遠(yuǎn)程URL和Zip文件的攻擊。
  • 如果您在同一服務(wù)器上運(yùn)行任何其他進(jìn)程,請(qǐng)?jiān)贒ocker容器中運(yùn)行它們。
  • 如果您使用網(wǎng)絡(luò)服務(wù)器和API創(chuàng)建容器,請(qǐng)仔細(xì)檢查參數(shù),以免創(chuàng)建您不想要的新容器。
  • 如果公開REST API,請(qǐng)使用HTTPS或SSH保護(hù)API端點(diǎn)。
  • 考慮使用Docker Bench for Security進(jìn)行檢查,以了解您的容器遵循其安全準(zhǔn)則的程度。
  • 僅將敏感數(shù)據(jù)存儲(chǔ)在卷中,而不能存儲(chǔ)在容器中。
  • 如果將單主機(jī)應(yīng)用程序與網(wǎng)絡(luò)一起使用,請(qǐng)不要使用默認(rèn)的橋接網(wǎng)絡(luò)。 它具有技術(shù)缺陷,不建議用于生產(chǎn)。 如果發(fā)布端口,則可以訪問橋接網(wǎng)絡(luò)上的所有容器。
  • 將Lets Encrypt用于HTTPS證書進(jìn)行服務(wù)。 在此處查看有關(guān)NGINX的示例。
  • 僅在需要讀取卷時(shí),才將卷掛載為只讀。 請(qǐng)參閱此處的幾種方法。

摘要

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

[[341891]]

> Keys

考慮安全性時(shí),請(qǐng)記住AIM:

(1) 訪問管理

  • 避免以超級(jí)用戶身份運(yùn)行。 如果必須使用root,則重新映射。
  • 刪除所有功能,然后重新添加所需的功能。
  • 如果您需要細(xì)粒度的權(quán)限調(diào)整,請(qǐng)進(jìn)入AppArmor。
  • 限制資源。

(2) 鏡像安全

  • 使用官方的,流行的,最小的基本鏡像。
  • 不要安裝不需要的東西。
  • 要求對(duì)鏡像進(jìn)行簽名。
  • 保持Docker,Docker映像和其他與Docker相關(guān)的軟件的更新。

(3) 機(jī)密Secret管理

  • 使用Secret或卷。
  • 考慮一個(gè)機(jī)密管理器,例如vault。

[[341892]]

> Bullseye!

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

不要忘了讓Docker,您的語言和庫(kù),您的圖像以及您的主機(jī)軟件保持更新。 最后,如果您作為團(tuán)隊(duì)的一部分運(yùn)行Docker,請(qǐng)考慮使用Docker Enterprise。

希望本文對(duì)Docker安全性有所幫助。 如果您這樣做了,請(qǐng)?jiān)谀矚g的論壇或社交媒體頻道上與其他人分享它,以便您的朋友也可以找到它!

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2022-03-03 09:30:00

安全容器工具

2014-05-15 09:44:52

2011-10-21 09:56:22

2011-03-25 09:40:57

2014-01-02 09:26:04

2022-12-29 07:40:58

2022-01-14 14:33:20

安全挑戰(zhàn)勒索軟件供應(yīng)鏈

2013-07-26 13:23:28

2020-07-30 07:00:00

API安全威脅零日漏洞

2009-12-21 16:04:16

2014-03-11 16:52:20

2013-07-05 10:18:14

2025-01-22 09:53:26

2014-01-03 11:22:53

2018-08-31 08:11:29

2021-12-29 06:15:01

安全誤區(qū)網(wǎng)絡(luò)安全安全公司

2016-12-26 16:23:24

2011-12-23 10:09:20

2016-02-15 14:32:38

2015-05-08 08:22:27

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)