什麼是容器註冊安全性?

容器註冊中心安全性的重點在於保護容器註冊中心,也就是容器映像的集中儲存與散佈系統。容器註冊中心在容器生態系統中扮演舉足輕重的角色,可確保容器化應用程式的完整性與安全性。正確的容器註冊安全性包括使用可信賴的註冊、實作嚴格的存取控制、監控漏洞,以及確保託管伺服器的安全。此外,它還需求拒絕不安全的連線,並移除陳舊的影像。透過優先考量容器註冊安全性,組織可以保護其容器化環境,並維持使用者和客戶的信任。

 

容器註冊安全性說明

容器註冊表安全性針對容器生態系統的關鍵元件 - 容器註冊表。在更廣泛的 容器安全性敘述中,註冊中心扮演容器映像(容器化應用程式的建構區塊)保管人的角色。因此,集裝箱註冊處不僅僅是一個儲存單位。相反地,它是應用程式影像完整性維護與散佈的關鍵點。

瞭解容器註冊

如您所知,在 容器化環境 中,應用程式連同其相依性會被打包到容器中,使其可移植且易於跨平台部署。容器註冊處可提供一個位置,讓您以一致的方式對容器映像進行版本控制、擷取和部署,從而為此流程服務。

那麼,容器註冊中心就是容器映像的集中儲存和分發系統。該註冊中心可讓開發人員和作業團隊儲存、管理和分享容器映像,他們將用這些映像來建立和部署容器化應用程式和 微服務

公共和私人註冊處

組織可能會結合使用公共與私有容器註冊處來管理容器映像,以及其他工件。

公共註冊中心,例如 Docker Hub 和 GitHub Container Registry(GitHub 套件的子功能),提供了大量的開放原始碼映像,組織可以使用這些映像作為應用程式的基礎。一般而言,任何人都可以存取這些註冊表,讓開發人員很容易找到並使用預先建立的影像。

但組織通常有特定的需求和專屬軟體,因此必須使用私人註冊處。

容器註冊處/儲存庫公有 vs. 私有

圖 1:容器註冊處/儲存庫公有 vs. 私有

私有容器註冊處,例如 Azure Container Registry、Amazon Elastic Container Registry 和 Google Container Registry,提供安全受控的環境,以儲存和管理專有映像及相關工件。只有組織內的授權使用者才能存取這些登錄,以協助確保敏感資訊和客製化影像的安全。

透過結合使用公共與私人註冊中心,組織可以充分利用開放原始碼影像的優點,同時維持對其專屬軟體的控制。這種雙重方法可讓組織最佳化容器管理工作流程,並簡化部署程序。

 

容器註冊安全性的組成部分

鑑於註冊表是容器化環境運作方式的核心 - 組織可以輕易地在註冊表中儲存數以萬計的映像 - 保護註冊表對於 軟體開發生命週期的完整性是不可或缺的。

漏洞可能危及的不只是應用程式。利用設定錯誤的攻擊者可以未經授權存取 CI/CD 系統 ,並橫向移動存取底層作業系統。他們可能會操控合法的 CI/CD 流量,取得敏感的代幣,並移轉到生產環境,在此環境中辨識暴露的憑證可能會讓他們進入組織的網路。

相關文章雲端供應管道攻擊剖析

註冊表安全性首先是只使用可信賴的註冊表和程式庫。持續監控弱點變更,以及確保主機伺服器的安全和實作大量存取政策是基礎。適當的註冊表安全性應該拒絕不安全的連線、標記或移除陳舊的影像,並執行嚴格的驗證與授權限制。

讓我們詳細看看這些可測量的指標。

 

在 CI/CD 中促進圖像和工件的完整性

瞭解與影像和人工製品相關的風險,讓我們了解到實作嚴格檢查以確保其完整性的重要性。考慮實作下列策略。

拒絕不安全的連線

雖然公共登記處可能允許匿名存取容器映像,但為了防止中間人攻擊、未經授權的篡改以及未經授權的敏感資訊存取,您必須維持安全性連線。

