를 사용하여 AWS Service Catalog 포트폴리오 및 제품 배포 자동화 AWS CDK - AWS 권장 가이드

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

를 사용하여 AWS Service Catalog 포트폴리오 및 제품 배포 자동화 AWS CDK

작성자: Sandeep Gawande(AWS), RAJNEESH TYAGI (AWS) 및 Viyoma Sachdeva(AWS)

코드 리포지토리: aws-cdk-servicecatalog-automation

환경: PoC 또는 파일럿

기술: DevOps, 인프라, 관리 및 거버넌스

워크로드: 오픈 소스

AWS 서비스: AWS 서비스 카탈로그, AWS CDK

요약

AWS 서비스 카탈로그는 조직의 AWS 환경에서 사용하도록 승인된 IT 서비스 또는 제품 카탈로그를 중앙에서 관리하는 데 도움이 됩니다. 제품 컬렉션을 포트폴리오라고 하며 포트폴리오에는 구성 정보도 포함됩니다. AWS Service Catalog를 사용하면 조직의 각 사용자 유형에 대한 사용자 지정 포트폴리오를 생성한 다음 적절한 포트폴리오에 대한 액세스 권한을 부여할 수 있습니다. 그러면 해당 사용자는 포트폴리오 내에서 필요한 모든 제품을 신속하게 배포할 수 있습니다.

다중 리전 및 다중 계정 아키텍처와 같은 복잡한 네트워킹 인프라를 사용하는 경우 단일의 중앙 계정으로 Service Catalog 포트폴리오를 만들고 관리하는 것이 좋습니다. 이 패턴은 AWS 클라우드 개발 키트(AWS CDK)를 사용하여 중앙 계정에서 Service Catalog 포트폴리오 생성을 자동화하고 최종 사용자에게 액세스 권한을 부여한 다음 선택적으로 하나 이상의 대상 AWS 계정에 제품을 프로비저닝하는 방법을 설명합니다. 이 ready-to-use 솔루션은 소스 계정에 Service Catalog 포트폴리오를 생성합니다. 또한 선택적으로 AWS CloudFormation 스택을 사용하여 대상 계정에 제품을 프로비저닝하고 제품에 TagOptions 대해 를 구성하는 데 도움이 됩니다.

  • AWS CloudFormation StackSets - StackSets 를 사용하여 여러 AWS 리전 및 계정에서 Service Catalog 제품을 시작할 수 있습니다. 이 솔루션에서는 이 솔루션을 배포할 때 제품을 자동으로 프로비저닝할 수 있는 옵션이 있습니다. 자세한 내용은 사용AWS CloudFormation StackSets(서비스 카탈로그 설명서) 및 StackSets 개념(CloudFormation 문서)을 참조하세요.

  • TagOption 라이브러리 - TagOption 라이브러리를 사용하여 프로비저닝된 제품의 태그를 관리할 수 있습니다. TagOption 는 AWS Service Catalog에서 관리되는 키-값 페어입니다. AWS 태그는 아니지만 를 기반으로 AWS 태그를 생성하기 위한 템플릿 역할을 합니다 TagOption. 자세한 내용은 TagOption 라이브러리(서비스 카탈로그 설명서)를 참조하세요.

사전 조건 및 제한 사항

사전 조건 

  • Service Catalog 포트폴리오를 관리하기 위한 소스 AWS 계정으로 사용하려는 활성 계정입니다.

  • 이 솔루션을 사용하여 하나 이상의 대상 계정에 제품을 프로비저닝하는 경우 대상 계정이 이미 존재하고 활성화되어 있어야 합니다.

  • AWS AWS Service Catalog, 및 에 액세스할 수 있는 자격 증명 AWS CloudFormation및 액세스 관리(IAM) 권한AWSIAM.

제품 버전

  • AWS CDK 버전 2.27.0

아키텍처

대상 기술 스택

  • 중앙 집중식 AWS 계정의 서비스 카탈로그 포트폴리오

  • 대상 계정에 배포된 Service Catalog 제품

대상 아키텍처 

AWS CDK 대상 계정에서 Service Catalog 포트폴리오 생성 및 제품 프로비저닝.
  1. 포트폴리오(또는 소스 ) 계정에서 사용 사례에 대한 AWS 계정, AWS 리전, IAM 역할, 포트폴리오 및 제품 정보로 config.json 파일을 업데이트합니다.

  2. AWS CDK 애플리케이션을 배포합니다.

  3. AWS CDK 애플리케이션은 배포 IAM 역할을 수임하고 config.json 파일에 정의된 Service Catalog 포트폴리오 및 제품을 생성합니다.

    대상 계정에 제품을 배포 StackSets 하도록 를 구성한 경우 프로세스가 계속됩니다. 제품을 프로비저닝 StackSets 하도록 를 구성하지 않은 경우 프로세스가 완료됩니다.

  4. AWS CDK 애플리케이션은 StackSet 관리자 역할을 수임하고 config.json 파일에 정의한 AWS CloudFormation 스택 세트를 배포합니다.

  5. 대상 계정에서 StackSet 실행 역할을 수 StackSets 임하고 제품을 프로비저닝합니다.

