DevOps 文化中的合規
將合規控制和稽核整合到 CI/CD 流程中
在 DevOps 文化中整合必要的安全控制和稽核功能以滿足合規要求,可以利用 CI/CD 管線自動化,但隨著組織規模擴大,會產生獨特的挑戰。了解所選實作的二階影響和意外後果,是建構有效、安全且可擴充解決方案的關鍵。
2021 年 11 月 2 日
在許多產業中,都有法規標準強制要求遵守各種法規。範例包括定義財務系統控制的 Sarbanes-Oxley、定義資訊安全管理系統 (ISMS) 的 ISO-27001,或政府組織內的營運授權 (ATO)。在這些環境中建構和部署軟體的團隊,必須在將任何軟體部署到生產環境中使用之前,符合相關標準和要求。
DevOps 的目標之一是透過「左移」更有效率且更有效地滿足跨職能需求,基本上讓安全和品質問題成為正常開發人員回饋週期的部分。然而,合規控制和稽核活動對於符合法規標準仍然至關重要。
已開發出各種方法來提供符合法規要求的證明,每種方法都有其優點和缺點。在本文中,我們將探討四種主要的實作方法,並在各種條件下檢視每種方法的優缺點。
理論
讓我們從回顧合規程序的基本理論開始,這樣我們就能對合規目標、程序組成部分和術語有一個共同的看法,以了解團隊運作的背景。
目標
我們的目標是能夠透過在符合適用於系統的法規下將版本部署到生產環境中,安全地將變更傳遞到系統。這些法規可能是組織特定的內部要求,也可能是產業範圍的法規或政府法令。
法規和合規結構旨在確保系統的品質和正確性,並且是一種風險管理形式。
背景
我們的開發團隊在 DevOps 文化中運作,強調以團隊為中心的機能,例如團隊自主性、頻繁發佈小單位價值,以及低平均復原時間 (MTTR),以在加速軟體傳遞的同時將風險降到最低。
流程負責人
我們的組織有一個合規辦公室 (OoC),定義要達成的預期結果集(相對於如何,而不是什麼),以及系統在部署到生產環境之前必須驗證的程序。這允許團隊在獲得 OoC 同意解決方案會導致預期結果的情況下,自行解決以符合結果。
例如,一個結果可能是「高品質軟體」,團隊可以從 OoC 獲得同意,表示 CodeClimate 所報告的程式碼涵蓋率 > 80% 符合結果。
作為一個更複雜的範例,結果可能是「所有變更都是必要的變更」,這可能會導致一個需要所有提交都與相關的 JIRA 票證關聯的解決方案,由產品負責人優先處理,並由另一位開發人員檢閱公關。另一個團隊可能會使用配對程式設計結合基於主幹的開發,而不是公關審查,並在提交日誌中簡單地識別兩位開發人員和 JIRA 問題。
合規流程
從高層面來說,評估合規狀態涉及測量系統的屬性、根據一組約束驗證此證據,並記錄結果。
- 屬性:系統的客觀可測量屬性
- 測量:測量系統屬性的測試
- 證據:屬性的測量結果值。通常為真或假(真值)或數字。
- 約束:屬性值必須在其中才能滿足需求的限制
- 驗證:將證據與特定約束進行比較,證明系統「符合」特定需求。
注意:適應函數[1]的概念是兩個任務的組合;獲取證據的測量,以及驗證證據是否符合特定閾值或值約束。
一個簡單的範例可能是從 Kubernetes 組態(測量)中萃取一個開放埠清單(證據),並驗證只有埠 80 或 443 是開放的(約束)。
一個更全面的適應函數可能是測量程式碼覆蓋率(使用任何各種可用工具,例如 JaCoCo、SonarQube、CodeClimate 等),檢查報告(證據),並驗證報告的值相對於 80% 的所需程式碼覆蓋率等級(約束)。
一個更複雜的範例涉及變數約束,例如常見漏洞和曝險 (CVE) 清單,可能是掃描容器(測量)以找出 CVE(證據),並驗證不存在尚未被接受為已知風險的 CVE(變數約束)。
威脅模型
任何合規程序中的一個疑慮是結果的有效性與系統的完整性。換句話說,可以對合規程序寄予多少信任?
建立威脅模型以識別合規程序的特定風險非常重要。許多公司假設開發人員可能會受到危害,這會導致諸如「是否有方法可以將變更引入最終系統,而這些變更不可見或無法稽核?」等問題。例如,如果開發人員有權存取建置基礎架構,則可以在建置過程中登入並以 SCM 或任何稽核日誌中未反映的方式變更程式碼。
了解威脅模型將引導組織朝向需要實施的策略,以減輕風險(例如:實施適當的 CI/CD 基礎架構安全性)。然而,威脅模型會依據組織和使用的特定合規方法而有所不同,且不在本文的範圍內。
稽核流程
稽核程序是一種元合規形式,基本上驗證合規程序實際上是否在以一致、準確的方式運作並遵循定義的要求。由於這是合規程序本身的測試,因此發生在較高的層級,但遵循上述的相同模式。它有一組較小、較簡單的規則和要求,通常透過評估隨機樣本達成,而非對每項合規活動進行詳盡驗證。
模式
現在我們已經了解合規程序的基本組成部分,我們可以透過此觀點來檢視一些常見的實施模式。了解每個模式如何對應到基礎概念將有助於我們評估和比較每個模式,並了解每個實施中固有的權衡取捨的根本原因。
這些模式從簡單開始,並逐漸變得更複雜,以應對組織和交付規模成長所造成的二階效應。我們從最簡單的形式手動合規開始。隨著組織成長,合規活動可能會納入建置管道中。隨著營運業務所需的解決方案範圍擴大,開始尋找利用共享功能的方法很常見,這通常會導致利用合規容器映像的組合。最後,我們討論單一職責原則如何導致合規領域邊界的完全重組,因為我們將合規驗證轉移到變更點。
手動合規
人員執行合規檢查,通常會輔以檢查清單。

