在多個 AWS 帳戶和 AWS 區域中管理 AWS Service Catalog 產品 - AWS Prescriptive Guidance

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

在多個 AWS 帳戶和 AWS 區域中管理 AWS Service Catalog 產品

由拉姆坎達斯瓦米(AWS)創建

環境:生產

技術:管理與治理;原生雲端;基礎架構;現代化

工作負載:所有其他工作負載

AWS Service Catalog:AWS Service Catalog;AWS CloudFormation

Summary

Amazon Web Services (AWS) Service Catalog 可簡化和加速企業基礎設施即程式碼 (iAC) 範本的控管和分配。您可以使用 AWS CloudFormation 範本來定義 AWS 資源的集合 (堆疊) 所需的產品。AWS CloudFormation StackSets 可讓您跨多個帳戶和 AWS 區域使用單次操作建立、更新或刪除堆疊,藉以擴充此功能。 

AWS Service Catalog 管理員使用開發人員撰寫的 CloudFormation 範本建立產品,然後發佈產品。然後,這些產品會與產品組合相關聯,並將限制套用於治理。為了讓其他 AWS 帳戶或組織單位 (OU) 中的使用者可以使用您的產品,您通常共用您的產品組合與他們。此模式描述管理以 AWS CloudFormation StackSets 為基礎的 AWS Service Catalog 產品供應項目的替代方法。您可以使用堆疊集限制來設定 AWS 區域和帳戶,而不是共用產品組合。透過使用此方法,您可以在多個帳戶、OU 和 AWS 區域中佈建 AWS Service Catalog 產品,並從中央位置進行管理,同時滿足您的管理要求。 

這種方法的好處:

  • 產品是從主要帳戶佈建和管理的,而不是與其他帳戶共用。

  • 此方法提供以特定產品為基礎的所有已佈建產品 (堆疊) 的合併檢視。

  • 使用 AWS 服務管理連接器進行設定比較容易,因為它只針對一個帳戶。

  • 查詢和使用 AWS Service Catalog 中的產品變得更容易。

先決條件和限制

先決條件

  • 適用於 IAC 和版本控制的 AWS CloudFormation 範本

  • 用於佈建和管理 AWS 資源的多帳戶設定和 AWS Service Catalog

限制

  • 這種方法使用 AWS CloudFormation StackSets,並適用 StackSets 的限制:

    • StackSets 不支持通過宏的 CloudFormation 模板部署。如果您使用巨集預先處理範本,您將無法使用以 StackSet 為基礎的部署。

    • StackSets 提供將堆疊與堆疊集取消關聯的功能,因此您可以鎖定特定堆疊以修正問題。不過,取消關聯的堆疊無法與堆疊集重新關聯。

  • AWS Service Catalog 會自動產生 StackSet 名稱。目前不支援自訂。

Architecture

目標架構

  

  1. 使用者建立 AWS CloudFormation 式範本以佈建 AWS 資源 (JSON 或 YAML 格式)。

  2. CloudFormation 範本會在 AWS Service Catalog 中建立產品,並新增至產品組合。

  3. 使用者建立已佈建的產品,在目標帳戶中建立 CloudFormation 堆疊。

  4. 每個堆疊都會佈建在 CloudFormation 範本中指定的資源。

Tools

AWS 服務

  • AWS Service Catalog— AWS Service Catalog 可協助您建立、管理以及將已核准的產品組合分發給最終使用者,然後,最終使用者便可以在個人化入口網站存取他們所需的產品。典型的產品包含使用 AWS 資源部署的伺服器、資料庫、網站或應用程式。

  • AWS CloudFormation— AWS CloudFormation 可協助您為 AWS 資源建立模型和設定模型,以及快速且一致的佈建資源,以及在整個生命週期內進行管理。您可以使用範本來描述資源及其相依性,並將它們一起啟動並設定為堆疊,而不是個別管理資源。您可以跨多個 AWS 帳戶和 AWS 區域管理和佈建堆疊。

  • IAM— AWS Identity and Access Management (IAM) 是一種 Web 服務,可以透過它安全地控制對 AWS 服務的存取。有了 IAM,即可集中管理使用者、安全登入資料 (例如存取金鑰);此外,您還能獲得許可,進而控制可供使用者和應用程式存取的 AWS 資源。

  • AWS CLI— AWS 命 Command Line Interface (AWS CLI) 是一種開放原始碼工具,可透過命令列 shell 中的命令與 AWS 服務互動。只需最少的組態,即可從命令提示字元執行 AWS CLI 命令,以實作與瀏覽器型 AWS 管理主控台所提供的功能相當於瀏覽器型 AWS 管理主控台所提供的功能。

