기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
작성자: Dr. Rahul Sharad Gaikwad(AWS) 및 Tamilselvan P(AWS)
AWS Service Catalog 는 HashiCorp Terraform 구성에 대한 거버넌스를 통한 셀프 서비스 프로비저닝을 지원합니다. Terraform을 사용하는 경우 서비스 카탈로그를 단일 도구로 사용하여 AWS 대규모로 내에서 Terraform 구성을 구성, 관리 및 배포할 수 있습니다. 표준화되고 사전 승인된 코드형 인프라(IaC) 템플릿의 카탈로그 작성, 액세스 제어, 최소 권한 액세스를 통한 클라우드 리소스 프로비저닝, 버전 관리, 수천 개에 대한 공유 AWS 계정, 태그 지정 등 Service Catalog 주요 기능에 액세스할 수 있습니다. 엔지니어, 데이터베이스 관리자, 데이터 과학자와 같은 최종 사용자는 액세스할 수 있는 제품 및 버전 목록을 보고 단일 작업을 통해 배포할 수 있습니다.
이 패턴은 Terraform 코드를 사용하여 AWS 리소스를 배포하는 데 도움이 됩니다. GitHub 리포지토리의 Terraform 코드는 Service Catalog를 통해 액세스합니다. 이 접근 방식을 사용하면 제품을 기존 Terraform 워크플로와 통합할 수 있습니다. 관리자는 Terraform을 사용하여 Service Catalog 포트폴리오를 생성하고 AWS Launch Wizard 제품을 추가할 수 있습니다.
다음은이 솔루션의 이점입니다.
Service Catalog의 롤백 기능으로 인해 배포 중에 문제가 발생하면 제품을 이전 버전으로 되돌릴 수 있습니다.
제품 버전 간의 차이점을 쉽게 식별할 수 있습니다. 이렇게 하면 배포 중에 문제를 해결하는 데 도움이 됩니다.
Service Catalog에서 GitHub 또는와 같은 리포지토리 연결을 구성할 수 있습니다 GitLab. 리포지토리를 통해 직접 제품을 변경할 수 있습니다.
의 전반적인 이점에 대한 자세한 내용은 서비스 카탈로그란 무엇입니까?를 AWS Service Catalog참조하세요.
사전 조건
활성 AWS 계정.
ZIP 형식의 Terraform 구성 파일이 포함된 A GitHub BitBucket또는 기타 리포지토리입니다.
AWS Serverless Application Model 명령줄 인터페이스(AWS SAM CLI), 설치됨.
AWS Command Line Interface (AWS CLI), 설치 및 구성됨.
Go, 설치됨.
Python 버전 3.9가 설치되었습니다. AWS SAM CLI 에는이 버전의 Python이 필요합니다.
Service Catalog 제품 및 포트폴리오에 액세스하고 관리할 수 있는 AWS Lambda 함수 및 권한을 작성하고 실행할 수 있는 권한.
이 다이어그램은 다음 워크플로를 보여줍니다.
Terraform 구성이 준비되면 개발자는 모든 Terraform 코드가 포함된 .zip 파일을 생성합니다. 개발자는 Service Catalog에 연결된 코드 리포지토리에 .zip 파일을 업로드합니다.
관리자가 서비스 카탈로그의 포트폴리오에 Terraform 제품을 연결합니다. 또한 관리자는 최종 사용자가 제품을 프로비저닝할 수 있도록 허용하는 시작 제약 조건을 생성합니다.
서비스 카탈로그에서 최종 사용자는 Terraform 구성을 사용하여 AWS 리소스를 시작합니다. 배포할 제품 버전을 선택할 수 있습니다.
AWS 서비스
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
AWS Service Catalog는 승인된 IT 서비스의 카탈로그를 중앙에서 관리할 수 있도록 지원합니다 AWS. 최종 사용자는 조직에서 규정한 제약에 따라, 필요에 따라 승인된 IT 서비스만 신속하게 배포할 수 있습니다.
기타 서비스
코드 리포지토리
Service Catalog를 통해 배포할 수 있는 샘플 Terraform 구성이 필요한 경우 GitHub Terraform 리포지토리를 사용한 Amazon Macie Organization Setup에서 구성을 사용할 수 있습니다. 이 리포지토리에서 코드 샘플을 사용할 필요는 없습니다.
서비스 카탈로그를 통해 제품을 시작할 때 Terraform 구성 파일(terraform.tfvars
)의 변수 값을 제공하는 대신 변수 값을 구성합니다.
포트폴리오에 대한 액세스 권한을 특정 사용자 또는 관리자에게만 부여합니다.
최소 권한 원칙을 따르고 작업을 수행하는 데 필요한 최소 권한을 부여합니다. 자세한 내용은 AWS Identity and Access Management (IAM) 설명서의 최소 권한 부여 및 보안 모범 사례를 참조하세요.
작업 | 설명 | 필요한 기술 |
---|
(선택 사항) Docker를 설치합니다. | 개발 환경에서 AWS Lambda 함수를 실행하려면 Docker를 설치합니다. 자세한 내용은 도커 설명서의 도커 엔진 설치 단원을 참조하세요. | DevOps 엔지니어 |
Terraform용 AWS Service Catalog 엔진을 설치합니다. | 다음 명령을 입력하여 AWS Service Catalog Engine for Terraform 리포지토리를 복제합니다. git clone https://github.com/aws-samples/service-catalog-engine-for-terraform-os.git
복제된 리포지토리의 루트 디렉터리로 이동합니다. 다음 명령을 입력합니다. 이렇게 하면 엔진이 설치됩니다. run ./bin/bash/deploy-tre.sh -r
자동 설치 중에는 기본 프로필의 AWS 리전 세트가 사용되지 않습니다. 대신이 명령을 실행할 때 리전을 제공합니다.
| DevOps 엔지니어, AWS 관리자 |
작업 | 설명 | 필요한 기술 |
---|
GitHub 리포지토리에 대한 연결을 생성합니다. | 에 로그인 AWS Management Console한 다음 개발자 도구 콘솔을 엽니다. AWS CodePipeline 또는 같은 서비스를 선택하여 개발자 도구 콘솔에 액세스할 수 있습니다 AWS CodeDeploy. 왼쪽 탐색 창에서 설정을 선택한 다음 연결을 선택합니다. 연결 생성을 선택합니다. Terraform 소스 코드를 유지 관리하는 리포지토리를 선택합니다. 예를 들어 Bitbucket, GitHub또는 GitHub Enterprise Server를 선택할 수 있습니다. 연결 이름을 입력한 다음 연결을 선택합니다. 메시지가 표시되면 리포지토리를 인증합니다. 인증이 완료되면 연결이 생성되고 상태가 활성으로 변경됩니다.
| AWS 관리자 |
작업 | 설명 | 필요한 기술 |
---|
Service Catalog 제품을 생성합니다. | AWS Service Catalog 콘솔을 엽니다. 관리 섹션으로 이동한 다음 제품 목록을 선택합니다. 제품 생성을 선택합니다. 제품 세부 정보 섹션의 제품 생성 페이지에서 외부 제품 유형을 선택합니다. Service Catalog는이 제품 유형을 사용하여 Terraform Community Edition 제품을 지원합니다. 서비스 카탈로그 제품의 이름과 소유자를 입력합니다. CodeStar 공급자를 사용하여 코드 리포지토리 지정을 선택합니다. 리포지토리에 대한 다음 정보를 입력합니다. 버전 이름 및 설명에서 제품 버전에 대한 정보를 제공합니다. 제품 생성을 선택합니다.
| AWS 관리자 |
포트폴리오를 생성합니다. | | AWS 관리자 |
포트폴리오에 Terraform 제품을 추가합니다. | AWS Service Catalog 콘솔을 엽니다. 관리 섹션으로 이동한 다음 제품 목록을 선택합니다. 이전에 생성한 Terraform 제품을 선택합니다. 작업을 선택한 다음 포트폴리오에 제품 추가를 선택합니다. Sample terraform 포트폴리오를 선택합니다.
포트폴리오에 제품 추가를 선택합니다.
| AWS 관리자 |
액세스 정책을 생성합니다. | AWS Identity and Access Management (IAM) 콘솔을 엽니다. 탐색 창에서 정책을 선택합니다. 콘텐츠 창에서 정책 생성을 선택합니다. JSON 옵션을 선택합니다. 이 패턴의 추가 정보 섹션에 있는 액세스 정책에 샘플 JSON 정책을 입력합니다. Next(다음)를 선택합니다. 검토 및 생성 페이지의 정책 이름 상자에를 입력합니다TerraformResourceCreationAndArtifactAccessPolicy . 정책 생성을 선택합니다.
| AWS 관리자 |
사용자 지정 신뢰 정책을 생성합니다. | IAM 콘솔을 엽니다. 탐색 창에서 Roles를 선택합니다. Create role(역할 생성)을 선택합니다. 신뢰할 수 있는 엔터티 유형에서 신뢰 정책 사용자 지정을 선택합니다. JSON 정책 편집기에서이 패턴의 추가 정보 섹션에 있는 신뢰 JSON 정책에 샘플 정책을 입력합니다. Next(다음)를 선택합니다. 권한 정책에서 이전에 생성한 TerraformResourceCreationAndArtifactAccessPolicy 를 선택합니다. Next(다음)를 선택합니다. 역할 세부 정보의 역할 이름 상자에를 입력합니다SCLaunch-product . 역할 이름은 로 시작해야 합니다SCLaunch . 역할 생성을 선택합니다.
| AWS 관리자 |
Service Catalog 제품에 시작 제약 조건을 추가합니다. | 관리 권한이 있는 사용자 AWS Management Console 로에 로그인합니다. AWS Service Catalog 콘솔을 엽니다. 탐색 창에서 포트폴리오를 선택합니다. 이전에 생성한 포트폴리오를 선택합니다. 포트폴리오 세부 정보 페이지에서 제약 조건 탭을 선택한 다음 제약 조건 생성을 선택합니다. 제품에서 이전에 생성한 Terraform 제품을 선택합니다. 시작 제약 조건의 메서드에서 역할 이름 입력을 선택합니다. 역할 이름 상자에를 입력합니다SCLaunch-product . 생성(Create)을 선택합니다.
| AWS 관리자 |
제품에 대한 액세스 권한을 부여합니다. | AWS Service Catalog 콘솔을 엽니다. 탐색 창에서 포트폴리오를 선택합니다. 이전에 생성한 포트폴리오를 선택합니다. 액세스 탭을 선택한 다음 액세스 권한 부여를 선택합니다. 역할탭을 선택한 다음이 제품을 배포할 수 있는 액세스 권한이 있어야 하는 역할을 선택합니다. 액세스 권한 부여를 선택합니다.
| AWS 관리자 |
제품을 시작합니다. | Service Catalog 제품을 배포할 수 있는 권한이 있는 사용자 AWS Management Console 로에 로그인합니다. AWS Service Catalog 콘솔을 엽니다. 탐색 창에서 제품을 선택합니다. 이전에 생성한 농산물을 선택한 다음 제품 시작을 선택합니다. 제품 이름을 입력하고 필요한 파라미터를 정의합니다. 제품 시작을 선택합니다.
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|
배포를 검증합니다. | Service Catalog 프로비저닝 워크플로에는 두 가지 AWS Step Functions 상태 시스템이 있습니다. ManageProvisionedProductStateMachine - Service Catalog는 새 Terraform 제품을 프로비저닝할 때와 기존 Terraform 프로비저닝 제품을 업데이트할 때이 상태 시스템을 호출합니다.
TerminateProvisionedProductStateMachine - Service Catalog는 기존 Terraform 프로비저닝 제품을 종료할 때이 상태 시스템을 호출합니다.
ManageProvisionedProductStateMachine 상태 시스템의 로그를 확인하여 제품이 프로비저닝되었는지 확인합니다.
에 로그인 AWS Management Console한 다음 AWS Step Functions 콘솔을 엽니다. 왼쪽 탐색 창에서 상태 머신을 선택합니다. 를 선택합니다ManageProvisionedProductStateMachine . 실행 목록에서 프로비저닝된 제품 ID를 입력하여 실행을 찾습니다. 상태 파일 백엔드 버킷 이름은 로 시작합니다sc-terraform-engine-state- . 계정에 필요한 모든 리소스가 생성되었는지 확인합니다.
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|
프로비저닝된 제품을 삭제합니다. | Service Catalog 제품을 배포할 수 있는 권한이 있는 사용자 AWS Management Console 로에 로그인합니다. AWS Service Catalog 콘솔을 엽니다. 왼쪽 탐색 창에서 프로비저닝된 제품을 선택합니다. 생성한 제품을 선택합니다. 작업 목록에서 종료를 선택합니다. 확인 텍스트 상자에 terminate 를 입력한 다음 프로비저닝된 제품 종료를 선택합니다. 이 단계를 반복하여 프로비저닝된 모든 제품을 종료합니다.
| DevOps 엔지니어 |
Terraform용 AWS Service Catalog 엔진을 제거합니다. | 관리 권한이 있는 사용자 AWS Management Console 로에 로그인합니다. Amazon Simple Storage Service(Amazon S3) 콘솔을 엽니다. 탐색 창에서 버킷을 선택합니다. sc-terraform-engine-logging-XXXX 버킷을 선택합니다.
비우기를 선택합니다. 다음 버킷에 대해 4~5단계를 반복합니다. AWS CloudFormation 콘솔을 열고 올바른에 있는지 확인합니다 AWS 리전. 왼쪽 탐색에서 스택을 선택합니다. SAM-TRE 를 선택한 다음 삭제를 선택합니다. 스택이 삭제될 때까지 기다립니다.
Bootstrap-TRE 를 선택한 다음 삭제를 선택합니다. 스택이 삭제될 때까지 기다립니다.
| AWS 관리자 |
AWS 설명서
Terraform 설명서
액세스 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "*",
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/servicecatalog:provisioning": "true"
}
}
},
{
"Action": [
"s3:CreateBucket*",
"s3:DeleteBucket*",
"s3:Get*",
"s3:List*",
"s3:PutBucketTagging"
],
"Resource": "arn:aws:s3:::*",
"Effect": "Allow"
},
{
"Action": [
"resource-groups:CreateGroup",
"resource-groups:ListGroupResources",
"resource-groups:DeleteGroup",
"resource-groups:Tag"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"tag:GetResources",
"tag:GetTagKeys",
"tag:GetTagValues",
"tag:TagResources",
"tag:UntagResources"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
신뢰 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GivePermissionsToServiceCatalog",
"Effect": "Allow",
"Principal": {
"Service": "servicecatalog.amazonaws.com"
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account_id:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringLike": {
"aws:PrincipalArn": [
"arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*",
"arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*",
"arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*"
]
}
}
}
]
}