Control Tower(CT) 배포 - AWS의 자동 보안 응답

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

Control Tower(CT) 배포

Customizations for AWS Control Tower(CfCT) 가이드는 회사 및 고객을 위해 AWS Control Tower 환경을 사용자 지정하고 확장하려는 관리자, DevOps 전문가, 독립 소프트웨어 개발 판매 회사, IT 인프라 아키텍트 및 시스템 통합 사업자를 위한 것입니다. 이 가이드는 CfCT 사용자 지정 패키지를 사용하여 AWS Control Tower 환경을 사용자 지정하고 확장하는 방법에 대한 정보를 제공합니다.

배포 시간: 약 30분

사전 조건

이 솔루션을 배포하기 전에 AWS Control Tower 관리자를 위한 솔루션인지 확인합니다.

AWS Control Tower 콘솔 또는 APIs를 사용하여 랜딩 존을 설정할 준비가 되면 다음 단계를 따르세요.

AWS Control Tower를 시작하려면 AWS Control Tower 시작하기를 참조하세요.

랜딩 존을 사용자 지정하는 방법을 알아보려면 다음을 참조하세요. 랜딩 존 사용자 지정

랜딩 존을 시작하고 배포하려면 랜딩 존 배포 가이드를 참조하세요.

배포 개요

다음 단계에 따라이 솔루션을 AWS에 배포합니다.

1단계: S3 버킷 빌드 및 배포

참고

S3 버킷 구성 - ADMIN 전용입니다. 이 단계는 일회성 설정 단계이므로 최종 사용자가 반복해서는 안 됩니다. S3 버킷은 ASR을 실행하는 데 필요한 AWS CloudFormation 템플릿 및 Lambda 코드를 포함하여 배포 패키지를 저장합니다. 이러한 리소스는 CfCt 또는 StackSet를 사용하여 배포됩니다.

1. S3 버킷 구성

배포 패키지를 저장하고 제공하는 데 사용할 S3 버킷을 설정합니다.

2. 환경 설정

빌드 및 배포 프로세스에 필요한 환경 변수, 자격 증명 및 도구를 준비합니다.

3. S3 버킷 정책 구성

적절한 버킷 정책을 정의하고 적용하여 액세스 및 권한을 제어합니다.

4. 빌드 준비

배포를 위해 애플리케이션 또는 자산을 컴파일, 패키징 또는 준비합니다.

5. S3에 패키지 배포

준비된 빌드 아티팩트를 지정된 S3 버킷에 업로드합니다.

2단계: AWS Control Tower에 배포 스택

1. ASR 구성 요소에 대한 빌드 매니페스트 생성

모든 ASR 구성 요소, 해당 버전, 종속성 및 빌드 지침을 나열하는 빌드 매니페스트를 정의합니다.

2. CodePipeline 업데이트

ASR 구성 요소를 배포하는 데 필요한 새 빌드 단계, 아티팩트 또는 단계를 포함하도록 AWS CodePipeline 구성을 수정합니다.

1단계: S3 버킷 빌드 및 배포

AWS 솔루션은 HTTPS를 통해 액세스하는 템플릿에 대한 글로벌 액세스를 위한 버킷과 Lambda 코드와 같은 리전 내 자산에 액세스하기 위한 리전 버킷이라는 두 개의 버킷을 사용합니다.

1. S3 버킷 구성

asr-staging과 같은 고유한 버킷 이름을 선택합니다. 터미널에 두 개의 환경 변수를 설정합니다. 하나는 참조가 접미사이고 다른 하나는 의도한 배포 리전이 접미사인 기본 버킷 이름이어야 합니다.

export BASE_BUCKET_NAME=asr-staging-$(date +%s) export TEMPLATE_BUCKET_NAME=$BASE_BUCKET_NAME-reference export REGION=us-east-1 export ASSET_BUCKET_NAME=$BASE_BUCKET_NAME-$REGION
2. 환경 설정

AWS 계정에서 asr-staging-reference 및 asr-staging-us-east-1과 같은 이름으로 두 개의 버킷을 생성합니다. (참조 버킷에는 CloudFormation 템플릿이 저장되고 리전 버킷에는 Lambda 코드 번들과 같은 다른 모든 자산이 저장됩니다.) 버킷은 암호화되어야 하며 퍼블릭 액세스를 허용하지 않아야 합니다.

aws s3 mb s3://$TEMPLATE_BUCKET_NAME/
aws s3 mb s3://$ASSET_BUCKET_NAME/
참고

버킷을 생성할 때 버킷에 공개적으로 액세스할 수 없는지 확인합니다. 무작위 버킷 이름을 사용합니다. 퍼블릭 액세스를 비활성화합니다. KMS 암호화를 사용합니다. 그리고 업로드하기 전에 버킷 소유권을 확인합니다.

3. S3 버킷 정책 설정

