

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

# 設定企業藍圖工廠
<a name="setup"></a>

本節可協助您在 AWS 環境中設定企業藍圖工廠。它包含設定企業藍圖工廠所需儲存庫和資源 AWS 的詳細說明。

## 先決條件
<a name="setup-prereqs"></a>

以下是在您的 AWS 環境中設定企業藍圖工廠的先決條件：
+ 下列項目 AWS 帳戶：
  + 用來管理企業藍圖工廠和發行產品的帳戶
  + 一或多個使用已發行產品的帳戶
+ 所有帳戶皆為：
  + 在 中以組織身分受管 [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)
  + 位於相同的[組織單位 (OU)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organizationalunit)
  + 組織遵循[account-per-tenant模型](https://aws.amazon.com/blogs/mt/managing-the-account-lifecycle-in-account-per-tenant-saas-environments-on-aws/)
+ AWS Command Line Interface (AWS CLI)，[已安裝](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)並[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ 部署可建立下列 AWS 資源之 AWS CloudFormation 堆疊的許可：
  + Amazon CloudWatch Logs 日誌群組
  + AWS CodePipeline 管道
  + AWS CodeBuild 專案
  + Amazon EventBridge 事件匯流排政策和規則
  + AWS Identity and Access Management (IAM) 角色和政策
  + AWS Key Management Service (AWS KMS) 金鑰和金鑰政策
  + AWS Service Catalog 產品組合、產品和佈建產品
  + Amazon Simple Notification Service (Amazon SNS) 主題、主題政策和訂閱
  + Amazon Simple Storage Service (Amazon S3) 儲存貯體
  + AWS Systems Manager 參數存放區參數

  如需設定這些許可的詳細資訊，請參閱 [CloudFormation 文件](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)和[實作最低權限許可的政策 AWS CloudFormation](https://docs.aws.amazon.com/prescriptive-guidance/latest/least-privilege-cloudformation/introduction.html)。
+ GitHub 帳戶

## 最佳實務
<a name="setup-best-practices"></a>

我們建議您在 AWS 環境中設定企業藍圖工廠時遵循以下最佳實務：
+ 設定部署企業藍圖工廠所需的許可時，請遵循最低權限原則，並授予所需的最低許可。如需詳細資訊，請參閱 IAM 文件中的[授予最低權限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)和[安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html)。
+ 設定 Service Catalog 產品組合的存取權時，請遵循最低權限原則，並僅將存取權授予特定角色、使用者或管理員。遵循 Service Catalog [的安全最佳實務](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/security-best-practices.html)。

## 建立儲存庫
<a name="setup-create-repos"></a>

本節可協助您設定 企業藍圖工廠的[組態儲存庫](architecture-components.md#architecture-config-repo)和[產品儲存庫](architecture-components.md#architecture-product-repo)。若要設定儲存庫，您可以在 GitHub 中[放棄](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo)提供的儲存庫。然後，您可以使用 建立 GitHub 儲存庫 AWS CodeConnections 的[連線](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-github.html)。然後，您將 GitHub 儲存庫複製到本機電腦。

**分支 GitHub 儲存庫**

1. 登入 [GitHub](https://github.com/login)。

1. 導覽至[組態儲存庫](https://github.com/aws-samples/aws-enterprise-blueprint-factory-config-repo) GitHub 儲存庫。

1. 選擇**叉**。

1. 在**建立新的分支**頁面上的**儲存庫名稱**方塊中，輸入 `ServiceCatalog-ConfigRepo`。

1. (選用) 輸入描述。

1. 選取**僅複製主要分支**。

1. 選擇**建立分支**。

1. 重複這些步驟來分支[程式碼儲存庫](https://github.com/aws-samples/aws-enterprise-blueprint-factory-code-repo) GitHub 儲存庫。輸入`ServiceCatalog-CodeRepo`此儲存庫的名稱。

1. 重複這些步驟來分支[產品儲存庫](https://github.com/aws-samples/aws-enterprise-blueprint-factory-blueprint-repo) GitHub 儲存庫。輸入`ServiceCatalog-BlueprintProductRepo`此儲存庫的名稱。

**建立 CodeConnections 連線**

1. 在 AWS CLI 中，輸入下列命令以建立與 GitHub 的 CodeConnections 連線：

   ```
   aws codeconnections create-connection --provider-type GitHub --connection-name <MyConnection>
   ```

1. 使用 AWS 開發人員工具主控台來完成連線。如需詳細資訊，請參閱[更新待定連線](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-update.html)。

**複製分叉儲存庫**
+ 輸入下列命令，將 GitHub 儲存庫複製到您的本機工作站：

  ```
  git clone git@github.com:<user>/aws-enterprise-blueprint-factory-config-repo ServiceCatalog-ConfigRepo
  git clone git@github.com:<user>/aws-enterprise-blueprint-factory-blueprint-repo ServiceCatalog-BlueprintProductRepo
  git clone git@github.com:<user>/aws-enterprise-blueprint-factory-code-repo ServiceCatalog-CodeRepo
  ```

## 設定企業藍圖工廠
<a name="setup-factory"></a>

本節中的指示說明如何在目標帳戶中設定企業藍圖工廠。您從 GitHub 複製的產品儲存庫包含兩個範例 CloudFormation 範本，`BP-S3`以及 `BP-SNS`。遵循這些指示，即可將這兩個範例藍圖部署為 Service Catalog 中的產品。

**設定角色**

1. 在藍圖開發人員的帳戶中，建立下列信任政策，然後將其儲存為`sc-enduserrole-trust-policy.json`：

   ```
   { 
     "Version": "2012-10-17",		 	 	 
     "Statement": {
       "Effect": "Allow",
       "Principal": {
         "AWS": "arn:aws:iam::123456789012:role/ServiceCatalogEndUserRole"
       },
       "Action": "sts:AssumeRole"
     }
   }
   ```

1. 輸入下列命令來建立 IAM `ServiceCatalogEndUserRole` 角色：

   ```
   aws iam create-role \
   --role-name ServiceCatalogEndUserRole \
   --assume-role-policy-document file://sc-enduserrole-trust-policy.json  
   aws iam attach-role-policy \
   --policy-arn arn:aws:iam::aws:policy/AWSServiceCatalogEndUserFullAccess \
   -- role-name ServiceCatalogEndUserRole
   ```
**注意**  
開發人員使用 `ServiceCatalogEndUserRole`角色來佈建 Service Catalog 產品。此角色不需要許可即可建立藍圖中定義的資源。這遵循最低權限許可和職責分離的最佳實務。

1. 建立下列信任政策，然後將其儲存為 `sc-launchconstraintrole-trust-policy.json`：

   ```
   { 
     "Version": "2012-10-17",		 	 	 
     "Statement": {
       "Effect": "Allow",
       "Principal": {
         "Service": "servicecatalog.amazonaws.com"
       },
       "Action": "sts:AssumeRole"
     }
   }
   ```

1. 輸入下列命令來建立 IAM `ServiceCataloglogLaunchConstraintRole` 角色：

   ```
   aws iam create-role \
   --role-name ServiceCataloglogLaunchConstraintRole \
   --assume-role-policy-document file://sc-launchconstraintrole-trust-policy.json  
   aws iam attach-role-policy \
   --policy-arn arn:aws:iam::aws:policy/AmazonSNSFullAccess \
   --role-name ServiceCataloglogLaunchConstraintRole
   aws iam attach-role-policy \
   --policy-arn arn:aws:iam::aws:policy/AWSCloudFormationFullAccess \
   --role-name ServiceCataloglogLaunchConstraintRole
   ```

1. 將下列政策新增至 IAM `ServiceCataloglogLaunchConstraintRole` 角色。如 Service Catalog 文件中的[設定啟動角色](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/constraints-launch.html#constraints-launch-role)所述，包含產品資源所需的任何其他許可：

   ```
   {
             "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "s3:GetObject"
            ],
            "Resource":"*",
            "Condition":{
               "StringEquals":{
                  "s3:ExistingObjectTag/servicecatalog:provisioning":"true"
               }
            }
      ]
   }
   ```
**注意**  
Service Catalog 使用此角色將 CloudFormation 堆疊部署為 Service Catalog 中的產品。此角色的信任政策可確保只有 Service Catalog 可以擔任該角色。其他使用者或服務無法擔任此角色。這遵循職責分離的最佳實務。

1. 建立下列信任政策，然後將其儲存為`sc-codebuild-trust-policy.json`：

   ```
   { 
     "Version": "2012-10-17",		 	 	 
     "Statement": {
       "Effect": "Allow",
       "Principal": {
         "Service": "codebuild.amazonaws.com"
       },
       "Action": "sts:AssumeRole"
     }
   }
   ```

1. 輸入下列命令來建立 IAM `codebuild-servicecatalog-admin-role` 角色：

   ```
   aws iam create-role \
   --role-name codebuild-servicecatalog-admin-role \
   --assume-role-policy-document file://sc-codebuild-trust-policy.json  
   aws iam attach-role-policy \
   --policy-arn arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess \
   --role-name codebuild-servicecatalog-admin-role
   ```
**注意**  
組態管道中的 CodeBuild 任務使用此角色。

**設定 Amazon S3 儲存貯體**
+ 若要建立用於存放 CodePipeline 成品的 Amazon Simple Storage Service (Amazon S3) 儲存貯體，請遵循 Amazon S3 文件中[建立儲存貯](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)體的指示。請遵循 [Amazon S3 的安全最佳實務](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)。

**設定 AWS Systems Manager 參數**
+ 請依照 [Systems Manager 中建立參數存放區參數](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-su-create.html)的指示，在下表中建立 Systems Manager 參數。這些參數用於部署組態管道的 CloudFormation 範本。  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/enterprise-blueprint-factory/setup.html)

**更新 CloudFormation 範本**

1. 在程式碼儲存庫 (`ServiceCatalog-CodeRepo`) 中，開啟 **ServiceCatalog-Pipeline.yml** 檔案。

1. 編輯此檔案中下列參數的預設值：
   + `ConfigRepositoryName` 是 Systems Manager 參數，存放儲存企業藍圖工廠組態檔案的 GitHub 儲存庫。預設值為 `/blueprints/resources/ConfigRepo`。
   + `CodeRepositoryName` 是 Systems Manager 參數，用於存放 GitHub 儲存庫，其中存放 Enterprise Blueprint Factory 組態管道程式碼和`Bootstrapping-Admin-Product`程式碼。預設值為 `/blueprints/resources/CodeRepo`。
   + `BlueprintRepositoryName` 是 Systems Manager 參數，存放儲存企業藍圖工廠藍圖的 GitHub 儲存庫。預設值為 `/blueprints/resources/BlueprintRepo`。
   + `BranchName` 是存放組態檔案之組態儲存庫的分支。預設值為 `main`。
   + `VPCID` 是 Systems Manager 參數，存放目標 VPC 的 ID。預設值為 `/blueprints/resources/vpc_id`。
   + `Subnets` 是 Systems Manager 參數，可存放目標子網路IDs。預設值為 `/blueprints/resources/subnets`。
   + `SecurityGroupIds` 是 Systems Manager 參數，存放目標安全群組IDs。預設值為 `/blueprints/resources/securitygroups`。
   + `IamRoleName` 是 CodeBuild 任務使用的 IAM 角色名稱。預設值為 `codebuild-servicecatalog-admin-role`。
   + `EnvironmentType` 是您部署企業藍圖工廠的環境。預設值為 `DEV`。
   + `ArtifactBucket` 是 Systems Manager 參數，存放 CodePipeline 存放成品的 Amazon S3 儲存貯體。預設值為 `/blueprints/resources/artifacts-bucket-name`。
   + `CodeConnectionArn` 是 CodeConnections 連線至 GitHub 的 Amazon Resource Name (ARN)。

1. 儲存並關閉 **ServiceCatalog-Pipeline.yml** 檔案。

1. 輸入下列命令，將變更合併到程式碼儲存庫：

   ```
   cd ServiceCatalog-CodeRepo
   git add ServiceCatalog-Pipeline.yml
   git commit -m "<description of change>"
   git push origin main
   ```

1. 在組態儲存庫 (`ServiceCatalog-ConfigRepo`) 中，開啟 **bp\_config.yml 檔案。**

1. 視需要為您的組織更新產品組合區段中的值。例如，更新 `portfolio_access_roles`和 `share_to_ou` 屬性。如需詳細資訊，請參閱本指南中的[組態檔案](architecture-components.md#architecture-config-file)。

1. 儲存並關閉 **bp\_config.yml 檔案。**

1. 輸入下列命令，將變更合併到程式碼儲存庫：

   ```
   cd ServiceCatalog-ConfigRepo
   git add bp_config.yml
   git commit -m "<description of change>"
   git push origin main
   ```

**部署 CloudFormation 堆疊**

1. 登入 Enterprise Blueprint Factory 管理帳戶。

1. 切換到具有[管理許可](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AdministratorAccess.html)的 IAM 角色。

1. 開啟 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation/)。

1. 在畫面頂端的導覽列上，選擇目標 AWS 區域。

1. 在**堆疊**頁面上，選擇右上角的**建立堆疊**，然後選擇**使用新資源 （標準）**。

1. 針對 **Prepare template** (準備範本)，選擇 **Template is ready** (範本已就緒)。

1. 在**指定範本**下，選擇**上傳範本檔案**。

1. 選擇**選擇檔案**，導覽至 `ServiceCatalog-CodeRepo` 資料夾，然後選擇 **ServiceCatalog-Pipeline.yml**。

1. 選擇**下一步**以繼續並驗證範本。

1. 針對**堆疊名稱**，輸入堆疊的名稱。

1. 在**參數**區段中，請勿變更預設值。

1. 選擇**下一步**。

1. 在**設定堆疊選項**頁面上，請勿變更預設值，然後選擇**下一步**。

1. 在**檢閱和建立**頁面上，驗證範本和堆疊詳細資訊，然後選擇**提交**。

1. 監控堆疊部署的進度。如需詳細資訊，請參閱 [CloudFormation 文件](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/monitor-stack-progress.html)。

1. 等待狀態變更為 `CREATE_COMPLETE`。

**驗證部署**

1. 開啟 [AWS Service Catalog 主控台](https://console.aws.amazon.com/servicecatalog/)。

1. 在導覽窗格中，選擇**產品**。

1. 確認 **ServiceCatalog-Pipeline** 可在產品清單中取得。

1. 開啟 [AWS CodePipeline 主控台](https://console.aws.amazon.com/codesuite/codepipeline/home)。

1. 在**名稱**中，選擇組態管道。根據預設，管道名稱為 `ServiceCatalog-Pipeline`。

1. 選擇 **View history (檢視歷程記錄)**。

1. 檢視管道和階段執行的狀態。如需 狀態的詳細資訊，請參閱 CodePipeline 文件中的[檢視執行狀態](https://docs.aws.amazon.com/codepipeline/latest/userguide/executions-view.html#pipelines-executions-status-console)。

1. 等到組態管道狀態為 `Succeeded`。

1. 開啟 [Service Catalog 主控台](https://console.aws.amazon.com/servicecatalog/)。

1. 在導覽窗格中，選擇**產品**。

1. 確認 **BP-S3-Product** 和 **BP-SNS-Product** 產品可用。這表示範例藍圖的產品發行管道已成功完成。

1. 如果您想要刪除在設定企業藍圖工廠時部署的範例藍圖，請遵循[刪除藍圖](using-factory.md#using-factory-delete)中的指示。

## 刪除企業藍圖工廠
<a name="setup-delete-factory"></a>

如果您不是使用企業藍圖工廠，則可以將其刪除，以停止產生與其 AWS 資源相關聯的成本。

**刪除 資源**

1. 輸入下列命令來刪除部署在 Enterprise Blueprint Factory 管理帳戶中的 IAM 角色：

   ```
   aws iam detach-role-policy \
   --policy-arn arn:aws:iam::aws:policy/AWSServiceCatalogEndUserFullAccess \
   --role-name ServiceCatalogEndUserRole
   aws iam delete-role --role-name ServiceCatalogEndUserRole
   aws iam detach-role-policy \
   --policy-arn arn:aws:iam::aws:policy/AmazonSNSFullAccess \
   --role-name ServiceCataloglogLaunchConstraintRole
   aws iam delete-role --role-name ServiceCataloglogLaunchConstraintRole
   ```

1. 刪除企業藍圖工廠的 CloudFormation 堆疊。如需說明，請參閱[從 CloudFormation 主控台刪除堆疊](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)或從 [刪除堆疊 AWS CLI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/service_code_examples.html#delete-stack-sdk)。

1. 刪除用於存放 CodePipeline 成品的 Amazon S3 儲存貯體。如需說明，請參閱 Amazon S3 文件中的[刪除儲存貯](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)體。

1. 從參數存放區刪除下列 Systems Manager 參數：
   + `/blueprints/resources/vpc_id`
   + `/blueprints/resources/subnets`
   + `/blueprints/resources/securitygroups`
   + `/blueprints/resources/artifacts-bucket-name`
   + `/blueprints/resources/BlueprintRepo`
   + `/blueprints/resources/CodeRepo`
   + `/blueprints/resources/ConfigRepo`

   如需說明，請參閱 Systems Manager 文件中的[從參數存放區刪除參數](https://docs.aws.amazon.com/systems-manager/latest/userguide/deleting-parameters.html)。