手動合規可能是最簡單的合規流程形式。在此方法中,合規辦公室已定義要測量的屬性集,並已實施測量作為一組表單或問卷。這些調查問題可能具有簡單的回應,例如是/否核取方塊、開放埠或 URL 清單,或可能需要敘述性描述,例如安全存取規則或備份和復原程序。
每個版本的系統屬性測量都是由開發團隊手動執行,方法是填寫表單或問卷,並在他們回應每個項目時以書面形式提供證據。
驗證證據的行為是由合規人員執行,他們會檢閱提交內容,並對開發團隊提供的證據套用比較啟發法。此評分標準可能會因項目而異,例如確保表單上未列出 80 和 443 以外的埠,或表單上未列出任何「不可接受」的 CVE。無論評分標準為何,所有此類驗證都應為客觀的。
稽核合規流程也是一個相當簡單的練習,用於檢閱合規表單的隨機選項,以確保表單上的資訊準確反映現實,且所有答案都通過驗證評分標準。然而,由於此流程高度手動,因此在應用和結果方面都可能高度不一致。稽核流程可能需要更頻繁地執行,並更詳細地執行,才能達到所需的報告一致性水準。
何時使用

如果要測量的屬性集很小、版本發布不頻繁且回應很簡單,這可能是一個簡單且容易的流程。為小規模合規流程實施此流程不需要大量資源或時間投資。它可以像建立一個 Google 表單一樣簡單,讓團隊完成並提交。通常,此類型的實施還包括手動檢閱流程,通常實施為與檢閱會議相關的正式核准。
隨著組織規模擴大,此流程可能會很快變得痛苦。由於工作量和複雜性增加,額外的規模會產生多面向的挑戰。
容量挑戰來自於組織規模擴大所推動的工作量增加。隨著組織的成長,合規流程的運作容量必須成比例地增加,以處理合規核准的額外請求。由於部署核准請求的隨機性,流向中央合規團隊的工作量變化很大,因此很難為中央團隊的快速回應調整規模。隨著組織的成長,這個問題會被放大。
隨著組織規模擴大,複雜性挑戰隨之而來,產生新的且令人興奮的故障模式,進而推動合規程序的變更。合規表單的規模和複雜性日益增加,需要開發團隊和合規團隊投入更多時間和精力才能完成程序。
當合規程序顯示出其在規模上的低效率時,可能會出現二階效應,並開始成為開發團隊能多快提供業務價值的限制因素。
團隊可以透過將部署中的變更分批處理,專注於成本效率,以便開發要發布的價值的工作佔部署這些變更到生產環境所需的總成本的顯著比例。
合規程序的領先時間也會決定批次大小,因為合規辦公室的工作容量限制了在特定時間段內可以處理的部署請求數量。在部署數量受限的情況下,增加交付給客戶的價值的唯一方法是增加批次大小。
如果合規辦公室超載(無論出於何種原因),那麼等待合規結果的團隊佇列就會增加 - 合規程序本身就是限制價值交付的瓶頸。通常,交付的壓力會壓垮合規程序,而開發團隊會積極濫用、破壞或完全迴避合規程序,導致「影子 IT」、受損的設計和架構決策,甚至偽造合規回應。
我們在商業和政府領域的組織中都見過所有這些行為。我們見過手動合規程序,在現實中需要 6-9 個月才能完成,然後才能將新服務或系統部署到生產環境。在另一位客戶中,我們能夠證明他們的程序不僅限制了組織可以交付的速度和規模,而且該程序在其應用和結果方面高度不一致。
不幸的現實是,我們的經驗表明手動合規程序是一種「安全戲劇」,導致價值交付延遲,而系統的安全性和安全性並未實質增加。我們還看到這些程序對交付程序以外的影響不成比例,影響組織結構、架構決策、網域邊界,甚至人員配置和人才保留。
管線合規
將合規檢查嵌入部署管道。

