
Apache Airflow 的 Docker 映像檔¶
為了方便在生產環境中部署,社群發布了可直接用於生產環境的參考容器映像檔。
Apache Airflow 社群發布了 Docker 映像檔,這些映像檔是 Apache Airflow 的 參考映像檔
。每次發布新版本的 Airflow 時,都會在 apache/airflow DockerHub 中為所有支援的 Python 版本準備映像檔。
您可以在那裡找到以下映像檔(假設 Airflow 版本為 2.10.4
)
apache/airflow:latest
- 最新發布的 Airflow 映像檔,使用預設 Python 版本(目前為 3.8)apache/airflow:latest-pythonX.Y
- 最新發布的 Airflow 映像檔,使用特定 Python 版本apache/airflow:2.10.4
- 版本化的 Airflow 映像檔,使用預設 Python 版本(目前為 3.8)apache/airflow:2.10.4-pythonX.Y
- 版本化的 Airflow 映像檔,使用特定 Python 版本
這些是「參考」常規映像檔。它們包含使用者經常使用的大多數常用額外套件、相依性和提供者,當您只想試用 Airflow 時,它們非常適合「試用」。
您也可以使用「精簡版」映像檔,其中僅包含核心 Airflow,大小約為「常規」映像檔的一半,但您需要透過 建置映像檔 單獨新增您需要的所有 套件額外功能的參考 和提供者。
apache/airflow:slim-latest
- 最新發布的 Airflow 映像檔,使用預設 Python 版本(目前為 3.8)apache/airflow:slim-latest-pythonX.Y
- 最新發布的 Airflow 映像檔,使用特定 Python 版本apache/airflow:slim-2.10.4
- 版本化的 Airflow 映像檔,使用預設 Python 版本(目前為 3.8)apache/airflow:slim-2.10.4-pythonX.Y
- 版本化的 Airflow 映像檔,使用特定 Python 版本
作為便利套件提供的 Apache Airflow 映像檔已針對大小進行最佳化,它僅提供最基本的已安裝額外套件和相依性,在大多數情況下,您需要擴充或自訂映像檔。您可以在 套件額外功能的參考 中查看所有可能的額外套件。Airflow 生產映像檔中使用的額外套件組可在 Dockerfile 中找到。
然而,Airflow 擁有 60 多個社群管理的提供者(可透過額外套件安裝),並且某些預設安裝的額外套件/提供者並非所有人都在使用,有時需要其他額外套件/提供者,有時(實際上非常頻繁)您需要新增自己的自訂相依性、套件甚至自訂提供者。您可以在 建置映像檔 中學習如何操作。
生產映像檔是在 DockerHub 中從發布版本和候選發布版本建置的。也有從分支發布的映像檔,但它們主要用於開發和測試目的。有關詳細資訊,請參閱 Airflow Git 分支。
在發布時修復映像檔¶
發布的「版本化」參考映像檔在我們發布 Airflow 版本時大多是 固定的
,我們僅在特殊情況下更新它們。例如,當我們發現可能阻止重要的 Airflow 或嵌入式提供者的功能運作的相依性錯誤時。在正常情況下,映像檔在發布後不會更改,即使發布了新版本的 Airflow 相依性也是如此 - 即使這些版本包含重要的安全性修復程式。Airflow 發布的流程旨在在適用的情況下自動升級相依性,但僅在我們發布新版本的 Airflow 時,而不是針對已發布的版本。
如果我的安全性掃描顯示映像檔中存在嚴重和高風險漏洞,我該怎麼辦?¶
我們經常聽到使用者提出的問題,他們在映像檔上使用各種安全性掃描器,並發現映像檔中存在一些嚴重和高風險漏洞 - 並非來自 Airflow,而是來自其他組件。一般而言,在映像檔發布並修復後發現此類漏洞是正常且預期的 - 正是因為我們在發布後沒有更新映像檔,如上所述。此外,有時即使是最新版本也包含我們使用的基礎映像檔或我們使用的相依性中尚未修復的漏洞,並且由於我們的一些提供者有限制且尚未設法升級,因此我們無法升級,並且我們對此無能為力。因此,即使是我們映像檔的最新版本,也可能存在一些尚未修復的高風險和嚴重漏洞。
在這種情況下,您可以做什麼?
首先 - 您應該知道您不應該做什麼。
請勿將包含掃描結果的私人電子郵件發送給 Airflow 安全團隊,並詢問該怎麼辦。Airflow 的安全團隊專門處理 Airflow 本身中未公開的漏洞,而不是相依性或基礎映像檔中的漏洞。安全電子郵件僅應用於私下報告任何可能透過 Airflow 利用的安全性問題。這在我們的 安全政策 中得到了很好的解釋,您可以在其中找到更多詳細資訊,包括需要提供可重現的場景以及每封電子郵件提交一個問題。切勿在一封電子郵件中提交多個漏洞 - 這些電子郵件會立即被拒絕,因為它們使包括報告者在內的每個人的問題處理過程變得更加困難。
也請勿開啟 GitHub Issue 並附上掃描結果,並詢問該怎麼辦。GitHub Issues 用於報告 Airflow 本身的錯誤和功能請求,而不是用於請求針對協力廠商組件的安全性掃描的幫助。
那麼您的選擇是什麼?
您有四個選擇
建置您自己的自訂映像檔,遵循我們在那裡分享的範例 - 使用最新的基礎映像檔,並可能手動升級您想要升級的相依性。在 建置映像檔 中有很多範例,您可以遵循這些範例。您可以將「精簡版」映像檔用作映像檔的基礎,而不是將映像檔基於安裝了許多額外套件和提供者的「參考」映像檔,您可以僅安裝您實際需要的內容並升級某些相依性,否則這些相依性將無法升級 - 因為某些提供者程式庫有限制且尚未設法升級,並且我們對此無能為力。這是建置映像檔最靈活的方式,您可以建置您的流程以將其與快速升級到最新 Airflow 版本結合使用(請參閱下面的第 2 點)。
等待新版本的 Airflow 並升級到它。Airflow 映像檔會在發布時更新為最新的「不衝突」相依性並使用最新的「基礎」映像檔,因此您在我們發布映像檔/發布版本時在參考映像檔中擁有的內容是當時可用的「最新和最棒」的內容,以及我們使用的基礎平台(Debian Bookworm 是我們使用的參考映像檔)。這是您可以採取的良好策略之一 - 建置一個定期升級 Airflow 版本的流程 - 在社群發布後儘快升級,這將幫助您跟上相依性中的最新安全性修復程式。
如果我們使用的基礎平台(目前為 Debian Bookworm)不包含您想要的最新版本,並且您想要使用其他基礎映像檔,您可以查看最新的
Dockerfile
中安裝的系統相依性和腳本,並從中獲得靈感,並建置您自己的映像檔或複製並修改以滿足您的需求。請參閱 Dockerfile 以取得最新版本。研究漏洞是否會影響您。即使存在具有高風險或嚴重漏洞的相依性,也並不意味著它可以在 Airflow 中(或特別是在您使用 Airflow 的方式中)被利用。如果您確實有一個可重現的場景,說明如何在 Airflow 中利用漏洞,您當然應該私下向安全團隊報告。但是,如果您沒有可重現的場景,請做一些研究,嘗試了解漏洞對 Airflow 的影響。如果您的研究表明 Airflow 可能不受影響,則該研究可能會產生公開的 GitHub Discussion,您可以在其中討論漏洞的影響,如果您發現如何利用漏洞的可重現場景,則可以發送私人安全電子郵件。
我該如何公開討論映像檔中的公開 CVE?
安全性掃描報告 Airflow 協力廠商組件中的公開漏洞。由於這些已經是公開漏洞,這是您可以談論的事情,但其他人也在談論。因此,您可以先自行研究。嘗試查找有關這些問題的討論、其他人如何處理這些問題,甚至嘗試探索該漏洞是否可以在 Airflow 中被利用。為了幫助其他人了解漏洞對 Airflow 的影響,這是您可以為社群做出的非常有價值的貢獻。我們非常感謝我們的商業使用者這樣做,因為 Airflow 由志願者維護,因此如果您或您的公司可以花費一些時間和安全研究人員的技能來幫助社群了解漏洞對 Airflow 的影響,這將是對社群的絕佳貢獻,也是回饋您的公司免費使用的專案的方式。
您可以自由公開討論它,開啟一個 GitHub Discussion,提及您的發現和您迄今為止所做的研究。理想情況下(作為對 Airflow 的貢獻方式),您應該解釋您公司安全團隊的發現,以幫助研究和了解漏洞對 Airflow(以及您的使用方式)的影響。再次強調 - 強烈建議每個漏洞開啟一個討論。您不應批量發布掃描結果 - 這對討論沒有幫助,如果您嘗試在一個討論串中討論所有問題,您將不會獲得有意義的答案。
是的 - 我們知道複製和貼上您的結果並詢問其他人該怎麼做很容易,但這樣做很可能會導致沉默,因為社群中此類行為被視為相當自私的方式,即利用其他志願者的時間來解決您的問題,而沒有花費您的時間來讓他們更容易提供幫助。如果您真的想從社群獲得幫助,請將您的討論重點放在特定的 CVE 上,提供您的發現 - 包括詳細分析您的報告並找到哪些二進位檔案和基礎映像檔導致掃描器報告漏洞。請記住,只有您可以存取您的掃描器,您應該提供盡可能多的有幫助的資訊,以便其他人可以對其發表評論。表明您已完成功課,並且您為社群帶來了有價值的資訊。
針對此類問題開啟 GitHub Discussion 也是一種以公開透明的方式與維護者和安全團隊溝通的絕佳方式 - 而無需回復到私人安全郵件列表(如上所述,該郵件列表有不同的用途)。如果在此類討論之後,有一種方法可以從掃描的映像檔中刪除此漏洞 - 太棒了,您甚至可以貢獻一個 PR 到 Dockerfile,以從映像檔中刪除該漏洞。也許這樣的討論將導致一個 PR,允許 Airflow 升級到更新的相依性以修復該漏洞或完全刪除它,或者也許已經有一種方法可以減輕它,或者也許已經有人在處理修復它的 PR。所有這些都可以在(並且應該)在 GitHub Discussion 中公開透明地討論,而不是透過私人安全電子郵件,也不是 GitHub Issues,後者專門用於處理 Airflow Issues,而不是協力廠商組件的公開安全性問題。
支援¶
參考 Docker 映像檔支援以下平台和資料庫
Intel 平台 (x86_64)¶
Postgres 用戶端
MySQL 用戶端
MSSQL 用戶端
ARM 平台 (aarch64)¶
ARM 支援是實驗性的,可能會隨時變更。
Postgres 用戶端
MySQL 用戶端 (MySQL 8)
MSSQL 用戶端
請注意,arm 上的 MySQL 透過 MariaDB 用戶端程式庫提供實驗性支援。
用法¶
AIRFLOW_HOME
預設設定為 /opt/airflow/
- 這表示 DAG 預設位於 /opt/airflow/dags
資料夾中,而日誌位於 /opt/airflow/logs
中
預設工作目錄為 /opt/airflow
。
如果未設定 AIRFLOW__DATABASE__SQL_ALCHEMY_CONN
變數,則會在 ${AIRFLOW_HOME}/airflow.db
中建立 SQLite 資料庫。
有關啟動 Airflow 的範例命令,請參閱:執行命令。
Airflow 需要許多組件才能運作,因為它是一個分散式應用程式。因此,您也可能對在 Docker Compose 環境中啟動 Airflow 感興趣,請參閱:在 Docker 中執行 Airflow。
您也可以在 Helm Chart 中使用此映像檔。