실행 계정 ID에 대한 PutObject 권한을 포함하도록 $TEMPLATE_BUCKET_NAME S3 버킷 정책을 업데이트합니다. 버킷에 쓸 수 있는 권한이 있는 실행 계정 내의 IAM 역할에이 권한을 할당합니다. 이 설정을 사용하면 관리 계정에서 버킷을 생성하지 않아도 됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::<template bucket name>/*", "arn:aws:s3:::<template bucket name>" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "<org id>" } } }, { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::<template bucket name>/*", "arn:aws:s3:::<template bucket name>" ], "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::<execute_account_id>:role/<iam_role_name>" } } } ] }

권한을 포함하도록 자산 S3 버킷 정책을 변경합니다. 버킷에 쓸 수 있는 권한이 있는 실행 계정 내의 IAM 역할에이 권한을 할당합니다. 각 리전 자산 버킷(예: asr-staging-us-east-1, asr-staging-eu-west-1 등)에 대해이 설정을 반복하여 관리 계정에서 버킷을 생성할 필요 없이 여러 리전에 배포할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "<org id>" } } }, { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::<execute_account_id>:role/<iam_role_name>" } } } ] }
4. 빌드 준비

먼저 소스 폴더에 npm 설치를 실행했는지 확인합니다.

복제된 리포지토리의 배포 폴더 옆에서 build-s3-dist.sh 실행하여 버킷의 루트 이름(예: mybucket)과 빌드 중인 버전(예: v1.0.0)을 전달합니다. GitHub에서 다운로드한 버전(예: GitHub: v1.0.0, 빌드: v1.0.0.mybuild)

chmod +x build-s3-dist.sh
export SOLUTION_NAME=automated-security-response-on-aws
export SOLUTION_VERSION=v1.0.0.mybuild
./build-s3-dist.sh -b $BASE_BUCKET_NAME -v $SOLUTION_VERSION

5. S3에 패키지 배포

cd deployment
aws s3 cp global-s3-assets/  s3://$TEMPLATE_BUCKET_NAME/$SOLUTION_NAME/$SOLUTION_VERSION/ --recursive --acl bucket-owner-full-control
aws s3 cp regional-s3-assets/  s3://$ASSET_BUCKET_NAME/$SOLUTION_NAME/$SOLUTION_VERSION/ --recursive --acl bucket-owner-full-control

2단계: AWS Control Tower에 배포 스택

1. ASR 구성 요소에 대한 매니페스트 빌드

S3 버킷에 ASR 아티팩트를 배포한 후 Control Tower 파이프라인 매니페스트를 업데이트하여 새 버전을 참조한 다음 파이프라인 실행을 트리거합니다. controltower 배포를 참조하세요.

중요

ASR 솔루션을 올바르게 배포하려면 CloudFormation 템플릿 개요 및 파라미터 설명에 대한 자세한 내용은 공식 AWS 설명서를 참조하세요. 아래 정보 링크: CloudFormation 템플릿 파라미터 개요 가이드

ASR 구성 요소의 매니페스트는 다음과 같습니다.

region: us-east-1 #<HOME_REGION_NAME> version: 2021-03-15 # Control Tower Custom CloudFormation Resources resources: - name: <ADMIN STACK NAME> resource_file: s3://<ADMIN TEMPLATE BUCKET path> parameters: - parameter_key: UseCloudWatchMetricsAlarms parameter_value: "yes" - parameter_key: TicketGenFunctionName parameter_value: "" - parameter_key: LoadSCAdminStack parameter_value: "yes" - parameter_key: LoadCIS120AdminStack parameter_value: "no" - parameter_key: TargetAccountIDsStrategy parameter_value: "INCLUDE" - parameter_key: LoadCIS300AdminStack parameter_value: "no" - parameter_key: UseCloudWatchMetrics parameter_value: "yes" - parameter_key: LoadNIST80053AdminStack parameter_value: "no" - parameter_key: LoadCIS140AdminStack parameter_value: "no" - parameter_key: ReuseOrchestratorLogGroup parameter_value: "yes" - parameter_key: LoadPCI321AdminStack parameter_value: "no" - parameter_key: RemediationFailureAlarmThreshold parameter_value: "5" - parameter_key: LoadAFSBPAdminStack parameter_value: "no" - parameter_key: TargetAccountIDs parameter_value: "ALL" - parameter_key: EnableEnhancedCloudWatchMetrics parameter_value: "no" deploy_method: stack_set deployment_targets: accounts: # :type: list - <ACCOUNT_NAME> # and/or - <ACCOUNT_NUMBER> regions: - <REGION_NAME> - name: <ROLE MEMBER STACK NAME> resource_file: s3://<ROLE MEMBER TEMPLATE BUCKET path> parameters: - parameter_key: SecHubAdminAccount parameter_value: <ADMIN_ACCOUNT_NAME> - parameter_key: Namespace parameter_value: <NAMESPACE> deploy_method: stack_set deployment_targets: organizational_units: - <ORG UNIT> - name: <MEMBER STACK NAME> resource_file: s3://<MEMBER TEMPLATE BUCKET path> parameters: - parameter_key: SecHubAdminAccount parameter_value: <ADMIN_ACCOUNT_NAME> - parameter_key: LoadCIS120MemberStack parameter_value: "no" - parameter_key: LoadNIST80053MemberStack parameter_value: "no" - parameter_key: Namespace parameter_value: <NAMESPACE> - parameter_key: CreateS3BucketForRedshiftAuditLogging parameter_value: "no" - parameter_key: LoadAFSBPMemberStack parameter_value: "no" - parameter_key: LoadSCMemberStack parameter_value: "yes" - parameter_key: LoadPCI321MemberStack parameter_value: "no" - parameter_key: LoadCIS140MemberStack parameter_value: "no" - parameter_key: EnableCloudTrailForASRActionLog parameter_value: "no" - parameter_key: LogGroupName parameter_value: <LOG_GROUP_NAME> - parameter_key: LoadCIS300MemberStack parameter_value: "no" deploy_method: stack_set deployment_targets: accounts: # :type: list - <ACCOUNT_NAME> # and/or - <ACCOUNT_NUMBER> organizational_units: - <ORG UNIT> regions: # :type: list - <REGION_NAME>
2. 코드 파이프라인 업데이트

custom-control-tower-configuration.zip에 매니페스트 파일을 추가하고 CodePipeline을 실행합니다. 코드 파이프라인 개요를 참조하세요.