도구

AWS 서비스

  • AWS 클라우드 개발 키트(AWS CDK)는 코드로 AWS 클라우드 인프라를 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.

  • AWS CDK Toolkit은 AWS CDK 앱과 상호 작용하는 데 도움이 되는 명령줄 클라우드 개발 키트입니다.

  • AWS CloudFormation 는 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및 리전의 수명 주기 전반에 걸쳐 리소스를 관리할 수 있도록 지원합니다.

  • AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.

  • AWS 서비스 카탈로그는 에 대해 승인된 IT 서비스의 카탈로그를 중앙에서 관리하는 데 도움이 됩니다AWS. 최종 사용자는 조직에서 규정한 제약에 따라, 필요에 따라 승인된 IT 서비스만 신속하게 배포할 수 있습니다.

코드 리포지토리

이 패턴의 코드는 aws-cdk-servicecatalog-automation리포지토리 GitHub의 에서 사용할 수 있습니다. 코드 리포지토리에는 다음 파일과 폴더가 포함되어 있습니다.

  • cdk-sevicecatalog-app - 이 폴더에는 이 솔루션의 AWS CDK 애플리케이션이 포함되어 있습니다.

  • config – 이 폴더에는 config.json 파일과 Service Catalog 포트폴리오에 제품을 배포하기 위한 CloudFormation 템플릿이 포함되어 있습니다.

  • config/config.json - 이 파일에는 모든 구성 정보가 들어 있습니다. 이 파일을 업데이트하여 사용 사례에 맞게 이 솔루션을 사용자 지정합니다.

  • config/templates - 이 폴더에는 Service Center 제품의 CloudFormation 템플릿이 포함되어 있습니다.

  • setup.sh - 이 스크립트는 솔루션을 배포합니다.

  • uninstall.sh - 이 스크립트는 스택과 이 솔루션을 배포할 때 생성된 모든 AWS 리소스를 삭제합니다.

샘플 코드를 사용하려면 에픽 섹션의 지침을 따르십시오.

모범 사례

에픽

작업설명필요한 기술

AWS CDK 툴킷을 설치합니다.

AWS CDK Toolkit이 설치되어 있는지 확인합니다. 다음 명령을 입력하여 설치 여부를 확인하고 버전을 확인합니다. 

cdk --version

AWS CDK Toolkit이 설치되지 않은 경우 다음 명령을 입력하여 설치합니다.

npm install -g aws-cdk@2.27.0

AWS CDK Toolkit 버전이 2.27.0 이전인 경우 다음 명령을 입력하여 버전 2.27.0으로 업데이트합니다.

npm install -g aws-cdk@2.27.0 --force
AWS DevOps, DevOps 엔지니어

리포지토리를 복제합니다.

다음 명령을 입력합니다. 추가 정보 섹션의 리포지토리 복제에서 리포지토리에 URL 대한 가 포함된 전체 명령을 복사할 수 있습니다. 이렇게 하면 에서 aws-cdk-servicecatalog-automation리포지토리가 복제됩니다 GitHub.

git clone <repository-URL>.git

그러면 대상 디렉터리에 cd aws-cdk-servicecatalog-automation 폴더가 생성됩니다. 다음 명령을 입력하여 이 폴더로 이동합니다.

cd aws-cdk-servicecatalog-automation
AWS DevOps, DevOps 엔지니어

AWS 보안 인증 정보를 설정합니다.

다음 명령을 입력합니다. 이러한 변수는 스택을 배포하는 AWS 계정과 리전을 정의하는 다음 변수를 내보냅니다.

export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number>
export CDK_DEFAULT_REGION=<AWS Region>

AWS 에 대한 자격 증명AWSCDK은 환경 변수를 통해 제공됩니다.

AWS DevOps, DevOps 엔지니어

최종 사용자 IAM 역할에 대한 권한을 구성합니다.

IAM 역할을 사용하여 포트폴리오 및 포트폴리오에 포함된 제품에 대한 액세스 권한을 부여하려는 경우 servicecatalog.amazonaws.com 서비스 보안 주체가 역할을 수임할 수 있는 권한이 있어야 합니다. 이러한 권한을 부여하는 방법에 대한 지침은 Service Catalog( Organizations 설명서)를 사용하여 신뢰할 수 있는 액세스 활성화를 참조하세요.AWS

AWS DevOps, DevOps 엔지니어

