建立和維持有效的安全性和治理姿態對企業來說從未如此重要。這篇文章將解釋作為安全管理員的你如何使用亞馬遜網路服務 (Amazon Web Services, AWS) 來強制執行資源配置,以確保安全、可擴展,並主要專注於功能門控。
在這個上下文中,功能門控意味著新的 AWS 功能和配置不能被使用,除非你明確批准它們。透過功能門控,當新服務和功能被引入時,你可以保持對 AWS 環境的控制。
這篇文章展示了一種獨特的方法,讓使用者如 DevOps 團隊在安全範圍內擁有受控的靈活性,允許只使用已批准配置的資源供應。這種方法也適用於未來版本的資源將支持的配置,保持它們受限直到明確批准,如圖 1 所示。
應用你的資源配置強制執行
如圖 2 所示,我們的資源配置強制執行 (RCFGE) 解決方案使用 AWS CloudFormation Hooks。透過使用 Hooks,你可以在資源供應期間運行自定義邏輯。這些是主動控制,因為你在資源創建、更新或刪除之前檢查和強制執行資源配置。
你的 Hook 只有在 CloudFormation 支持你正在使用的 AWS 資源時才會有效,並且如果你實施一個服務控制政策 (SCP) 來幫助防止用戶在 CloudFormation 之外供應資源。
圖 2 所示的流程包括以下五個步驟:
1. DevSecOps 在帳戶中註冊並配置一個 CloudFormation Hook。
2. DevOps 指定一個 CloudFormation 模板,定義所需的資源和配置。
3. CloudFormation 創建一個新的堆疊資源,根據模板開始供應過程。
4. Hook 在每個模板中定義的資源供應之前被觸發,並運行自定義驗證邏輯。
5. 如果驗證檢查通過,CloudFormation 繼續供應;如果不通過,則終止過程。
使你的解決方案可擴展
為了實現可擴展的操作,你應該實施一個可重用和通用的 Hook,目標是所有支持的 CloudFormation 資源類型。這個 Hook 通過從外部物件存儲如亞馬遜簡單存儲服務 (Amazon Simple Storage Service, Amazon S3) 存儲桶中加載資源規範文件來強制執行資源配置。
這些規範文件以聲明性語言定義驗證規則。使用這種方法,你可以通過編輯聲明文件來添加和刪除資源配置驗證規則。當你將自定義邏輯外部化為與 Hook 分離的驗證規則時,DevSecOps 人員可以在不影響基礎設施的情況下大規模管理這些規則。
圖 3 顯示了解決方案如何被修改以支持這種方法。步驟 1–3 與圖 2 所示的流程相同:
1. DevSecOps 在帳戶中註冊並配置一個 CloudFormation Hook。
2. DevOps 指定一個 CloudFormation 模板,定義所需的資源和配置。
3. CloudFormation 創建一個新的堆疊資源,根據模板開始供應過程。
4. Hook 在每個模板中定義的資源供應之前被觸發。
5. Hook 從 S3 存儲桶中加載相關的資源規範文件,並對 CloudFormation 模板中的當前資源執行驗證規則。
6. 如果驗證檢查通過,CloudFormation 繼續供應;如果不通過,則終止過程。
你需要配置 Hook 架構和 Hook 配置架構,以便在變更被供應之前評估你 AWS 帳戶中所有支持資源的配置。這個設置應涵蓋創建、更新和刪除操作,以便 Hook 能幫助防止堆疊中未經批准的配置。
通過使用 AWS CloudFormation Guard,你可以將驗證規則從 Hook 外部化,如在《使用 AWS CloudFormation Guard 擴展你的預提交 Hook》中所述。Guard 是一個開源的通用政策即代碼 (PaC) 評估工具,驗證 CloudFormation 模板是否符合自定義規則,幫助你保持與組織政策一致。例如,CT.S3.PR.1 規則規範展示了一個 Guard 規則,要求 S3 存儲桶的設置配置為阻止公共訪問。這些驗證規則適用於當前支持的 AWS 資源配置和功能,但不會限制潛在的未來屬性。
通過功能門控提升你的解決方案
你的風險模型可能會讓你尋找進一步限制你允許在環境中使用的 AWS 資源配置的機制。正如你將看到的,所提出的解決方案限制了授權的工作人員用戶,使他們只能在你啟用它們時使用新配置。所提出的方法使用功能門控,因為即使 AWS 為你的資源添加了新選項,它也會繼續強制執行你的配置。
Guard 旨在驗證所需的約束;但為了實現功能門控目標,你應該實施驗證規則,檢查資源配置是否滿足受限版本的 CloudFormation 資源架構所描述的結構約束。這些架構幫助你限制在你的環境中可以供應的可能資源配置,無論 AWS 引入了什麼新配置。
圖 4 顯示了相同流程的更新版本,其中驗證規則是使用存儲在 S3 存儲桶中的受限資源架構模板實施的。這些模板基於原始 CloudFormation 資源架構,代表這些架構在特定時間點的快照。步驟 1–4 與圖 3 所示的流程相同:
1. DevSecOps 在帳戶中註冊並配置一個 CloudFormation Hook。
2. DevOps 指定一個 CloudFormation 模板,定義所需的資源和配置。
3. CloudFormation 創建一個新的堆疊資源,根據模板開始供應過程。
4. Hook 在每個模板中定義的資源供應之前被觸發。
5. Hook 從 S3 存儲桶中加載相關的受限資源架構模板文件,並使用它對 CloudFormation 模板中的當前資源執行架構驗證。
6. 如果驗證檢查通過,CloudFormation 繼續供應;如果不通過,則終止過程。
受限資源架構模板是其對應的原始 CloudFormation 資源架構的子集。它包括額外的約束,限制某些屬性為特定值和模式,或完全排除某些屬性。此外,這些模板包含占位符,你可以用運行時值填充,如帳戶 ID,這是你的 Hook 作為 Hook 上下文的一部分提供的。
如圖 5 所示,RCFGE CloudFormation Hook 的流程包括以下步驟:
1. CloudFormation Hook 使用 Hook 上下文和資源的配置 JSON 對象被調用。
2. Hook 從 S3 存儲桶中加載受限資源架構模板,並用 Hook 上下文運行時值替換占位符,生成有效的 JSON 架構。
3. Hook 根據架構驗證堆疊的資源配置 JSON 對象。如果返回 OperationStatus.SUCCESS,則 CloudFormation 繼續供應過程。如果返回 OperationStatus.FAILED,則 CloudFormation 終止供應過程。
如果在 S3 存儲桶中找不到 CloudFormation 資源類型的受限資源架構模板,則架構驗證步驟默認失敗。
受限架構模板的 S3 存儲桶資源示例摘錄
以下是 S3 存儲桶的受限架構模板的摘錄。在運行時,你的 Hook 處理此模板,將占位符替換為 Hook 上下文中的相關值。在此示例中,Hook 將主題模式中的 <accountID> 占位符替換為實際的帳戶 ID。生成的 JSON 架構不允許超出架構定義的附加屬性,並限制可用於事件通知的亞馬遜簡單通知服務 (Amazon Simple Notification Service, Amazon SNS) 主題。
注意:在接下來的代碼示例中,我們省略了一些代碼以簡化——這些省略用三個點表示:…
符合受限架構的 S3 存儲桶 CloudFormation 模板
假設你的帳戶 ID 是 111122223333。帳戶 ID 通過 Hook 上下文傳遞給 Hook。
以下是符合先前顯示的 S3 存儲桶受限架構的 CloudFormation 模板的摘錄。因此,你的 Hook 允許相應的 CloudFormation 堆疊繼續。
偏離受限架構的 S3 存儲桶 CloudFormation 模板 (示例 1)
以下是偏離先前顯示的 S3 存儲桶受限架構的 CloudFormation 模板的摘錄,因為它嘗試配置通知配置的 Amazon SNS 主題,該主題使用另一個帳戶的 Amazon 資源名稱 (ARN)。因此,你的 Hook 導致相應的 CloudFormation 堆疊失敗。
偏離受限架構的 S3 存儲桶 CloudFormation 模板 (示例 2)
以下是偏離先前顯示的 S3 存儲桶受限架構的 CloudFormation 模板的摘錄。這次,它違反了你的功能門控目標,嘗試使用 S3 存儲桶的新虛構功能,該功能未被你的 S3 存儲桶受限架構批准使用。因此,你的 Hook 導致相應的 CloudFormation 堆疊失敗。
保護你的控制
如果安全控制本身沒有得到充分保護,它就成為安全鏈中的薄弱環節。例如,一個沒有牢固安裝的監控攝像頭(物理安全控制)可以被移除,使其無用。這一原則同樣適用於你的 RCFGE 解決方案。
接下來,我們將向你展示如何將管理活動隔離到專用帳戶,並使用 SCP 作為預防性控制。
在專用帳戶中隔離 RCFGE 管理
使用多個帳戶組織你的 AWS 環境是一種最佳實踐,因為它增強了安全性,簡化了管理,並允許更好的資源隔離和成本跟踪。將你的 RCFGE 解決方案的操作和管理隔離在自己的專用帳戶中,對於保護解決方案的資源至關重要。
使用 AWS CloudFormation StackSets,你可以從單個中央管理員帳戶跨多個帳戶和 AWS 區域部署和管理 RCFGE 堆疊。這提供了一致且可擴展的基礎設施,同時保持集中治理。通過此功能,你可以將 RCFGE 資源部署到現有帳戶,並在將新帳戶添加到你的組織時自動包含它們,簡化 RCFGE 管理並在你的環境中提供一致性。欲了解更多信息,請參閱《使用服務管理的 StackSets 向組織部署 CloudFormation Hooks》。
圖 6 顯示了如何擴展這一想法,以便你可以在保持隔離和職責分離的同時大規模運行 RCFGE 解決方案。該解決方案在三種類型的關鍵帳戶中運行:
1. 管理帳戶 – 使用此帳戶創建你的組織並指定 CloudFormation StackSets 委派管理員帳戶。
2. 委派管理員帳戶 – 此帳戶作為 RCFGE 解決方案的集中管理點。它包含一個持續集成和持續交付 (CI/CD) 管道,通過使用服務管理的權限使用 CloudFormation StackSets 在整個組織中供應 RCFGE 資源。該帳戶托管一個集中式 S3 存儲桶,存儲 RCFGE 受限資源架構模板。安全工程團隊使用此帳戶提交 Hook 代碼和受限資源架構模板更改,這會觸發 CI/CD 管道。
3. 成員帳戶 – 每個成員帳戶包含一個 RCFGE StackSet 實例和一個 AWS 身份和訪問管理 (IAM) 角色,用於供應 RCFGE 資源。它還包括一個 CloudFormation Hook 和一個 IAM 角色,允許 Hook 訪問包含 RCFGE 受限資源架構模板的集中式 S3 存儲桶。
讓我們來探索 RCFGE 解決方案架構如何逐步強制執行資源配置,如圖 7 所示。
1. DevOps 通過指定一個定義所需資源和配置的 CloudFormation 模板來啟動部署。
2. CloudFormation 創建一個新的堆疊資源,根據提供的模板啟動資源供應過程。
3. RCFGE CloudFormation Hook 對 CloudFormation 模板中定義的每個資源進行觸發。
4. Hook 從 S3 存儲桶中加載相應的受限資源架構模板。
5. Hook 驗證資源配置:
– Hook 處理受限資源架構模板以創建 JSON 架構。
– 它使用此 JSON 架構驗證 CloudFormation 模板中的當前資源。
– 如果資源根據架構無效,則終止供應過程。
6. 如果當前資源通過驗證,CloudFormation 繼續通過創建和配置模板中指定的資源來進行資源供應過程。
使用 SCP 作為組織的預防性控制來幫助保護 RCFGE
以下 SCP 摘錄實現了三個目標:
1. 實施一個聲明 (見 AllowedListActions) 以明確指定允許的訪問,同時隱式阻止其他訪問。
2. 實施控制目標以幫助防止對 RCFGE 解決方案設置的資源進行更改 (見 ProtectRCFGEResources 和 ProtectStackSetExecutionRole)。
3. 確保 AWS 資源供應不會在 CloudFormation 之外發生 (見 ProvisionResourcesViaCloudFormationOnly)。
在此 SCP 摘錄中,ProvisionResourcesViaCloudFormationOnly 聲明限制 CloudFormation 堆疊只能通過 AWS IAM 中的正向訪問會話 (FAS) 進行管理。
ProvisionResourcesViaCloudFormationOnly 聲明明確禁止直接創建、更新和刪除你環境中使用的所有支持資源的操作。如果需要,將此聲明拆分為多個部分,以免超出 SCP 大小限制,同時全面涵蓋你的資源,以確保它們僅通過 CloudFormation 進行供應和管理。
此示例中的 ProtectStackSetExecutionRole 聲明假設 CloudFormation 信任訪問已與 AWS 組織激活,這是 StackSets 使用服務管理的權限跨帳戶和區域部署所需的。
為了允許 Hook 檢索必要的受限資源架構模板,成員帳戶必須能夠訪問包含 RCFGE 模板的 S3 存儲桶。以下代碼示例顯示了包含 RCFGE 模板的 S3 存儲桶的存儲桶政策。
如以下代碼示例所示,成員帳戶中的 RCFGEHookExecutionRole IAM 角色具有一項政策,授予對存儲在 RCFGE 委派管理員帳戶中的 S3 存儲桶的 RCFGE 模板的只讀訪問權限,其中 555555555555 代表帳戶 ID。
在以下代碼示例中,成員帳戶中的 RCFGEHookExecutionRole IAM 角色具有信任政策,允許它僅由相關的 CloudFormation 服務主體假設,其中 444455556666 代表成員帳戶的帳戶 ID。
為 RCFGE 定義基線配置並使用 AWS Config 進行持續監控
深度防禦是一種有效的策略,因為如果一條防線失敗,還有其他層次可以幫助在後續點阻止威脅。使用 AWS Config,你可以隨時間捕獲 RCFGE 資源的配置。你可以設置 AWS Config 自定義規則,自動評估你的 RCFGE 資源是否符合預定義政策。例如,你可以使用 AWS Config 自定義規則來確保 RCFGE Hook 沒有被更改或刪除。
結論
在這篇文章中,你學會了如何使用 CloudFormation Hooks 在 AWS 上創建一個資源配置強制執行 (RCFGE) 解決方案,該解決方案旨在安全且可擴展,並支持功能門控。使用這種方法,作為安全管理員的你可以在 AWS 環境中對資源配置和功能採用保持嚴格控制。該解決方案提供了一種平衡的治理方法,使 DevOps 團隊可以在批准的範圍內工作,同時確保新的 AWS 功能僅在明確批准後才可訪問。
如果你對這篇文章有反饋,請在評論區提交評論。若有問題,請在 CloudFormation re:Post 上開始一個新線程或聯繫 AWS 支援。
新聞來源
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的
AI TAIWAN 台灣人工智慧中心
FB 社團,隨時掌握最新 AI 動態與實用資訊!