在此方法中,合規程序嵌入在 CI/CD 部署管道 中,作為管道階段之間的一組適用性函數和手動閘門。管道將適用性函數作為建置管道的一部分執行,以取得證據並針對閾值進行驗證。
對於檢查開放埠、軟體供應鏈驗證或驗證程式碼涵蓋率等適用性功能,將其納入管線相當容易。然而,有些驗證可能會對自動化造成挑戰(例如,如何決定哪些 CVE 獲「核准」用於特定人工製品),導致管線中出現手動閘門。
任何失敗的適用性功能都會導致管線失敗,實際上會阻止將版本部署到生產環境,只要任何合規性驗證失敗。
這樣,成功執行管線隱含證明系統版本已符合內建於管線中的自動可驗證合規性需求。通過管線階段之間的手動閘門明確表示也已符合手動可驗證的合規性需求。
何時使用

顯然,合規性測試的自動化對合規性辦公室和團隊中的開發人員來說都是一大好處。
合規性辦公室可以確信適當的合規性適用性功能正在執行,而且管線記錄可以提供記錄適用性功能執行和結果的稽核追蹤。團隊可以將注意力集中在提供業務價值,而不是透過確保管線執行所需工作來把關個別變更。
團隊中的開發人員可以更快收到有關系統版本是否符合合規性需求的回饋(至少對於已自動化為適用性功能的需求),因為管線失敗表示未符合合規性。
在同質開發環境中,每個團隊都使用相同的堆疊,建置大致相同的系統類型(例如,REST 服務等),團隊可以透過複製標準管線來實現效率提升。至少,在同質環境中分享相同的合規性適用性功能將產生規模經濟。
組織對生產環境失敗的常見回應是向部署程序新增手動驗證步驟。舉例來說,適用性功能可能會定義為「所有工作已完成且有回滾計畫」,團隊經理和安全人員必須手動驗證。這並非理想,因為它會導致一個工作佇列,而這個佇列名義上由對系統負責的角色負責,但實際上並未負責(例如,熟悉)他們核准的變更。[2] 最終結果是額外的延誤,但系統的安全性或穩定性並未具體改善。
另一個典型的反應是希望鎖定管道以保證相容性。這可能會發生在製作過程中出現一些故障時,也許可以追溯到團隊特定偏離標準管道的行為。組織將管道相容性流程的責任轉移到一個中央團隊,目的是透過同一個「黃金」管道引導每個團隊的系統發布。
我們的經驗顯示,由於團隊管道中變更的頻率很高,因此管道的中央所有權是開發過程中最大的摩擦來源之一。這種集中化導致開發整體速度變慢,因為中央團隊已成為限制團隊演進其系統的瓶頸。
第二階效應類似於手動解決方案:「影子 IT」、受損的設計和架構決策,或在未更新相容性管道的情況下部署到製作環境。
我們知道有案例是基於明確希望減慢發布速度而做出此類中央「所有權」決策。儘管不常公開說明,但組織已意識到更頻繁的發布通常會暴露其開發流程中的系統性不成熟。轉移到中央控制通常是試圖將交付品質的責任從工程和開發團隊轉移到相容性組織。
隨著時間推移而產生的摩擦程度難以低估。管道存在的主要原因是提供軟體開發流程中的中央工具。當它被挪用,然後受到正交目標控制時,開發人員的疑慮往往會根據管道團隊(通常是 DevOps 團隊)的人員配置、組織、激勵和營運方式而降低優先順序。
組成合規
結合已確定為相容的元件。

