Amazon Web Services 한국 블로그

새로운 기능 – AWS Control Tower Account Factory for Terraform

AWS Control Tower를 사용하면 안전한 다중 계정 AWS 환경을 보다 쉽게 설정하고 관리할 수 있습니다. AWS Control Tower는 AWS Organizations를 사용하여 랜딩 존을 생성함으로써 수천의 고객과 협력해온 AWS의 경험을 바탕으로 지속적인 계정 관리 및 거버넌스를 제공합니다.

AWS CloudFormation을 사용하여 코드형 인프라를 관리하는 경우 개별 계정과 조직 내의 조직 단위(OU)에 사용자 지정 템플릿과 정책을 배포하는 데 유용한 솔루션인 Customizations for AWS Control Tower를 사용하여 AWS Control Tower 랜딩 존을 사용자 지정할 수 있습니다.

하지만 Terraform을 사용하여 AWS 인프라를 관리한다면 어떨까요?

오늘, 배포 파이프라인을 사용하여 Terraform을 통해 AWS 계정을 프로비저닝하고 사용자 지정할 수 있는 새로운 Terraform 모듈로, AWS Control Tower 팀에서 유지 관리하는 AWS Control Tower Account Factory for Terraform(AFT)을 제공하게 되어 기쁩니다. 개발 파이프라인의 소스 코드는 AWS CodeCommit, GitHub, GitHub Enterprise 또는 BitBucket에 저장할 수 있습니다. AFT를 사용하면 생산성을 높이는 데 필요한 모든 리소스에 액세스할 수 있도록 완벽한 권한을 갖춘 계정의 생성을 자동화할 수 있습니다. 이 모듈은 Terraform open source, Terraform EnterpriseTerraform Cloud와 호환됩니다.

아키텍처 다이어그램.

실제로 어떻게 작동하는지 알아보겠습니다.

AWS Control Tower Account Factory for Terraform 사용
먼저 AWS Control Tower Account Factory for Terraform(AFT) 모듈을 사용하는 main.tf 파일을 생성합니다.

module "aft" {
  source = "git@github.com:aws-ia/terraform-aws-control_tower_account_factory.git"

  # 필수 파라미터
  ct_management_account_id    = "123412341234"
  log_archive_account_id      = "234523452345"
  audit_account_id            = "345634563456"
  aft_management_account_id   = "456745674567"
  ct_home_region              = "us-east-1"
  tf_backend_secondary_region = "us-west-2"

  # 선택적 파라미터
  terraform_distribution = "oss"
  vcs_provider           = "codecommit"

  # 선택적 기능 플래그
  aft_feature_delete_default_vpcs_enabled = false
  aft_feature_cloudtrail_data_events      = false
  aft_feature_enterprise_support          = false
}

처음 6개 파라미터는 필수입니다. 전제 조건으로, AWS 조직에 있는 4개의 AWS 계정 ID를 전달해야 합니다.

  • ct_management_account_id – AWS Control Tower 관리 계정
  • log_archive_account_id – 로그 아카이브 계정
  • audit_account_id – 감사 계정
  • aft_management_account_id – AFT 관리 계정

그런 다음 두 AWS 리전을 전달해야 합니다.

  • ct_home_region – 이 모듈이 실행될 리전입니다. 이 리전은 AWS Control Tower가 배포된 리전과 같아야 합니다.
  • tf_backend_secondary_region – 백엔드 기본 리전은 AFT 리전과 동일합니다. 이 파라미터는 복제본이 위치할 보조 리전을 정의합니다. AFT는 자체 상태에 대한 상태 추적 기능에 사용할 백엔드를 만듭니다. 이는 오픈 소스 버전을 사용할 경우 Terraform에도 사용됩니다.

다른 파라미터는 선택 사항이며 앞서의 main.tf 파일에서 기본값으로 설정됩니다.

  • terraform_distribution – Terraform 오픈 소스(기본값), Enterprise 또는 Cloud 중에서 선택합니다.
  • vcs_provider – AWS CodeCommit(기본값), GitHub, GitHub Enterprise 또는 BitBucket 중에서 사용할 버전 관리 시스템을 선택합니다.

이러한 기능 플래그는 기본적으로 사용 중지되어 있으며 사용하도록 설정하지 않을 경우 생략할 수 있습니다.

  • aft_feature_delete_default_vpcs_enabled – 새 계정의 기본 VPC를 자동으로 삭제합니다.
  • aft_feature_cloudtrail_data_events – 새 계정에 AWS CloudTrail 데이터 이벤트를 사용하려면 설정합니다. 이 옵션은 규제가 엄격한 환경에서 규정 준수를 위해 일반적으로 필요하며, 비용에 영향을 줄 수 있습니다.
  • aft_feature_enterprise_support – Enterprise Support에 새 계정을 자동으로 등록하려면(Enterprise Support 플랜이 있는 경우) 설정합니다.

먼저 프로젝트를 초기화하고 플러그인을 다운로드합니다.

terraform init

그런 다음 AWS Single Sign-On을 사용하여 AWS Control Tower 관리 계정으로 로그인하고 배포를 시작합니다.

terraform apply

예(Yes)를 선택하여 확인하면 잠시 후 배포가 완료됩니다.