若要拒絕不安全的連線,請將您的系統設定為只接受 HTTPS 或 TLS 加密連線等安全通訊協定。首先從可信賴的憑證授權機構 (CA) 為您的網域取得並安裝有效的 SSL/TLS 憑證。然後更新伺服器或服務設定,強制使用 HTTPS 或 TLS,停用 HTTP 等不安全通訊協定。根據您的設定,這可能會涉及調整網路伺服器 (例如 Nginx、Apache)、負載平衡器或應用程式的設定。此外,請考慮使用 HSTS (HTTP Strict Transport Security) 等安全功能,指示瀏覽器在存取您的網站或服務時,始終使用安全連線。

移除陳舊圖片

建立政策來定義陳舊的影像 - 舊於特定時間範圍或未使用一段時間的影像 - 並使用登錄工具或 API 來根據政策列出和篩選影像。例如,在 Docker Registry 中,使用 Docker Registry API 擷取影像元資料,並依據最後推送日期或標籤進行篩選。在其他註冊表中,也可能有類似的 API 或 CLI 工具。找出陳舊的影像後,使用適當的指令或 API 刪除它們,並確保遵循註冊表的垃圾回收最佳作法。

避免第三方註冊中的 IAM 問題

身分與存取管理 (IAM) 對組織而言至關重要,尤其是在像 GitHub 之類的原始碼控制管理系統 (SCM),程式碼儲存庫儲存了寶貴的程式碼和資產。不適當的 IAM 會導致 CI/CD 管道中的安全風險。為了最佳化儲存庫的安全性和管理,組織可以使用單一登入 (SSO) 和跨領域身分管理 (SCIM) 系統來管理存取控制。然而,SSO 只適用於 GitHub 企業版,其他授權可能會有風險。

為了減少涉及 GitHub 帳戶中私人電子郵件位址、ghost GitHub 帳戶和未完全離職的問題,請強制執行雙重因素驗證 (2FA)、建立專屬企業帳戶的上線協議,並維護使用者帳戶清單。對於已啟用 SSO 的組織而言,實作 SCIM 可確保使用者自動取消配置,並消除透過陳舊憑證進行存取的情況。處理 IAM 風險有助於保護儲存庫、CI/CD 生態系統,並在所有系統中維持高安全層級。

相關文章GitHub 組織中的三大 IAM 風險

採用足夠的驗證與授權限制

授予超過儲存庫所需權限的身分,會為權限升級帶來機會,並可能導致未經授權的程式碼變更、竄改建立程序,以及存取敏感資料。自動化可協助驗證存取控制、檢查使用者權限,並找出潛在的弱點,讓組織能夠制定例行性的主動措施,例如:

  • 分析和映射整個工程生態系統中的所有身分。對於每個身分,不斷地對應身分提供者、授予的權限和使用的權限。確保分析涵蓋所有計劃存取方法。
  • 移除環境中各個系統中每個身分的不必要權限。
  • 設定停用或移除陳舊帳戶的可接受期限。停用並移除超過此不活動期限的身分。
  • 映射所有外部合作者,並根據最少特權原則調整其身份。在可能的情況下,為人力帳戶和程式化帳戶授予有到期日的權限。
  • 禁止員工使用個人電子郵件地址或來自非組織所有網域的地址存取 SCM、CI 或其他 CI/CD 平台。監控不同系統中的非網域位址,並移除不符合規定的使用者。
  • 禁止使用者自行註冊到系統,並根據必要性授予權限。
  • 避免將系統中的基本權限授予所有使用者,以及自動分配使用者帳號的大型群組。
  • 為每個特定情境建立專用帳戶,而非使用共用帳戶,並針對指定情境授予所需的確切權限集。

實作安全儲存

建立安全的防篡改儲存庫,以儲存工件。啟用版本管理以維護元件變更的歷史記錄,並實作即時監控以追蹤和警示可疑活動。如果有受損害的工件,請設定系統以方便回滾到先前已知的良好版本。

從開發到生產進行完整性驗證檢查

實作流程和技術,以驗證整個軟體交付鏈的資源完整性。當開發人員產生資源時,應該使用外部資源簽署基礎架構來簽署。在後續的管道階段使用資源之前,請與簽章機構交叉檢查其完整性。

代碼簽署

SCM 解決方案可為每個貢獻者使用唯一的金鑰簽署提交,防止未簽署的提交在管道中繼續進行。

工件驗證軟體

專為簽署與驗證程式碼和人工成品而設計的工具,例如 Linux 基金會的 Sigstore,可以阻止未經驗證的軟體在管道中繼續前進。

組態漂移偵測