此方法基於相容性可分配的前提,讓組織能透過相容元件的組合來建構相容系統。例如,數學中的分配性質指出,如果 C(A) + C(B) = C(A+B),則函數 C「在加法上可分配」。同樣地,組織可以假設相容性在組合上以類似的方式可分配,讓組織能利用容器化的可重複使用和可組合性質,有效達成廣泛解決方案的相容性。
在實務上,已測試為「相容」的業務或技術功能會以容器映像檔的形式提供給開發團隊。隨著時間推移,組織的不同部門可能會新增或演化新的功能至可用映像檔組。這些映像檔的相容性狀態是透過傳統的相容性流程(手動或基於管線的流程)來達成。這些「黃金映像檔」會被鎖定,且在個別情況下,每個映像檔都已符合相容性流程在當下的時間點所要求的條件。
預期是,透過培訓,團隊可以特定方式組合這些「黃金映像檔」,以建構和部署系統版本。例如,需要持久性的團隊可以在 PostgreSQL 映像檔或 Cassandra 映像檔之間選擇。只要他們的需求符合「黃金映像檔」提供的範圍(例如,沒有 PII、靜態加密),他們就能符合相容性要求。
確保「黃金映像檔」持續符合相容性要求的流程是此流程的關鍵部分。例如,可能會發現影響目前「黃金」映像檔的 CVE,需要更新的映像檔來解決問題。這將要求所有使用(現在非黃金)映像檔的團隊更新並使用新發布的映像檔進行測試。
稽核相容性是一個兩階段流程。從團隊的角度來看,達成團隊特定解決方案的相容性可能就像驗證基礎架構設定只使用「黃金映像檔」,且沒有新增可能會違反映像檔相容性狀態的客製化設定一樣簡單。
「黃金映像檔」的稽核會遵循不同的流程,具體取決於它們是透過手動或基於管線的流程進行認證,並且是提供映像檔的團隊所關注的事項。
何時使用

對於需求符合建構模組功能的團隊來說,這是一個很棒的解決方案。「黃金映像檔」代表業務或技術功能,否則團隊必須實作這些功能,而且這些映像檔已經通過相容性要求。例如,仰賴黃金 PostgreSQL 映像檔表示團隊不需要思考如何設定備份/還原、資料庫調整、部署、記錄或運作考量。所有這些活動都已作為通過相容性的 PostgreSQL 建構模組的一部分完成。
假設有成熟的建構模組集合、同質的開發環境和變異性低的業務需求,這可以透過避免許多開發團隊重複工作來提供效率提升。
當這些基本假設和限制遭到破壞時,與組件組合策略相關的摩擦就會出現。任何需要超出現有「黃金映像」範圍之外功能的產品開發,也需要開發團隊為其系統的這些「非黃金」組件經歷相同的繁重合規程序。有些團隊可能會認為這樣做會帶來相當大的時程風險,這可能會對系統的架構和設計造成不當的影響。
此外,這是一個滑坡;在滑坡的底部,組織並不會更好,因為每個團隊都在為自己的特殊情況解決方案管理合規性。有人可能會爭辯說,使用合規映像作為自訂的基礎,會將合規工作限制在增量變更上。然而,由於這些共用的「基準」映像,跨團隊的耦合會增加。合規的單位仍然是整個映像,因此隨著時間推移,合規的邊際成本可能比人們想像的要大。
當管道集中時,將責任轉移給中央團隊以提供合規映像,具有與上述完全相同的特徵。
由於組件組合解決方案顯示其在規模上的低效率,它也開始成為開發團隊可以提供業務價值的速度限制因素。二階效應與手動和基於管道的解決方案類似:「影子 IT」、受損的設計和架構決策,或部署到未通過合規要求的生產組件。
我們觀察到,根據組織的規模,遵循此模式的系統中存在不同的行為。在小規模或實施此模式的早期階段,很容易找到具有相似需求的團隊,在這些團隊中,依賴合規構建模組的經濟效益顯而易見,並可為團隊提供加速。然而,超過某個規模後,所提供的解決方案的需求就會出現分歧,導致團隊無法依賴合規構建模組時,摩擦的來源會變得熟悉。
注意:我們故意迴避合規性是否實際上可以針對一組合規容器映像進行組合分配的問題。假設這是真的,它可能只對具有零自訂能力的確切容器映像成立,這反過來又可能將解決方案空間限制到無法提供實際效用的程度。我們鼓勵您仔細思考在組合合規性的範圍內,相對於您的使用案例,可以實現哪些類型的可組態性。
變更點合規
在變更時執行合規性檢查。

