本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
企業藍圖工廠元件
企業藍圖工廠包含下列元件:
雲端基礎設施團隊通常會管理整個企業藍圖工廠,因為他們必須核准每個藍圖。不過,DevOps 程式碼團隊通常負責組態管道和發行管道。為了發佈新的藍圖,開發人員只會與產品儲存庫、組態儲存庫和組態檔案互動。
產品儲存庫
產品儲存庫是您存放組織核准藍圖的集中位置。 藍圖管理團隊和安全團隊會檢閱對此儲存庫的提取請求,以確保每個藍圖都符合組織和安全需求。在本指南中,我們使用 GitHub 做為儲存庫,但您可以使用替代方法。
組態儲存庫
組態儲存庫 (組態儲存庫) 是組織存放 Service Catalog 產品組合組態檔案的位置,以及透過 Enterprise Blueprint Factory 發行的產品。在本指南中,我們使用 GitHub 做為儲存庫,但您可以使用替代方法。
組態檔案
企業藍圖工廠組態檔案 (組態檔案) 存放在組態儲存庫中,該儲存庫由藍圖管理團隊所擁有。此檔案名稱為 bp_config.yml。當開發人員更新此檔案時,藍圖管理團隊會檢閱變更。將變更合併到主分支會啟動組態管道。組態檔案會協調發佈、共用和分發透過企業藍圖工廠管理的所有藍圖。
組態檔案是 YAML 檔案,由兩個主要物件組成: portfolios
和 products
。以下是範例組態檔案的範例:
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-Portfolio
–Bootstrapping-Admin-Product
產品與此產品組合相關聯。此產品是發行管道的 CloudFormation 範本。僅允許藍圖管理團隊存取此產品組合,以便他們可以管理管理產品。
組態管道階段
下圖顯示組態管道中的階段,以及管道與之互動的資源。管道中的每個階段都是一個AWS CodeBuild專案。

以下是組態管道的階段:
-
部署產品組合 – 組態管道會部署任何已新增至組態檔案的產品組合,或刪除已從組態檔案移除的任何產品組合。如果產品組合沒有變更,則管道會略過此階段。
-
共用產品組合 – 組態管道會與目標組織單位 (OUs共用產品組合。如果產品組合共用沒有變更,則管道會略過此階段。
-
部署Blueprint-Admin-Bootstrapping-Product – 組態管道會從
ServiceCatalog-CodeRepo
儲存庫擷取bp-pipeline
藍圖,並將其以 的形式部署至 Service CatalogBootstrapping-Admin-Product
。 此產品是用來建立發行管道的 CloudFormation 範本。將此範本部署 為 Service Catalog 產品有助於維持版本控制。如果bp-pipeline
藍圖沒有變更,則管道會略過此階段。 -
建立發行管道 – 根據組態檔案中的產品屬性,組態管道會準備堆疊參數並啟動 CloudFormation 堆疊,以建立產品的發行管道。如需詳細資訊,請參閱本指南中的發行管道。
-
部署產品 – 發行管道會將藍圖部署為 Service Catalog 產品,並將其與目標產品組合建立關聯。最終使用者可以在 中部署 AWS 帳戶 屬於目標 OU 成員的產品。
發行管道
發行管道會將藍圖的發行自動化為 Service Catalog 產品。此管道是 AWS CodePipeline 資源。當您的組織想要發佈新的藍圖時,開發人員會將 IaC 範本及其產品組態檔案上傳至產品儲存庫。將產品詳細資訊新增至組態檔案會觸發組態管道。組態管道會為此藍圖建立發行管道。藍圖的任何後續更新都會觸發此發行管道,以使用新版本更新 Service Catalog 中的產品。
發行管道包含主動控制,可自動化藍圖的安全與合規檢查。主動控制旨在防止建立不合規的資源。這些控制可以減少其他類型的安全控制所處理的安全事件數量,例如回應和偵測性控制。由於主動控制可確保部署的資源在部署之前符合規範,因此沒有需要回應或修復的偵測事件。
第一次叫用組態管道時,它會建立名為 的 Service Catalog 產品Bootstrapping-Admin-Product
。此產品是發行管道的 CloudFormation 範本。如下圖所示,組態管道使用 Bootstrapping-Admin-Product
產品為每個新藍圖建立專用發行管道。藍圖和發行管道之間有one-to-one的關係。

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

以下是發行管道的階段:
-
檔案對齊 – 此階段會驗證藍圖是 CloudFormation 範本或 AWS Cloud Development Kit (AWS CDK) 建構。如果藍圖是 AWS CDK 建構模組,此階段會將 AWS CDK 建構模組合成為 CloudFormation 範本。此程序會透過 CloudFormation 自動化和標準化部署。如果發現任何錯誤,管道會失敗。
-
語法檢查 – 語法錯誤是 CloudFormation 部署錯誤的常見原因。在此階段中,AWS CloudFormation Linter (cfn-lint)
會比較範本與AWS CloudFormation 資源規格,以檢查語法錯誤。它也會執行其他檢查,例如檢查資源屬性的有效值,以及是否遵守最佳實務。如果發現任何錯誤,管道會失敗,而 cfn-lint 會傳回建議。 -
控制檢查 – 在此階段中,cfn_nag
透過搜尋模式來檢查潛在安全問題。例如,它會檢查是否有過度寬鬆的安全群組和 AWS Identity and Access Management (IAM) 政策、缺少加密和密碼常值。如果發現任何錯誤,管道會失敗,而 cfn_nag 會傳回建議。 -
版本檢查 – 發行管道會根據產品組態檔案中定義的版本策略執行版本控制。如果產品版本定義為不可變,Service Catalog 會停用先前的產品版本。
-
發佈產品 – 發行管道會在 Service Catalog 中發行產品。
注意
發行管道是可自訂的。例如,您可以移除任何不適用於您的使用案例的階段。如果您想要新增其他控制項檢查、其他驗證或手動核准步驟,也可以新增更多階段。本指南不包含修改發行管道的指示。如需詳細資訊,請參閱 CodePipeline 和 CodeBuild 文件。