實作偵測組態偏移的措施,例如雲端環境中的資源未使用已簽署的 基礎架構即程式碼範本 進行管理。這種漂移可能表示部署來自不受信任的來源或程序。

採用加密簽章

在 CI/CD 管道的每個階段使用公開金鑰基礎架構 (PKI) 來加密簽署工件。這種做法是在使用前針對可信賴的憑證授權機構來驗證簽章。配置您的 CI/CD 管道以拒絕簽名無效或遺失的工件,從而降低部署篡改資源或未授權變更的風險。

僅使用安全性高的容器映像

容器映像可能包含漏洞,攻擊者可利用漏洞未經授權存取容器及其主機。為了防止這種情況發生,請使用來自可靠來源的安全、可信賴的容器映像,並定期掃描它們。從公開註冊表部署容器時,首先掃描容器是否有惡意軟體和漏洞尤為重要。

強制執行多來源驗證

採用多源驗證策略,利用各種來源(例如校驗和、數位簽章和安全雜湊演算法)以及可信賴的儲存庫來驗證人工成果的完整性。不斷更新加密演算法和金鑰,以維持其有效性。

第三方資源驗證

納入建置與部署管道的第三方資源,例如在建置過程中執行的指令碼,應該經過嚴格的驗證。在使用這些資源之前,先計算其切細值,然後與資源提供者提供的官方切細值進行比較。

整合安全掃描

CI/CD 管道在建立映像時,應該只使用經過審核的程式碼 (生產已核准)。在 CI/CD 管道中納入弱點掃描工具,以及 軟體組成分析 (SCA)靜態應用程式安全測試 (SAST ),以確保影像完整性,然後再將影像推送到註冊中心,讓生產部署從中取得影像。請務必遵循最佳實務。例如,在移除所有不必要的軟體元件、程式庫、組態檔案、機密等之前,請勿建立映像。

採取保守、謹慎的方法可讓團隊在開發過程中及早解決弱點,並維持高水準的程式碼品質,同時降低安全性事故的風險。選擇能夠整合所有註冊表類型的容器映像掃描解決方案。Prisma Cloud 等平台可為管理員提供彈性的一站式影像掃描解決方案。

映像分析沙箱

在容器化應用程式的開發和部署過程中,使用映像分析沙箱可以強化您的容器安全性策略,讓您可以安全地從外部套件庫拉取並執行可能包含過期、脆弱套件和內嵌惡意軟體的容器映像。

沙箱的功能可讓您在受控的環境中掃描可疑的異常容器行為,例如加密貨幣挖礦、連接埠掃描、修改過的二進位檔,以及核心模組修改。您可以揭露風險,並找出埋藏在軟體供應鏈中的 可疑依賴關係 ,否則靜態分析可能會遺漏這些 依賴關係 。

  • 擷取 容器的詳細 執行時設定檔
  • 評估影像的風險
  • 在工作流程中納入動態分析

建立驗證政策與稽核時間表

為了確保適當的影像與工件完整性驗證,組織應建立明確的政策,定義驗證流程。一經建立,即定期稽核內部政策的合規性,以找出並處理弱點以及不符合規定的地方。不斷地監控和分析有助於偵測異常和未經授權的活動。

 

貨櫃註冊安全性一覽表

  • 使用可信賴的登錄和資料庫
  • 確保主機伺服器的安全,並實作健全的存取政策
  • 實作充分的驗證與授權限制
  • 建立安全的藝術品儲存空間
  • 在整個 CI/CD 過程中執行完整性驗證檢查
  • 採用加密簽署
  • 強制執行多重來源驗證
  • 驗證第三方資源
  • 在 CI/CD 管道中整合安全掃描
  • 建立驗證政策與定期稽核排程

 

集裝箱註冊常見問題

持續整合 (CI) 是一種開發實務,開發人員經常將程式碼變更合併到中央儲存庫,然後進行自動化建置和測試。CI 的主要目標是儘快偵測並修復整合錯誤,改善軟體品質並縮短交付時間。自動化工具會在每次整合時執行測試,以確保新程式碼不會破壞或降低應用程式的效能。CI 是現代軟體開發的基本元件,可讓團隊在開發流程中維持高速度與敏捷性。
不斷地部署 (CD) 是一種軟體釋出程序,在此程序中,每一項通過自動測試階段的變更都會自動部署到生產環境中。它透過在建立階段之後將所有程式碼變更部署到測試或生產環境來擴充持續整合。CI 可確保變更快速、一致地流入生產,讓團隊能夠快速、可靠地向客戶提供功能、更新和修正。CD 將手動介入減至最少,使部署流程更有效率。