에 필요한 IAM 역할을 구성합니다 StackSets.

StackSets 를 사용하여 대상 계정에 제품을 자동으로 프로비저닝하는 경우 스택 세트를 관리하고 실행하는 IAM 역할을 구성해야 합니다.

  1. 소스 계정에서 AWSCloudFormationStackSetAdministrationRole이 이미 존재하는지 확인하십시오. 대상 계정에서 AWSCloudFormationStackSetExecutionRole이 이미 존재하는지 확인하십시오. 이러한 역할이 이미 존재하는 경우 다음 에픽으로 건너뛸 수 있습니다.

  2. 자체 관리 권한 부여(IAM 설명서)의 지침에 따라 포트폴리오 계정에서 스택 세트 관리 역할을 생성하고 각 대상 계정에서 실행 역할을 생성합니다.

AWS DevOps, DevOps 엔지니어
작업설명필요한 기술

CloudFormation 템플릿을 생성합니다.

config/templates 폴더에서 포트폴리오에 포함할 제품에 대한 CloudFormation 템플릿을 생성합니다. 자세한 내용은 AWS CloudFormation 템플릿 작업(CloudFormation 문서)을 참조하세요.

앱 개발자, AWS DevOps, DevOps 엔지니어

구성 파일을 사용자 지정합니다.

config 폴더에서 config.json 파일을 열고 사용 사례에 적합한 파라미터를 정의합니다. 달리 명시되지 않는 한 다음 파라미터가 요구됩니다.

  • portfolios 섹션에서 다음 파라미터를 정의하여 하나 이상의 Service Catalog 포트폴리오를 생성합니다.

    • portfolioName - 포트폴리오의 이름.

    • providerName - 포트폴리오를 관리하는 사람, 팀 또는 조직의 이름.

    • description - 포트폴리오에 대한 간단한 설명.

    • roles – (선택 사항) 이 포트폴리오에 액세스할 수 있어야 하는 IAM 역할의 이름입니다. 이 역할을 가진 사용자는 이 포트폴리오의 제품에 액세스할 수 있습니다.

    • users - (선택 사항) 이 포트폴리오와 해당 제품에 액세스할 수 있어야 하는 IAM 사용자의 이름입니다.

    • groups - (선택 사항) 이 포트폴리오 및 해당 제품에 액세스할 수 있어야 하는 IAM 사용자 그룹의 이름입니다.

    경고 : IAM 사용자에게는 보안 위험이 있는 장기 보안 인증 정보가 있습니다. 이 위험을 줄이려면 이러한 사용자에게 작업을 수행하는 데 필요한 권한만 제공하고 더 이상 필요하지 않을 경우 이러한 사용자를 제거하는 것이 좋습니다.

    중요: roles, usersgroups는 모두 선택적 파라미터이지만 이러한 파라미터 중 하나를 정의하지 않으면 아무도 Service Catalog 콘솔에서 포트폴리오 제품을 볼 수 없습니다. 다음 파라미터 중 하나 이상을 정의합니다. 자세한 내용은 Service Catalog 최종 사용자에게 권한 부여(Service Catalog 설명서)를 참조하십시오.

  • (선택 사항) tagOption 섹션에서 제품에 TagOptions 대해 를 정의합니다.

    • key – TagOption 키 이름

    • value - 에 허용되는 문자열 값 TagOption

    자세한 내용은 TagOption 라이브러리(서비스 카탈로그 설명서)를 참조하세요.

  • products 섹션에서 제품에 대해 다음 파라미터를 정의합니다.

    • portfolioName - 제품을 추가하려는 포트폴리오의 이름. 포트폴리오는 하나만 지정할 수 있습니다.

    • productName - 제품의 이름.

    • owner - 제품의 소유자.

    • productVersionName - 문자열 값의 제품 버전 이름(예: v1).

    • templatePath - 제품의 CloudFormation 템플릿에 대한 파일 경로입니다.

    • deployWithStackSets – (선택 사항) 포트폴리오에서 제품을 자동으로 프로비저닝하는 StackSets 데 사용할 계정 및 리전을 하나 이상 지정합니다. 이 배포 옵션을 사용하는 경우 이 섹션의 다음 파라미터가 모두 필요합니다.

      • accounts - 대상 계정.

      • regions - 대상 리전.

      • stackSetAdministrationRoleName - StackSets 구성을 관리하는 데 사용되는 IAM 역할의 이름입니다. 이 값은 변경하지 마십시오. 이 역할에는 정확한 이름이 있어야 합니다.

      • stackSetExecutionRoleName - 스택 인스턴스를 배포하는 대상 계정의 IAM 역할 이름입니다. 이 값은 변경하지 마십시오. 이 역할에는 정확한 이름이 있어야 합니다.

