

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Enterprise Blueprint Factory 설정
<a name="setup"></a>

이 섹션에서는 AWS 환경에 Enterprise Blueprint Factory를 설정하는 데 도움이 됩니다. 여기에는 Enterprise Blueprint Factory에 필요한 리포지토리 및 AWS 리소스를 설정하는 방법에 대한 자세한 지침이 포함되어 있습니다.

## 사전 조건
<a name="setup-prereqs"></a>

다음은 AWS 환경에서 Enterprise Blueprint Factory를 설정하기 위한 사전 조건입니다.
+  AWS 계정다음은 다음과 같습니다.
  + Enterprise Blueprint Factory를 관리하고 제품을 출시하는 데 사용되는 계정
  + 릴리스된 제품을 사용하는 하나 이상의 계정
+ 모든 계정은 다음과 같습니다.
  + 에서 조직으로 관리됨 [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 CloudFormation 스택을 배포할 수 AWS 있는 권한:
  + 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 환경에 Enterprise Blueprint Factory를 설정할 때 다음 모범 사례를 따르는 것이 좋습니다.
+ Enterprise Blueprint Factory를 배포하는 데 필요한 권한을 구성할 때 최소 권한 원칙을 따르고 필요한 최소 권한을 부여합니다. 자세한 내용은 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>

이 섹션에서는 Enterprise Blueprint Factory의 [구성 리포지토](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)합니다. 그런 다음 AWS CodeConnections 를 사용하여 GitHub 리포지토리에 대한 [연결을](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
  ```

## Enterprise Blueprint Factory 설정
<a name="setup-factory"></a>

이 섹션의 지침에서는 대상 계정에서 Enterprise Blueprint Factory를 설정하는 방법을 설명합니다. 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. 다음 명령을 입력하여 `ServiceCatalogEndUserRole` IAM 역할을 생성합니다.

   ```
   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. 다음 명령을 입력하여 `ServiceCataloglogLaunchConstraintRole` IAM 역할을 생성합니다.

   ```
   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. `ServiceCataloglogLaunchConstraintRole` IAM 역할에 다음 정책을 추가합니다. 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. 다음 명령을 입력하여 `codebuild-servicecatalog-admin-role` IAM 역할을 생성합니다.

   ```
   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 파라미터를 생성하려면 Systems Manager에서 파라미터 스토어](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-su-create.html) 파라미터 생성의 지침을 따릅니다. 이러한 파라미터는 구성 파이프라인을 배포하는 CloudFormation 템플릿에 사용됩니다.  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/enterprise-blueprint-factory/setup.html)

**CloudFormation 템플릿을 업데이트하려면**

1. 코드 리포지토리(`ServiceCatalog-CodeRepo`)에서 **ServiceCatalog-Pipeline.yml** 파일을 엽니다.

1. 이 파일에서 다음 파라미터의 기본값을 편집합니다.
   + `ConfigRepositoryName`는 Enterprise Blueprint Factory 구성 파일이 저장되는 GitHub 리포지토리를 저장하는 Systems Manager 파라미터입니다. 기본값은 `/blueprints/resources/ConfigRepo`입니다.
   + `CodeRepositoryName`는 Enterprise Blueprint Factory 구성 파이프라인 코드와 `Bootstrapping-Admin-Product` 코드가 저장되는 GitHub 리포지토리를 저장하는 Systems Manager 파라미터입니다. 기본값은 `/blueprints/resources/CodeRepo`입니다.
   + `BlueprintRepositoryName`는 Enterprise Blueprint Factory 블루프린트가 저장되는 GitHub 리포지토리를 저장하는 Systems Manager 파라미터입니다. 기본값은 `/blueprints/resources/BlueprintRepo`입니다.
   + `BranchName`는 구성 파일이 저장되는 구성 리포지토리의 브랜치입니다. 기본값은 `main`입니다.
   + `VPCID`는 대상 VPC의 ID를 저장하는 Systems Manager 파라미터입니다. 기본값은 `/blueprints/resources/vpc_id`입니다.
   + `Subnets`는 대상 서브넷의 IDs를 저장하는 Systems Manager 파라미터입니다. 기본값은 `/blueprints/resources/subnets`입니다.
   + `SecurityGroupIds`는 대상 보안 그룹의 IDs를 저장하는 Systems Manager 파라미터입니다. 기본값은 `/blueprints/resources/securitygroups`입니다.
   + `IamRoleName`는 CodeBuild 작업이 사용하는 IAM 역할의 이름입니다. 기본값은 입니다`codebuild-servicecatalog-admin-role`.
   + `EnvironmentType`는 Enterprise Blueprint Factory를 배포하는 환경입니다. 기본값은 `DEV`입니다.
   + `ArtifactBucket`는 CodePipeline이 아티팩트를 저장하는 Amazon S3 버킷을 저장하는 Systems Manager 파라미터입니다. 기본값은 입니다`/blueprints/resources/artifacts-bucket-name`.
   + `CodeConnectionArn`는 GitHub에 대한 CodeConnections 연결의 Amazon 리소스 이름(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. **내역 보기**를 선택합니다.

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. Enterprise Blueprint Factory를 설정할 때 배포한 샘플 블루프린트를 삭제하려면 블루[프린트 삭제](using-factory.md#using-factory-delete)의 지침을 따르세요.

## Enterprise Blueprint Factory 삭제
<a name="setup-delete-factory"></a>

Enterprise Blueprint Factory를 사용하지 않는 경우 이를 삭제하여 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. Enterprise Blueprint Factory의 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 설명서[의 Parameter Store에서 파라미터 삭제](https://docs.aws.amazon.com/systems-manager/latest/userguide/deleting-parameters.html)를 참조하세요.