CI/CD 管道 將軟體從版本控制到最終使用者手中所涉及的步驟自動化。它包含持續整合 (CI) 和持續部署 (CD),可將軟體交付和基礎結構變更的過程自動化。管道通常包括程式碼編譯、單元測試、整合測試和部署等階段。這種自動化可確保軟體永遠處於可部署狀態,促進快速可靠的軟體發佈週期。CI/CD 管道對 DevOps 實務而言是不可或缺的,可讓團隊更頻繁、可靠地交付程式碼變更。

原始碼控制管理 (SCM) 是追蹤原始碼和其他開發相關資產變更的系統,可讓開發人員進行協作、編製程式碼版本,以及維護程式碼變更的歷史。受歡迎的 SCM 工具包括 Ansible、GitHub、Mercurial 和 Puppet。
  • SCM 有助於維持用於建立容器映像的程式碼的一致性和可追蹤性,讓開發人員可以輕鬆識別用於建立容器映像的特定程式碼版本。
  • SCM 可讓開發人員協同處理程式碼,確保建立並儲存在註冊中心的容器映像符合組織的品質需求。
  • SCM 工具透過與 CI/CD 管道整合,並將建立、測試和推送容器映像至註冊中心的流程自動化,來強化工作流程。
影像簽署是對容器映像進行數位簽署,以驗證其真實性和完整性的過程。透過在影像上附加數位簽章,影像簽章可確保影像未被竄改,且來自可信賴的來源。Docker Content Trust 和 Notary 等工具常用於簽署容器映像,為容器化應用程式部署提供多一層安全性。
內容信任是指確保只接收、傳輸和部署信任內容的安全作法。在容器化應用程式的情況下,它涉及到使用數位簽章來驗證容器映像的完整性和來源。內容信任機制可確保圖像未經篡改且來自經驗證的來源,從而降低中間人攻擊和惡意程式碼注入等風險。實作內容信任對於維護雲端原生環境中軟體供應鏈的安全性至關重要。
映像加密涉及對容器映像進行編碼,以保護其中包含的敏感資料和配置。此程序可確保影像只能由擁有解密金鑰的實體存取或使用,以防止未經授權的存取和資料外洩。當影像在可能不安全的環境中儲存或傳輸時,例如公共雲端儲存或共用登錄,影像加密就顯得特別重要。它增加了一個關鍵的安全層,保護容器化應用程式中的專有資訊和合規性敏感資料。
映像保留政策是組織設定的規則,用來管理註冊表中容器映像的生命週期。這些政策決定影像的保存時間、應該何時歸檔或刪除,以及保留哪些版本。實作此類政策有助於管理儲存成本、維持合規性以符合資料管理標準,並確保只有相關的最新映像可供部署。

webhook 是一種使用自訂回呼擴充或改變網頁或網路應用程式行為的方法。這些回呼可能會由第三方使用者和開發人員進行維護、修改和管理,而他們不一定能夠存取網頁或應用程式的原始碼。在雲端運算和 DevOps 中,webhooks 用於在儲存庫或部署環境中發生特定事件時,觸發 CI/CD 管道等自動化工作流程。Webhooks 可實現即時通知和自動反應事件,增強雲端服務和工具之間的自動化和整合。

容器技術中的映像標籤是套用在註冊表中容器映像的標籤。它可作為識別同一映像的不同版本的機制,例如最新、穩定、1.2.3 或 beta。標籤允許開發人員和操作人員參考影像的特定版本進行部署,確保應用程式部署的正確性和一致性。使用映像標籤對於容器化環境中的版本控制和部署管理至關重要。
Quay 是 Red Hat 推出的私有容器映像註冊中心,可讓使用者建立、儲存和散佈容器映像。它提供先進的功能,例如影像漏洞掃描、地理複製和廣泛的存取控制。Quay 旨在與 CI/CD 系統整合,為 Kubernetes 和其他容器環境提供安全且有效率的容器映像處理方式。
Docker Content Trust (DCT) 是 Docker 中用於簽署和驗證容器映像的安全性功能。它可確保所使用的影像完全符合出版商的原意,未經修改,並已經過驗證。DCT 使用 The Update Framework (TUF) 和 Notary 進行安全影像簽署與驗證。啟用時,Docker 用戶端會驗證所有拉取的映像的完整性和發行者,提供防止使用篡改映像的保障。