Epics

任務描述所需的技能
建立組合。

產品組合是一個容器,其中包含根據特定條件群組在一起的一個或多個產品。針對您的產品使用產品組合可協助您在產品組合中套用常見的限制。

若要建立組合,請遵循AWS Service Catalog 說明文件。如果您是使用 AWS CLI,請參閱範例命令:

aws servicecatalog create-portfolio --provider-name my-provider --display-name my-portfolio

如需詳細資訊,請參閲 。AWS CLI 說明文件

AWS Service Catalog,IAM
建立 CloudFormation 範本。

創建一個描述資源的 CloudFormation 模板。資源屬性值應在適用的情況下進行參數化。

AWS CloudFormation,JSON/YAML
建立具有版本資訊的產品。

當您在 AWS Service Catalog 中發佈時,CloudFormation 範本會變成產品。提供選擇性版本詳細資料參數的值,例如版本標題和描述;這將有助於稍後查詢產品。

若要建立產品,請遵循AWS Service Catalog 說明文件。如果您是使用 AWS CLI,範例命令為:

aws servicecatalog create-product --cli-input-json file://create-product-input.json

wherecreate-product-input.json是傳遞產品參數的檔案。如需的範例,請參閱其他資訊部分。如需詳細資訊,請參閲 。AWS CLI 說明文件

AWS Service Catalog
套用限制。

將堆疊集限制套用至產品組合,以設定產品部署選項,例如多個 AWS 帳戶、區域和權限。如需說明,請參閱AWS Service Catalog 說明文件

AWS Service Catalog
新增 許可。

提供權限給使用者,以便他們可以啟動產品組合中的產品。如需說明,請參閱AWS Service Catalog 說明文件。如果您是使用 AWS CLI,請參閱範例命令:

aws servicecatalog associate-principal-with-portfolio \ --portfolio-id port-2s6abcdefwdh4 \ --principal-arn arn:aws:iam::444455556666:role/Admin \ --principal-type IAM

如需詳細資訊,請參閲 。AWS CLI 說明文件

AWS Service Catalog,IAM
佈建產品。

佈建的產品是產品的資源執行個體。以 CloudFormation 範本為基礎佈建產品,會啟動 CloudFormation 堆疊及其基礎資源。

根據堆疊集限制,以適用的 AWS 區域和帳戶為目標佈建產品。在 AWS CLI 中,以下範例命令:

aws servicecatalog provision-product \ --product-id prod-abcdfz3syn2rg \ --provisioning-artifact-id pa-abc347pcsccfm \ --provisioned-product-name "mytestppname3"

如需詳細資訊,請參閲 。AWS CLI 說明文件

AWS Service Catalog

相關資源

References

教學和影片

其他資訊

當您使用create-product命令,cli-input-json參數指向指定資訊的檔案,例如產品擁有者、支援電子郵件和 CloudFormation 範本詳細資料。以下為這樣一個檔案的範例:

{ "Owner": "Test admin", "SupportDescription": "Testing", "Name": "SNS", "SupportEmail": "example@example.com",             "ProductType": "CLOUD_FORMATION_TEMPLATE", "AcceptLanguage": "en",                 "ProvisioningArtifactParameters": {                   "Description": "SNS product",                       "DisableTemplateValidation": true,                         "Info": {                             "LoadTemplateFromURL": "<url>"                   },                            "Name": "version 1" }