이제 다시 AWS SSO를 사용하여 AFT 관리 계정으로 로그인합니다. AWS CodeCommit 콘솔에는 AFT로 생성된 계정을 사용자 지정하는 데 사용할 수 있는 4개의 리포지토리가 있습니다.

콘솔 스크린샷.

이러한 리포지토리는 AWS CodePipeline이 관리하는 파이프라인에서 계정 생성을 자동화하는 데 사용됩니다.

  • xaft-account-request – 여기에서 AFT에서 프로비저닝하고 관리하는 계정을 요청합니다.
  • aft-global-customizations – 이 리포지토리를 사용하여 프로비저닝된 모든 계정을 고객 정의 리소스로 사용자 지정할 수 있습니다. 리소스는 Terraform 또는 Python을 통해 생성할 수 있습니다.
  • aft-account-customizations – 여기에서는 aft-account-request 리포지토리의 account_customizations_name 파라미터 값에 따라, 프로비저닝된 계정을 사용자 지정할 수 있습니다. 이러한 방식으로 계정이 사용되는 역할별로 다양한 사용자 지정 세트를 만들 수 있습니다.
  • aft-account-provisioning-customizations – 이 리포지토리는 AWS Step Functions를 사용하여 새 계정에 대한 프로비저닝 프로세스를 사용자 지정하고 추가 환경과의 통합을 간소화합니다. 상태 시스템은 AWS Lambda 함수, Amazon Elastic Container Service(Amazon ECS) 또는 AWS Fargate 태스크, AWS나 온프레미스에서 호스팅되는 사용자 지정 작업, 외부 애플리케이션과 통신하기 위한 Amazon Simple Notification Service(SNS)Amazon Simple Queue Service(SQS)를 사용할 수 있습니다.

현재 이 4개의 리포지토리는 모두 비어 있습니다. 시작하려면 AFT Terraform 모듈의 GitHub 리포지토리에서 sources/aft-customizations-repos 폴더에 있는 코드를 사용합니다.

aft-account-request 리포지토리의 예제를 사용하여 2개의 AWS 계정을 만들기 위한 템플릿을 준비합니다. 두 계정 중 하나는 소프트웨어 개발자를 위한 계정입니다.

소프트웨어 개발자가 빠르게 생산성을 높일 수 있도록 특정 계정 사용자 지정을 만듭니다. 템플릿에서 account_customizations_name 파라미터를 developer-customization과 동일하게 설정합니다.

그런 다음 aft-account-customizations 리포지토리에서 developer-customization 폴더를 생성합니다. 이 폴더에 Terraform 템플릿을 넣어 해당 유형의 새 계정을 위한 AWS Cloud9 EC2 기반 개발 환경을 자동으로 생성합니다. 내부 또는 외부 API를 호출하는 등, 필요한 경우 Python 코드를 사용하여 확장할 수 있습니다. 이 방법을 사용하면, 제공 파이프라인을 진행하는 과정에서 소프트웨어 개발자를 위한 모든 신규 계정에 개발 환경이 준비됩니다.

변경 사항을 기본 브랜치로 푸시합니다(aft-account-customizations 리포지토리로 푸시된 후 aft-account-request)로 푸시됨. 그러면 파이프라인 실행이 트리거됩니다. 몇 분 후에 2개의 새 계정이 사용할 준비가 됩니다.

고유한 요구 사항에 따라 AFT에서 만든 계정을 사용자 지정할 수 있습니다. 예를 들어 각 계정에 고유한 보안 설정(예: IAM 역할 또는 보안 그룹) 및 스토리지(예: 사전 구성된 Amazon Simple Storage Service(Amazon S3) 버킷)를 제공할 수 있습니다.

가용성 및 요금
AWS Control Tower Account Factory for Terraform(AFT)은 AWS Control Tower가 제공되는 모든 리전에서 작동합니다. AFT를 사용하는 데 따른 추가 비용은 없습니다. 솔루션에서 사용하는 서비스에 대해 비용을 지불합니다. 예를 들어 AWS Control Tower를 설정하면 랜딩 존과 필수 가드레일을 설정하도록 구성된 AWS 서비스에 대한 비용이 발생하기 시작합니다.

AWS는 HashiCorp와 협력하여 이 솔루션을 구축했습니다. HashiCorp의 공동 창립자이자 CTO인 Armon Dadgar는 “수백 또는 수천 명의 사용자가 있는 클라우드 환경을 관리하는 것은 복잡하고 시간이 많이 소요될 수 있습니다. Terraform과 AWS Control Tower를 통합하는 소프트웨어 전송 파이프라인을 사용하면 모든 계정에서 일관된 거버넌스 및 규정 준수 요구 사항을 보다 쉽게 실현할 수 있습니다”라고 밝혔습니다.

이 파이프라인은 계정 프로비저닝이 완료되는 시점을 모니터링한 다음, 추가 Terraform 모듈을 트리거하여 추가 사용자 지정으로 계정을 향상시키는 계정 생성 프로세스를 제공합니다. 자체 사용자 지정 Terraform 모듈을 사용하도록 파이프라인을 구성하거나, 일반 제품 및 구성용으로 사전 게시된 Terraform 모듈 중에서 선택할 수 있습니다.

AWS Control Tower Account Factory for Terraform을 사용하여 AWS 계정 생성을 간소화하고 표준화하세요.

Danilo