在此方法中,合規性在變更點強制執行,在變更之前執行。透過驗證是否已滿足所有與合規性相關的約束和要求,我們可以確保達成預期的結果(品質、安全性、可稽核性等)。
為了將合規性驗證轉移到變更點,我們需要將我們的流程分解為其基本步驟。我們將適用性函數重構為其測量和驗證的基本單一責任動作。正是這種分割提供了我們創建新網域邊界的縫隙,允許實施更靈活、更有效的合規流程。
在此過程中,開發團隊負責收集證據(即傳統適能函數的前半部分),通常透過管線自動化進行。例如,團隊可能會在其管線中新增步驟,以從 Kubernetes 組態檔中萃取開放埠清單、測量程式碼覆蓋率或執行 CVE 掃描。
我們引進記錄系統 (SoR) 的概念,用於儲存開發團隊收集的證據。記錄系統可能有一個或多個,視所記錄的資料或執行的測試而定。例如,程式碼覆蓋率或 CVE 掃描可能由 SaaS 工具執行,而該工具將會是這些資料元素的記錄系統的合乎邏輯的選擇。
合規性驗證在變更點驗證,例如由管理非 Kubernetes 基礎架構元件的 Kubernetes 營運人員或 Kubernetes 群集中的准入控制器執行。每個應用程式都有其自己的控制項主清單例外事項,由團隊和合規辦公室共同管理,即使證據可能顯示不合規,仍允許部署。例如,系統可能有一組永久例外事項,適用於不適用的控制項。它也可能有一組暫時例外事項(例如,對於新發現的 CVE),讓團隊有時間解決已接受的風險,而不會延遲價值傳遞。
由於我們已將測量行為與驗證行為分開,因此當測量行為不是由記錄系統直接管理時(例如,團隊已撰寫管線步驟以從 Kubernetes 組態檔中萃取開放埠),我們已在過程中引進了一些不確定性。當查詢記錄系統的證據時,我們如何知道證據的來源,或證據是否可靠?當驗證與管線適能函數中的測量捆綁在一起時,我們知道測量是有效的。為了減輕這種不確定性的風險,我們引進加密簽署證據的概念,以提供驗證資料來源的能力,並啟用一個有凝聚力的、受信任的分布式流程。
總而言之,合規性驗證要求所有證據都存在於記錄系統中,記錄系統外部收集的證據具有加密可驗證簽章,且證據的所有合規性驗證都成功。實質上,我們已使用政策即程式碼原則將合規性驗證流程外化。此解決方案啟用的強大功能之一是獨立變更合規性政策的能力,甚至可以針對儲存在記錄系統中的現有證據評估新的合規性政策,以了解政策變更對目前已部署系統的影響。
入門套件或集中開發的基準管線,可以提供一組基準測量測試,這些測試已獲得合規性流程的核准。這組基準資源可為開發團隊提供規模經濟,而不會將團隊鎖定在任何特定的流程限制中。
如果團隊希望自行管理測量流程的某一部分,則新的測量測試必須獲得合規辦公室的核准,並整合到團隊的開發流程中,可能是整合到其管線中。希望使用新方法的團隊需要擁有該核准流程,但增量工作已減少到最小的變更單位(即個別測量測試,而不是容器映像)。任何打算由多個團隊使用的測量都應以完全可供 API 使用的方式實作,讓消費者能夠自助採用。
稽核流程也變成對部署步驟的記錄進行直接檢閱,確保所有結果都已由經核准的證書以加密方式簽署的證據驗證。
何時使用

