企業藍圖工廠元件 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

企業藍圖工廠元件

企業藍圖工廠包含下列元件:

  • 產品儲存庫 – 您存放藍圖的儲存庫。

  • 組態儲存庫 – 儲存組態檔案的儲存庫,用於定義 AWS Service Catalog 產品組合和產品。

  • 組態檔案 - 定義可用的藍圖、誰可以使用它們,以及如何使用它們的組態檔案。

  • 組態管道 – DevOps CI/CD 管道,可設定 Service Catalog 產品組合和產品組合共用,並為每個產品建立發行管道。

  • 發行管道 – DevOps CI/CD 管道,將藍圖發行為 Service Catalog 產品。 

雲端基礎設施團隊通常會管理整個企業藍圖工廠,因為他們必須核准每個藍圖。不過,DevOps 程式碼團隊通常負責組態管道和發行管道。為了發佈新的藍圖,開發人員只會與產品儲存庫、組態儲存庫和組態檔案互動。

產品儲存庫

產品儲存庫是您存放組織核准藍圖的集中位置。 藍圖管理團隊和安全團隊會檢閱對此儲存庫的提取請求,以確保每個藍圖都符合組織和安全需求。在本指南中,我們使用 GitHub 做為儲存庫,但您可以使用替代方法。

組態儲存庫

組態儲存庫 (組態儲存庫) 是組織存放 Service Catalog 產品組合組態檔案的位置,以及透過 Enterprise Blueprint Factory 發行的產品。在本指南中,我們使用 GitHub 做為儲存庫,但您可以使用替代方法。

組態檔案

企業藍圖工廠組態檔案 (組態檔案) 存放在組態儲存庫中,該儲存庫由藍圖管理團隊所擁有。此檔案名稱為 bp_config.yml。當開發人員更新此檔案時,藍圖管理團隊會檢閱變更。將變更合併到主分支會啟動組態管道。組態檔案會協調發佈、共用和分發透過企業藍圖工廠管理的所有藍圖。

組態檔案是 YAML 檔案,由兩個主要物件組成: portfoliosproducts。以下是範例組態檔案的範例:

portfolios: - portfolio_name: blueprint-portfolio owner: Blueprint-team provider_name: AWS description: "Blueprint portfolio" portfolio_access_role: - arn:aws:iam::123456789012:role/examplerole - arn:aws:iam::123456789012:user/exampleuser share_to_ou: - org_id: "o-exampleOrgID" stack_tags: DataClassification: Confidential Organization: AWS products: - name: BP-S3-Product description: "Blueprint for BP-S3 product" product_config_file: 'BP-S3/product_config.json' owner: Blueprint-team stack_tags: DataClassification: Confidential Organization: AWS portfolio_associations: - blueprint-portfolio launch_constraint_role: arn:aws:iam::123456789012:role/examplelaunchrole

portfolios 物件中,您可以定義目標 Service Catalog 產品組合。對於每個產品組合,您提供下列屬性:

  • portfolio_name 是產品組合的名稱。此為必要屬性。

  • owner 是擁有產品組合的團隊名稱。此屬性是選用的。

  • provider_name 是管理產品組合的團隊或組織的名稱。預設值為 AWS。此為必要屬性。

  • description 是產品組合的簡短描述。此屬性是選用的。

  • portfolio_access_roles 是允許存取產品組合及其相關聯產品的 AWS Identity and Access Management (IAM) 身分 (使用者、角色或群組)。此屬性是選用的。

  • share_to_ou 是與產品組合共用的組織單位 AWS Organizations (OU)。最終使用者可以在 AWS 帳戶 目標 OU 成員的 中部署此產品組合的產品。此屬性是選用的。

  • stack_tags 是套用至產品組合的標籤。此屬性是選用的。

products 物件中,您會定義要發佈為 Service Catalog 中產品的每個藍圖。對於每個產品,您提供下列屬性:

  • name 是 Service Catalog 中產品的名稱。此為必要屬性。

  • description 是產品的簡短描述。此為必要屬性。

  • product_config_file 是存放在產品儲存庫中的藍圖產品組態檔案的名稱。此為必要屬性。

  • owner 是擁有產品的團隊名稱。此為必要屬性。

  • stack_tags 是套用至產品的標籤。此屬性是選用的。

  • portfolio_associations 是包含產品的目標產品組合。此屬性是選用的。

    注意

    我們建議您僅將產品新增至透過 Enterprise Blueprint Factory 管理的產品組合。如果您想要將產品新增至非透過企業藍圖工廠管理的產品組合,使用者的 IAM 政策必須允許 AssociateProductWithPortfolio 動作。不過,根據安全最佳實務,建議您只針對 Enterprise Blueprint Factory 組態管道允許此動作。

  • launch_constraint_role 是 Service Catalog 在最終使用者啟動產品時擔任的啟動角色。此為必要屬性。

組態管道

組態管道 (組態管道) 會自動化 Service Catalog 產品組合和產品組合共用的組態。它也會為每個產品建立發行管道。此管道是 AWS CodePipeline 資源。組態檔案的更新會叫用組態管道。