완성된 구성 파일의 예는 추가 정보 섹션의 샘플 구성 파일을 참조하십시오.

앱 개발자, DevOps 엔지니어, AWS DevOps

솔루션을 배포합니다.

다음 명령을 입력하십시오. 이렇게 하면 AWS CDK 앱을 배포하고 config.json 파일에 지정된 대로 Service Catalog 포트폴리오 및 제품을 프로비저닝합니다.

sh +x setup.sh
앱 개발자, DevOps 엔지니어, AWS DevOps

배포를 확인합니다.

다음을 수행하여 배포가 성공했는지 확인하십시오.

  1. 구성 파일에 정의한 포트폴리오 중 하나 이상에 액세스할 수 있는 보안 인증 정보로 AWS 관리 콘솔에 로그인합니다.

  2. 에서 서비스 카탈로그 콘솔을 엽니다https://console.aws.amazon.com/servicecatalog/

  3. 탐색 창의 프로비저닝에서 제품을 선택합니다. 포트폴리오에 지정한 제품 목록이 표시되는지 확인합니다.

  4. 제품 시작 지침(Service Catalog 설명서)에 따라 사용 가능한 제품 중 하나를 실행하십시오. 사용 가능한 제품 버전 및 태그가 구성 파일에 제공한 값과 일치하는지 확인하십시오.

  5. 를 사용하여 하나 이상의 대상 계정에 제품을 자동으로 프로비저닝하도록 선택한 경우 다음을 StackSets수행합니다.

    1. 대상 계정 중 하나에서 프로비전된 제품을 볼 수 있는 권한을 부여하는 보안 인증으로 로그인하십시오.

    2. Service Catalog 콘솔의 탐색 창에서 프로비저닝 아래 프로비저닝된 제품을 선택합니다.

    3. 목록에 예상 제품이 나타나는지 확인합니다.

일반 AWS

(선택 사항) 포트폴리오와 제품을 업데이트하십시오.

이 솔루션을 사용하여 포트폴리오 또는 제품을 업데이트하거나 새 제품을 제공하려는 경우:

  1. config.json 파일에서 필요에 따라 변경합니다.

  2. config/template 폴더에서 필요에 따라 CloudFormation 템플릿을 추가하거나 수정합니다.

  3. 솔루션을 재배포합니다.

예를 들면 포트폴리오를 추가하거나 리소스를 더 프로비저닝할 수 있습니다. AWS CDK 앱은 변경 사항만 구현합니다. 이전에 배포한 포트폴리오 또는 제품에 변경 사항이 없는 경우 재배포는 영향을 받지 않습니다.

앱 개발자, DevOps 엔지니어, 일반 AWS
작업설명필요한 기술

(선택 사항) 이 솔루션에서 배포한 AWS 리소스를 제거합니다.

프로비전된 제품을 삭제하려면 프로비저닝된 제품 삭제(Service Catalog 설명서)의 지침을 따르십시오.

이 솔루션으로 생성된 리소스를 모두 삭제하려면 다음 명령을 입력하십시오.

sh uninstall.sh
AWS DevOps, DevOps 엔지니어, 앱 개발자

관련 리소스

추가 정보

추가 정보

리포지토리 복제

다음 명령을 입력하여 리포지토리를 에서 복제합니다 GitHub.

git clone https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git

샘플 구성 파일

다음은 예제 값이 포함된 샘플 config.json 파일입니다.

{ "portfolios": [ { "displayName": "EC2 Product Portfolio", "providerName": "User1", "description": "Test1", "roles": [ "<Names of IAM roles that can access the products>" ], "users": [ "<Names of IAM users who can access the products>" ], "groups": [ "<Names of IAM user groups that can access the products>" ] }, { "displayName": "Autoscaling Product Portfolio", "providerName": "User2", "description": "Test2", "roles": [ "<Name of IAM role>" ] } ], "tagOption": [ { "key": "Group", "value": [ "finance", "engineering", "marketing", "research" ] }, { "key": "CostCenter", "value": [ "01", "02", "03", "04" ] }, { "key": "Environment", "value": [ "dev", "prod", "stage" ] } ], "products": [ { "portfolioName": "EC2 Product Profile", "productName": "Ec2", "owner": "owner1", "productVersionName": "v1", "templatePath": "../../config/templates/template1.json" }, { "portfolioName": "Autoscaling Product Profile", "productName": "autoscaling", "owner": "owner1", "productVersionName": "v1", "templatePath": "../../config/templates/template2.json", "deployWithStackSets": { "accounts": [ "012345678901", ], "regions": [ "us-west-2" ], "stackSetAdministrationRoleName": "AWSCloudFormationStackSetAdministrationRole", "stackSetExecutionRoleName": "AWSCloudFormationStackSetExecutionRole" } } ] }