此解決方案有助於將先前所述解決方案中存在的瓶頸降至最低。與上述解決方案相比,它本質上更為複雜,因此可能僅限於組織規模會產生此方法能夠解決的瓶頸類型的環境。
透過區分合規性的考量,我們可以達成避免與集中管理合規性方法相關的摩擦所需的鬆散耦合。團隊可以選擇採用集中提供的管道控制組,同時仍然能夠有效率地自行管理團隊可能有的任何獨特需求。
如果合規性限制經常變更,組織可以有效率地確定對現有系統的影響,減少規劃工作並簡化實作流程。由於應用量測測試收集證據的流程並未變更,因此政策即程式碼原則可保護團隊免於額外的作業。
由於合規性流程的所有輸入都基於資料和組態,稽核流程會大幅簡化。在任何特定時間點,都可以透過查詢 SoR 來取得證據組和驗證流程的結果。
如上所述,由於考量區分,此解決方案會稍微複雜一些。然而,複雜性適當地存在於合規性辦公室中,而不是委派給組織中的每個開發團隊。
必須明確解決流程中的信任問題,作為 SoR 和相關機密金鑰管理的一部分,而這必須由合規性辦公室管理。雖然在新的量測測試的核准流程中存在熟悉的瓶頸,但這些瓶頸的範圍較為有限,因為個別工作項目(例如,就量測測試的適當性達成協議)顯著較小,而且不會顯著阻礙團隊進行開發。
仍然有「影子 IT」或部署到尚未通過合規性需求的生產元件的風險。然而,受損的設計和架構決策的風險會大幅降低。
我們已為多個客戶實作此模式多年。對於一個大型企業組織,我們實作了一個自訂的准入控制器,以確保符合部署需求、安全性及證書,使用提供已掃描 CVE 的容器的受信任容器登錄,並驗證適當文件的存(或建立)在。在另一個組織中,我們實作了類似的功能,除了整合一個政策即程式碼解決方案,在部署前對 Kubernetes 組態執行 CIS Benchmark 測試。
觀察與經驗
當我們退一步檢視解決方案的範圍時,一個模式開始變得清晰。我的同事 Zhamak Dehgani 在討論支撐資料網格概念的概念時,使用架構量子[3]的概念來標記架構單元,而我認為將類似的想法應用於我們的合規性領域很有趣。當我們以架構和合規性量子來思考時,會產生一些有用的見解。
手動合規性手動合規性流程將每個系統都視為架構量子和合規性量子。這表示系統是獨特的實體;無論它們有多麼相似,每個系統都需要自己的一組合規性工作/輸出。系統之間的任何相似性都代表合規性工作中的浪費,特別是在規模上。
「管線合規」流程開始區分架構量與合規量。每個系統都是獨特的架構量,但現在我們將合規量拆分為由適能函數封裝的較小單位。這讓組織能夠透過(可能共用的)管線中常見的共用適能函數,在系統間共用這些新的合規量,而團隊仍然負責任何獨特的團隊特定適能函數。
「組成合規」流程更進一步,將系統分解為較小的可組成架構量,每個量都擁有自己的合規性。現在由這些架構量組成的系統不再負責執行驗證流程的「全部」,因為它現在以可組成相容容器映像的形式共用合規流程的「結果」。團隊現在只負責其獨特的團隊特定容器映像的合規性。
最後,「變更合規」採取最後一步驟,將合規量分解為預測結果的個別屬性,並將適能函數分解為獨立的測量和驗證步驟。藉此,我們最大化了合規量(測量和驗證)的可重複使用性,同時將每個開發團隊需要獨自管理的內容(自訂測量)減至最低。

每個解決方案逐漸縮小驗證合規性所需獨特的工作,方法是縮小每個流程所需的架構量和合規量的範圍。隨著獨特工作的最小化,二階效應也會減少。此外,由於重新組織的網域界線,新的功能也隨之出現。在此過程中,我們將管線的所有權歸還給開發團隊,同時在適當的情況下保留規模經濟。
在 Thoughtworks 的數位平台策略參與中,我們密切注意開發人員摩擦的來源。在我們對客戶進行的各種變更中,將管線所有權歸還給開發團隊的加速因子始終是工程組織可以進行的前三名價值回報投資。
結論
與所有架構決策一樣,重點在於評估權衡取捨,而不是找到完美的解決方案。評估成本和效益後得出的結論會因每個組織而異,具體取決於所做的工作類型、組織的規模和範圍,以及提供給客戶的解決方案的複雜性。
然而,從架構觀點來看,如果您在合規架構中採用基本的分離關注點,您可以定位您的解決方案,使其有最大的機會演化以滿足您組織的需求。如果您組織基於緊密耦合有意義,您有自由將測量與驗證捆綁在一起,在管道中建立適適度函數。當您的組織達到一定規模時,這些原則使組織能夠重構合規解決方案,以實現促進團隊在規模上效率的鬆散耦合。
致謝
本文受益於許多同事的評論、建議和建設性批評。感謝 Tim Cochran、Martin Fowler、Neal Ford、Nic Cheneweth、Dan Kunnath、Kief Morris、Ranbir Chawla、Brandon Byars、Andrew Buchanan、Jim Gumbley、Patrick McFadden 和 Shree Damani。
重大修訂
2021 年 11 月 2 日:發布