2017 年 5 月

第 32 卷,第 5 期

此文章由机器翻译。

DevOps - 透過 InSpec 達成合規性即程式碼

Michael Ducy | 2017 年 5 月

法規遵循是現實生活的每個企業。在此同時,競爭壓力會增加隨著遊戲變更新技術和數位服務的客戶的期望。可產業高速傳遞新產品和服務,同時仍能滿足法規遵循其遵從的義務?

答案仍是適用的。解決方法是將內嵌法規到軟體產品線,其以我們嵌入其他的品質,例如在汽車框架僵硬或銀行應用程式的來回回應時間的方式。

部署程序中不可或缺的一部分進行相容性時,相容性表示成程式碼。就像系統的設定已移往基礎結構,程式碼 (例如 PowerShell 期望狀態組態或 Chef),您可以管理相容性使用程式設計語言。

InSpec 是開放原始碼專案,可讓您用人和機器讀得懂的語言定義合規性要求。在您編寫好要求後,可以當作稽核系統的自動化測試加以執行。InSpec 提供本機代理程式,以及完整的遠端測試支援。

InSpec 支援各種不同平台,從 Windows 到 Linux。[圖 1列出一些受歡迎的。(支援的平台的完整清單位於 InSpec 網站, inspec.io。)

[圖 1 的熱門 InSpec 所支援的平台清單

平台 版本
AIX 6.1, 7.1, 7.2
Mac OS X 10.9, 10.10, 10.11
Oracle Enterprise Linux 5, 6, 7
Red Hat Enterprise Linux (和變種) 5, 6, 7
Solaris 10, 11
Windows 7、 8、 8.1、 10、 2008、 2008 R2、 2012、 2012 R2,2016年
Ubuntu Linux  
SUSE Linux Enterprise Server 11, 12
OpenSUSE 13.1, 13.2, 42.1
HP-UX 11.31

InSpec 廣大平台支援,讓它整個基礎結構管理相容性的完整解決方案。由於 InSpec 是開放原始碼專案,有些作業系統廠商貢獻他們自己的平台的支援。比方說,IBM 投稿大部分其 AIX 作業系統的支援。

開始使用 InSpec

很容易就能開始使用 InSpec。InSpec 納入 Chef 開發套件 (Chef 粗),或您可以從 Chef 下載網站,以在各種平台的套件 downloads.chef.io/inspec。一旦您已下載套件並安裝它,就可以開始撰寫相容性規則。(請注意,相容性規則,通常由安全性小組的替代名稱稽核控制)。

InSpec 規則很容易撰寫一旦您了解的格式。以資源為開頭的所有規則。資源是您想要測試的組態項目。例如,以下是使用 windows_feature 資源 InSpec 規則︰

describe windows_feature('DHCP Server') do
  it { should_not be_installed }
end

Windows_feature 資源宣告 Windows 功能及測試,以查看是否符合特定的組態的名稱。在此範例中,此規則會測試 DHCP 伺服器未安裝。

有許多標準的片段,您的網路,例如檔案、 目錄、 使用者、 群組及登錄機碼的資源。如需完整清單,您可以參考 InSpec 文件,網址 bit.ly/2n3ekZe。輕鬆可擴充 InSpec 與您自己的資源,來檢查不支援的現成或特定應用程式特定的設定項目。

包括中繼資料

InSpec 可讓您包含中繼資料的相容性規則。中繼資料可協助您將繫結的測試,以特定法規或安全性需求。傳統上,您會發現發行文件、 試算表或其他格式時可採取動作的相容性需求。這些官方的相容性文件中的資訊非常重要的因為它可讓系統管理員的環境為何相容性原則很重要,但它通常不方便可。

[圖 2顯示 InSpec 規則,其中包含此資訊做為中繼資料的範例。

[圖 2 範例 InSpec 具有相容性規則的相關中繼資料

control 'sshd-8' do
  impact 0.6
  title 'Server: Configure the service port'
  desc '
    Always specify which port the SSH server should listen to.
    Prevent unexpected settings.
  '
  tag 'ssh','sshd','openssh-server'
  tag cce: 'CCE-27072-8'
  ref 'NSA-RH6-STIG - Section 3.5.2.1',
    url: 'https://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf'
  describe sshd_config do
    its('Port') { should eq('22') }
  end
end

這個範例是呼叫 ssh-8 規則 (或控制項)。影響、 標題和 desc 欄位定義描述規則的重要性、 其用途,以及描述中繼資料。[標記] 欄位包含選擇性資訊和 ref 欄位參考外部文件。

[描述] 欄位表示包含規則區塊的開頭。要測試此資源是 sshd_config,是在 Linux 和 Unix 平台上的 OpenSSH 服務精靈。此規則測試如果 SSH 伺服器會接聽通訊埠 22。

有三個重點,要注意。首先,不含中繼資料,規則將被隔離,而缺少內容。接下來,所有相關的資訊就會包含與規則。您沒有檢查它為其他文件。最後,InSpec 語言是非常容易閱讀。符合性專員人員可能不是程式設計人員,例如專案關係人可以了解規則的測試和中繼資料會告訴他們為什麼有規則存在,以及哪些需求它稽核。所以即使可能會想要提供自己的規則。

使用開放原始碼的設定檔

若要讓生活更輕鬆,InSpec 會有許多開放原始碼可使用設定檔已包含所有相關規則和中繼資料。比方說,是 DevSec Linux 基準設定檔和 DevSec Apache 基準設定檔。您可以下載這些設定檔在 bit.ly/2mBVXNr

InSpec 提供業界為基礎的開放原始碼設定檔的許多標準的中心的網際網路安全性 (CI) 基準測試系統安全性。雖然 CI 基準提供不錯的起點,您可能需要進行修改以符合您特定的相容性的需求。InSpec 可讓您建立自己的設定檔,並繼承其他設定檔中的規則。InSpec 也可讓您略過從設定檔的規則。這是很有用,因為您不需要直接修改 InSpec 提供的開放原始碼設定檔。您可以建立繼承的開放原始碼設定檔,您需要您的設定檔,並接著略過不適用的規則。當發行新的開放原始碼的設定檔時,您可以只是更新開放原始碼規則的版本,而不需要修改您的自訂規則。

掃描主機

InSpec 使用用戶端-伺服器模式,這表示您可以稽核遠端系統的集中式的工作站。也有選項可讓 InSpec 連續自動化系統,例如 Chef 自動化的過程中執行的掃描 (chef.io/automate)。沒有一個簡單的例子,本文後面這個選項。

若要執行相容性掃描,您需要目標系統,也就是您想要測試的伺服器和相容性設定檔,也就是您用來測試目標系統的規則集。此範例中,目標系統是 Windows 伺服器,以及所定義的 GitHub 儲存機制中儲存的 CI,我將使用 Windows 開發人員秒之基準。[圖 3 InSpec 舉例說明執行。

InSpec 執行的範例
圖 3 在 InSpec 回合的範例

如果您檢查結果,執行就會顯示有數目不符合相容性的 CI 基準的組態設定。值得注意的是正在測試的伺服器您可以立即看到如何 InSpec 可讓您掌握您的網路符合貴公司的安全性原則的程度,主要雲端提供者所提供的預設 Windows Server 2016 映像。

如果您看一下第一個測試失敗的實際 InSpec 規則,ci-強制執行的密碼-歷程記錄-1.1.1,您可以看到此規則會將轉譯成可採取動作︰

control 'cis-enforce-password-history-1.1.1' do
  impact 0.7
  title '1.1.1 Set Enforce password history to 24 or more passwords'
  desc 'Set Enforce password history to 24 or more passwords'
  describe security_policy do
    its('PasswordHistorySize') { should be >= 24 }
  end
end

測試失敗原則要求,因為會有密碼歷程記錄的至少 24 的項目,但事實上,沒有記錄就會完全保留。很明顯地,目前的組態設定必須變更為符合規則。

使用自動的發行管線與 InSpec

InSpec 可以單獨使用,協助您管理您系統的相容性,但是 InSpec 也可以執行一系列的自動化測試,做為標準發行管線的一部分執行。InSpec 測試可以輕鬆地新增做為品質把關,相容性。本節中,我將使用 InSpec 使用 Chef 自動化。

Chef 自動化是整合式的解決方案來管理和部署基礎結構和應用程式。它將包含 InSpec 和 Chef,也就是基礎結構自動化的開放原始碼產品的基礎上。Chef 自動變更管理提供自動化的管線,並包含確保這些變更的可見性的功能。

使用 Chef 自動化,您可以視需要執行 InSpec 相容性測試、 儀表板上查看結果和修復問題。每當您需要它們時,您也可以產生稽核報告。

例如,修補程式管理是其中一個最重要的 IT 安全性事宜。很重要,您可以找出過時的系統,並將它們升級。最法規架構,例如付款卡業資料安全性標準 (PCI DSS),則需要它。若要確保您的系統是最新,您可以使用 Chef 自動化整個程序中,管理從初始的識別來補救。

您可以先掃描系統是否符合原則是,他們的軟體是最新的。您會收到報告,告知您的基礎結構的狀態。[圖 4顯示這種報告的範例。它會在網路中,以符合法規需求以及顯示伺服器的狀態。

符合性報告的範例
[圖 4 相容性報告範例

報表之後,您可以建置您的修復,然後在本機測試部署到生產環境之前,先使用 Chef 粗。Chef 粗包含建立和測試您的程式碼所需的所有工具。

您滿意所做的變更之後,您可以透過 Chef 自動化部署補救程序管線傳送它們。此管線包含測試您的變更,並確定其運作的階段。在管線內的兩個手動閘道。其中一個是程式碼檢閱,其他程式碼將發行的環境。您可能需要符合性與安全性人員在一個或兩個點以確定它們積極參與發行程序。

最後,如果所做的變更已通過管線中的所有階段,您可以將它們傳送至 Chef 伺服器。Chef 伺服器可以開始將新節點。Chef 自動化可讓您的可見性的所有項目,會在部署之後,基礎結構中發生。

自動化與 InSpec 相容性

在印度最大銀行之一已開始使用 InSpec 其金融服務部門,負責進行大部分的銀行交易中。相容性很重要,它。除法運算的大約 500 HP-UX 伺服器構成其開發、 測試和生產環境。

當然,有些許多法規和銀行必須遵循安全性指導方針,小組會檢查以確定每個月其伺服器相容。會有大約 100 的檢查,且之前 InSpec,它們手動執行。此程序是非常困難。小組必須登入每一部機器、 檢查組態設定、 在紙張上提供的結果和其記錄。完成單一檢查花了約 5 分鐘,所以檢查只有一個伺服器取得約 8 小時。

團隊開始整天使用自動化的履約 InSpec,影響時出現。它無法看到整個掃描結果,以分鐘為單位。小組可以看到多少部伺服器都在相容性,多少未出現在相容性,並以基礎,它可以快速做出決策。什麼花 500 分鐘的時間才能什麼可以現在在 2 分鐘執行一部伺服器上執行。

InSpec 也變得更容易滿足銀行的稽核員。IT 稽核員有時要求特定電腦的狀態,並擷取資訊而變慢。小組成員必須手動執行指令碼,取得輸出並讓它非常適合用於報表。現在,只要按一下,小組可以立即顯示稽核員已執行哪些檢查。

此外,InSpec 是人類可讀取且易於了解。大部分的廠商,取得安全性和稽核使用二進位格式,而且很難用的工具。當銀行業務小組成員所看到的 InSpec 時,他們覺得,他們可以輕鬆地了解它為幾天之內因為學習曲線非常小。(在了解 Chef Web 網站上閱讀這 bit.ly/2mGthmE。)

總結

InSpec 是開放原始碼測試語言,可讓您將視為程式碼的相容性。程式碼相容性時,規則是模稜兩可,而且可以理解的小組成員。開發人員都知道哪些標準,以符合預期,稽核人員知道完全測試的內容。使用 InSpec,您可以使用程式設計的測試都清楚的意圖取代文件和手動檢查清單。

您可以也將相容性測試整合到您的部署管線,並自動測試根據安全性原則。執行測試,依需要、 開始在每次變更相容性測試和開發程序稍攔截問題頻率,您已發行至生產環境之前。


Michael DucyChef 軟體是開啟的來源產品行銷總監。他已使用、 管理以及幾乎 20 年不顧開放原始碼軟體。從 Linux 系統工程師和 IT 講師預售工程師等等的技術 Ducy 已保留角色的數目。他一定有興趣與更廣大的社群,可找到的 Twitter: @mfdii

感謝閱本篇文章的下列技術專家︰ Bakh Inamov、 Adam Leff 和 Roberta Leibovitz