Notary 是一個開放原始碼工具,提供一個架構用於發佈和驗證內容的簽章,例如容器映像。它實作 The Update Framework (TUF) 規格,以確保內容傳送與更新的安全性。Notary 可確保使用者收到的內容完全符合出版商的原意,防止未經授權的修改。

Notary 通常與 Docker Content Trust 結合使用,以簽署和驗證 Docker 映像。

更新架構 (TUF) 是專為保護軟體更新系統而設計的規格,可防止常見的攻擊,例如金鑰洩密和中間人攻擊。TUF 提供了一個靈活的框架,開發人員可以將其整合到軟體更新系統中,確保軟體更新的完整性和真實性。這在分散式環境中尤其重要,因為軟體通常是透過不安全的管道傳送。TUF 的設計有助於防止竄改更新檔案,確保只套用安全、經授權的更新。
容器註冊表 API 是一組程式介面,可讓使用者以程式化的方式與容器註冊表互動。它可以執行推送、拉動、列出和刪除容器映像等任務。此 API 對於在容器化環境中自動化工作流程至關重要,可與持續整合和部署管道進行無縫整合。透過使用容器註冊 API,開發人員和作業團隊可以有效率地管理容器映像,提高生產力並確保部署的一致性。
容器註冊上下文中的不可變儲存庫是一種儲存模型,一旦映像被推送,就無法修改或刪除。不可變更的儲存庫對於維持一致且安全的軟體供應鏈至關重要,尤其是在合規性和可追蹤性非常重要的環境中。它們可防止意外或惡意的修改,並確保影像的特定版本永遠可以檢索。
映像推廣是以受控和可追蹤的方式將容器映像從一個環境移動到另一個環境的過程,通常是 CI/CD 管道的一部分。它涉及將映像推進到不同階段,例如從開發到測試再到生產,確保只有經過驗證和測試的映像才會被部署。影像推廣作業可強化部署的可靠性與穩定性,因為它們會在每個階段執行品質檢查與驗證。
映像鏡像是指將容器映像從一個註冊表複製到另一個註冊表的過程。這種做法用於冗餘、效能最佳化,以及合規性的資料主權需求。透過鏡射影像,組織可確保主註冊中心發生故障或無法存取時的可用性。它還可以將影像放置在更靠近使用的地方,減少延遲,從而加快部署時間。
地理複製涉及在多個地理位置複製資料,以提高資料可用性和災難復原。在雲端運算中,可確保應用程式即使在區域停電或網路問題的情況下,仍可維持可用性與效能。地理複製提供備援,確保不同區域的資料完整性和可用性。
集裝箱註冊代理可作為私有網路和公共集裝箱註冊處之間的中介。它在本地緩存容器映像,減少重複從公共註冊表下載映像的需要。這不僅加快了部署過程,還降低了頻寬使用量,提高了可靠性。容器註冊代理在有嚴格網路安全性控制或有限網際網路存取的環境中特別有用,因為它可以在遵守安全性政策的同時,有效管理容器映像。
Skaffold 是一個開放原始碼的指令列工具,可協助 Kubernetes 應用程式不斷地進行開發。它將建立、推送和部署應用程式的工作流程自動化,讓開發人員可以即時迭代應用程式。Skaffold 負責處理建立容器映像、將其推送至註冊中心,以及部署至 Kubernetes 叢集的工作流程。它設計用於開發生命週期的不同階段,從本地開發到不斷地整合。Skaffold 簡化了開發和部署流程,使其更加高效和一致。
Flux 是為 Kubernetes 實作 GitOps 的開放原始碼工具,可確保叢集的狀態與儲存在 Git 倉庫中的組態相符。它會自動將儲存庫中的新變更套用至叢集,實現不斷地自動部署。Flux 支援複雜的工作流程和多環境設定,提供自動化更新、回退和警示等功能。它增強了 Kubernetes 部署的可靠性和一致性,符合宣告式基礎架構和版本控制配置的原則。
上一頁 什麼是容器安全性?
下一頁 什麼是容器協調?