第一次叫用組態管道時,它會建立組態檔案中未定義的兩個額外產品組合:

  • Blueprint-portfolio – 您透過企業藍圖工廠部署的每個產品都會新增至此產品組合。此產品組合可供您在組態檔案中指定的 IAM 主體和組織單位使用。

  • Bootstrapping-Admin-PortfolioBootstrapping-Admin-Product產品與此產品組合相關聯。此產品是發行管道的 CloudFormation 範本。僅允許藍圖管理團隊存取此產品組合,以便他們可以管理管理產品。

組態管道階段

下圖顯示組態管道中的階段,以及管道與之互動的資源。管道中的每個階段都是一個AWS CodeBuild專案。

Enterprise Blueprint Factory 組態管道中的階段。

以下是組態管道的階段:

  1. 部署產品組合 – 組態管道會部署任何已新增至組態檔案的產品組合,或刪除已從組態檔案移除的任何產品組合。如果產品組合沒有變更,則管道會略過此階段。

  2. 共用產品組合 – 組態管道會與目標組織單位 (OUs共用產品組合。如果產品組合共用沒有變更,則管道會略過此階段。

  3. 部署Blueprint-Admin-Bootstrapping-Product – 組態管道會從ServiceCatalog-CodeRepo儲存庫擷取bp-pipeline 藍圖,並將其以 的形式部署至 Service CatalogBootstrapping-Admin-Product 此產品是用來建立發行管道的 CloudFormation 範本。將此範本部署 為 Service Catalog 產品有助於維持版本控制。如果bp-pipeline 藍圖沒有變更,則管道會略過此階段。

  4. 建立發行管道 – 根據組態檔案中的產品屬性,組態管道會準備堆疊參數並啟動 CloudFormation 堆疊,以建立產品的發行管道。如需詳細資訊,請參閱本指南中的發行管道

  5. 部署產品 – 發行管道會將藍圖部署為 Service Catalog 產品,並將其與目標產品組合建立關聯。最終使用者可以在 中部署 AWS 帳戶 屬於目標 OU 成員的產品。

發行管道

發行管道會將藍圖的發行自動化為 Service Catalog 產品。此管道是 AWS CodePipeline 資源。當您的組織想要發佈新的藍圖時,開發人員會將 IaC 範本及其產品組態檔案上傳至產品儲存庫。將產品詳細資訊新增至組態檔案會觸發組態管道。組態管道會為此藍圖建立發行管道。藍圖的任何後續更新都會觸發此發行管道,以使用新版本更新 Service Catalog 中的產品。

發行管道包含主動控制,可自動化藍圖的安全與合規檢查。主動控制旨在防止建立不合規的資源。這些控制可以減少其他類型的安全控制所處理的安全事件數量,例如回應和偵測性控制。由於主動控制可確保部署的資源在部署之前符合規範,因此沒有需要回應或修復的偵測事件。

第一次叫用組態管道時,它會建立名為 的 Service Catalog 產品Bootstrapping-Admin-Product。此產品是發行管道的 CloudFormation 範本。如下圖所示,組態管道使用 Bootstrapping-Admin-Product產品為每個新藍圖建立專用發行管道。藍圖和發行管道之間有one-to-one的關係。

組態管道使用產品為每個藍圖建立發行管道。

發行管道階段

下圖顯示發行管道中的預設階段,以及管道與之互動的資源。管道中的每個階段都是 CodeBuild 專案。

Enterprise Blueprint Factory 發行管道中的階段。

以下是發行管道的階段:

  1. 檔案對齊 – 此階段會驗證藍圖是 CloudFormation 範本或 AWS Cloud Development Kit (AWS CDK) 建構。如果藍圖是 AWS CDK 建構模組,此階段會將 AWS CDK 建構模組合成為 CloudFormation 範本。此程序會透過 CloudFormation 自動化和標準化部署。如果發現任何錯誤,管道會失敗。

  2. 語法檢查 – 語法錯誤是 CloudFormation 部署錯誤的常見原因。在此階段中,AWS CloudFormation Linter (cfn-lint) 會比較範本與AWS CloudFormation 資源規格,以檢查語法錯誤。它也會執行其他檢查,例如檢查資源屬性的有效值,以及是否遵守最佳實務。如果發現任何錯誤,管道會失敗,而 cfn-lint 會傳回建議。

  3. 控制檢查 – 在此階段中,cfn_nag 透過搜尋模式來檢查潛在安全問題。例如,它會檢查是否有過度寬鬆的安全群組和 AWS Identity and Access Management (IAM) 政策、缺少加密和密碼常值。如果發現任何錯誤,管道會失敗,而 cfn_nag 會傳回建議。

  4. 版本檢查 – 發行管道會根據產品組態檔案中定義的版本策略執行版本控制。如果產品版本定義為不可變,Service Catalog 會停用先前的產品版本。

  5. 發佈產品 – 發行管道會在 Service Catalog 中發行產品。

注意

發行管道是可自訂的。例如,您可以移除任何不適用於您的使用案例的階段。如果您想要新增其他控制項檢查、其他驗證或手動核准步驟,也可以新增更多階段。本指南不包含修改發行管道的指示。如需詳細資訊,請參閱 CodePipelineCodeBuild 文件。