기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS CloudFormation 템플릿을 사용하여 조건부로 Amazon GuardDuty 활성화
Ram Kandaswamy, Amazon Web Services
요약
AWS CloudFormation코드형 인프라(IaC) 도구인는 템플릿 기반 배포를 통해 AWS 리소스를 관리하는 데 도움이 됩니다. CloudFormation은 일반적으로 AWS 리소스를 관리하는 데 사용됩니다. 이를 사용하여 Amazon GuardDuty AWS 서비스와 같은를 활성화하면 고유한 문제가 발생할 수 있습니다. GuardDuty는 AWS 계정 악의적인 활동 및 무단 행동을 지속적으로 모니터링하는 위협 탐지 서비스입니다. 여러 번 생성할 수 있는 일반적인 리소스와 달리 GuardDuty는 계정당 한 번 활성화해야 하는 서비스입니다 AWS 리전. 기존 CloudFormation 조건은 정적 값 비교만 지원하므로 GuardDuty와 같은 서비스의 현재 상태를 확인하기가 어렵습니다. 이미 활성 상태인 계정에서 CloudFormation을 통해 GuardDuty를 활성화하려고 하면 스택 배포가 실패합니다. 이렇게 하면 다중 계정 환경을 관리하는 DevOps 팀에 운영 문제가 발생할 수 있습니다.
이 패턴은이 문제에 대한 솔루션을 도입합니다. AWS Lambda 함수가 지원하는 CloudFormation 사용자 지정 리소스를 사용하여 동적 상태 확인을 수행합니다. 조건부 로직은 아직 활성화되지 않은 경우에만 GuardDuty를 활성화합니다. 스택 출력을 사용하여 향후 참조를 위해 GuardDuty 상태를 기록합니다.
이 패턴을 따르면 AWS 인프라 전반의 GuardDuty 배포를 자동화하는 동시에 깔끔하고 예측 가능한 CloudFormation 스택 작업을 유지할 수 있습니다. 이 접근 방식은 다음과 같은 조직에 특히 유용합니다.
IaC AWS 계정 를 통해 여러 관리
대규모 보안 서비스 구현
멱등성 인프라 배포 필요
보안 서비스 배포 자동화
사전 조건 및 제한 사항
사전 조건
제한 사항
AWS 계정 또는에 대해 GuardDuty가 수동으로 비활성화된 경우 AWS 리전이 패턴은 해당 대상 계정 또는 리전에 대해 GuardDuty를 활성화하지 않습니다.
아키텍처
대상 기술 스택
이 패턴은 코드형 인프라(IaC)용 CloudFormation을 사용합니다. Lambda 함수가 지원하는 CloudFormation 사용자 지정 리소스를 사용하여 동적 서비스 지원 기능을 구현할 수 있습니다.
대상 아키텍처
아래의 상위 아키텍처 다이어그램은 CloudFormation 템플릿을 배포하여 GuardDuty를 활성화하는 프로세스를 보여줍니다.

CloudFormation 템플릿을 배포하여 CloudFormation 스택을 생성합니다.
스택은 IAM 역할과 Lambda 함수를 생성합니다.
Lambda 함수는 IAM 역할을 맡습니다.
대상에서 GuardDuty가 아직 활성화되지 않은 경우 Lambda 함수 AWS 계정가 이를 활성화합니다.
자동화 및 규모 조정
AWS CloudFormation StackSet 기능을 사용하여이 솔루션을 여러 AWS 계정 및 로 확장할 수 있습니다 AWS 리전. 자세한 내용은 CloudFormation 설명서의AWS CloudFormation StackSets 작업을 참조하세요.
도구
AWS Command Line Interface (AWS CLI)는 명령줄 셸의 명령을 AWS 서비스 통해와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.
AWS CloudFormation를 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및 리전의 수명 주기 동안 리소스를 관리할 수 있습니다.
Amazon GuardDuty는 로그를 분석하고 처리하여 AWS 환경에서 예기치 않고 잠재적으로 승인되지 않은 활동을 식별하는 지속적인 보안 모니터링 서비스입니다.
AWS Identity and Access Management (IAM)는 AWS 리소스에 대한 액세스를 인증하고 사용할 권한이 있는 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
에픽
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
Amazon S3에 코드를 저장합니다. | DevOps | |
CloudFormation 템플릿을 생성합니다. |
| DevOps |
CloudFormation 스택을 생성하세요. |
| DevOps |
AWS 계정에 GuardDuty가 활성화되어 있는지 확인합니다. |
| 클라우드 관리자, AWS 관리자 |
추가 계정 또는 리전을 구성합니다. | 사용 사례에 필요한 경우 CloudFormation StackSet 기능을 사용하여이 솔루션을 여러 AWS 계정 및 로 확장합니다 AWS 리전. 자세한 내용은 CloudFormation 설명서의AWS CloudFormation StackSets 작업을 참조하세요. | 클라우드 관리자, AWS 관리자 |
관련 리소스
참조
자습서 및 동영상
Amazon GuardDuty 및 AWS Security Hub CSPM 를 사용하여 여러 계정 보호
(AWS re:Invent 2020) 작성 모범 사례 AWS CloudFormation
(AWS re:Invent 2019) 위협 탐지 AWS: Amazon GuardDuty 소개
(AWS re:Inforce 2019)
추가 정보
Python 코드
import boto3 import os import json from botocore.exceptions import ClientError import cfnresponse guardduty=boto3.client('guardduty') cfn=boto3.client('cloudformation') def lambda_handler(event, context): print('Event: ', event) if 'RequestType' in event: if event['RequestType'] in ["Create","Update"]: enabled=False try: response=guardduty.list_detectors() if "DetectorIds" in response and len(response["DetectorIds"])>0: enabled="AlreadyEnabled" elif "DetectorIds" in response and len(response["DetectorIds"])==0: cfn_response=cfn.create_stack( StackName='guardduty-cfn-stack', TemplateBody='{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Guard duty creation template", "Resources": { "IRWorkshopGuardDutyDetector": { "Type": "AWS::GuardDuty::Detector", "Properties": { "Enable": true } } } }' ) enabled="True" except Exception as e: print("Exception: ",e) responseData = {} responseData['status'] = enabled cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData, "CustomResourcePhysicalID" ) elif event['RequestType'] == "Delete": cfn_response=cfn.delete_stack( StackName='guardduty-cfn-stack') cfnresponse.send(event, context, cfnresponse.SUCCESS, {})