AWS 기술 블로그
빗썸의 AWS Systems Manager를 활용한 전사 EC2 보안 진단 자동화 구축 사례 1부: 이벤트 기반의 EC2 권한 관리 자동화
빗썸은 2014년 서비스 개시 이후, 전 세계 거래량 1위를 기록하며 신뢰받는 가상자산 거래소로 성장했습니다. 과거에는 가상자산 거래 플랫폼 구축, 운영, 블록체인 기술 분야에서 세계 최고 수준의 경쟁력과 노하우를 쌓았다면, 앞으로는 글로벌 디지털 금융 플랫폼의 미래를 선도하고자 합니다. 또한, 빗썸 보안실에서는 최첨단 보안 시스템을 바탕으로 사용자 자산 보호와 거래 안전성을 최우선으로 보장하고 있습니다.
빗썸과 같이 EC2 인스턴스 기반의 워크로드를 운영하고 있는 환경에서 EC2 인스턴스의 취약점 점검은 매우 중요한 과제입니다. 클라우드의 장점인 유연하게 확장되는 EC2 인스턴스를 안전하게 사용하기 위해 취약점 점검을 수동이 아닌 자동으로 진행할 필요성이 있었습니다. 이에 빗썸에서는 내부 보안 규정을 준수하기 위하여 AWS Systems Manager Run Command를 이용하여 자동화된 보안 점검 시스템을 구축하게 되었습니다. 앞으로 두 편의 블로그를 통해서 빗썸이 어떻게 EC2 인스턴스의 자동화된 보안 취약점 점검 시스템을 구축하게 되었는지 자세하게 알아보겠습니다.
개념 아키텍처와 흐름도
본 아키텍처는 아래와 같은 기준을 만족하도록 구성하였습니다.
- 멤버 계정 대상으로 점검 실행 및 결과 수집을 하는 계정은 특정 계정에서 모두 수행되어야 한다.
- 전체 인스턴스 대상 또는 단일 인스턴스 대상으로 취약점 점검이 가능해야 한다.
- 인프라에 대한 구성 변경 없이 취약점 점검을 수행할 수 있어야 한다.
- 보안 컴플라이언스의 요구사항이 변경될 경우, 스크립트를 유연하게 수정할 수 있어야 한다.
AWS Control Tower 서비스를 활용해 다수의 멤버 계정을 관리하고 있는 환경에서, 각 계정 내 존재하는 EC2 인스턴스에 취약점 점검을 실행하기 위한 아키텍처 다이어그램 입니다.
중앙 계정의 Lambda 함수에서 각 계정마다 존재하는 IAM 역할로 스위칭하며 AWS Systems Manager의 Run Command 기능을 수행하며 인스턴스의 보안 취약점 점검을 진행했습니다.
보안 취약점 점검 작업은 중앙 계정의 S3 버킷에 있는 점검 스크립트를 사용하도록 하였고, 점검 결과 또한 하나의 S3에 통합하여 수집되도록 구성하였습니다. 통합된 분석 결과도 중앙 계정에서 분석할 수 있는 체계를 만들었습니다.
이번 첫 번째 블로그에서는 이러한 구조의 기반이 되는 Systems Manager를 통해 관리되는 EC2 인스턴스를 설정하는 내용에 대해 설명하겠습니다.
1. AWS의 보안 모범 사례에 따른 EC2 ↔︎ Systems Manager 설정 과정
빗썸은 EC2 인스턴스가 프라이빗 서브넷에 배치되어 있고, 보안그룹을 통해 아웃바운드 규칙을 세부적으로 관리하여 운영하고 있습니다. 이 환경에서 AWS Systems Manager (SSM) 서비스 사용을 위해 각 서브넷에 VPC 엔드포인트를 생성했습니다. 이에 EC2 는 PrivateLink를 통해 SSM 서비스에 접근할 수 있게 되었으며, SSM 에이전트를 통해 정상적으로 안전하게 트래픽을 주고받을 수 있는 환경이 구성되었습니다.
- EC2가 생성된 각 서브넷 별로 Systems Manager용 VPC 엔드포인트를 사용하여 EC2 인스턴스의 보안 개선 문서에 따라 VPC 엔드포인트를 생성합니다.
- EC2에서 VPC 엔드포인트 와의 통신을 위해 보안 그룹 아웃바운드 규칙(443 포트 / 인터페이스 엔드포인트의 사설 IP)을 추가합니다.
- EC2에서 SSM 서비스에 대한 접근을 위해 연결되어있는 역할에
AmazonSSMManagedInstanceCore
Amazon 관리형 IAM 정책을 추가합니다.
2. SecurityHub 조사 결과를 통한 Systems Manager 연동 누락된 인스턴스 가시화
AWS Security Hub를 통해 계정별 모든 EC2 인스턴스 대상으로 SSM 연결에 대한 규정준수 여부를 확인하고, 중앙 계정에 결과를 집계하여 사내 모든 인스턴스에 대한 SSM 연동 상태를 가시화했습니다.
자체 제작된 AMI를 통해 구동되는 인스턴스는 기본적으로 SSM 에이전트가 설치되어 있지 않았습니다. 이는 자체 제작 AMI 환경에 대한 시스템 안정성을 확보하기 위해 사전에 설치하지 않고 충분한 검토 이후 설치할 계획으로, 먼저 Security Hub의 컨트롤을 통해 에이전트 설치가 누락된 인스턴스를 확인 할 수 있도록 했습니다.
이후 확인된 인스턴스에는 SSM 에이전트를 수동으로 설치하여 연동하여 Systems Manager와 연동할 수 있었습니다.
- Security Hub 관리 계정(Audit 계정)에서 관리 중인 컨트롤 중 SSM.1 컨트롤로 SSM 에이전트와 SSM 서비스와 통신이 이루어지지 않는 EC2를 탐지합니다.
- 각 계정별로 조사된 결과가 관리 계정으로 집계되며, 관련 로그를 SIEM으로 전달하여 분석 및 대시보드화 하여 관리합니다.
3. AWS Control Tower 자원을 활용한 이벤트 기반의 EC2 권한 관리 자동화
SSM을 활용해 EC2 인스턴스를 컨트롤하려면 EC2 인스턴스에 연결된 IAM 역할에 적절한 IAM 정책이 부여되어야 합니다.
관리 계정에서 SSM을 사용하면 QuickSetup을 사용한 Amazon EC2 호스트 관리 설정 기능을 통해 인스턴스에 연결된 기존 인스턴스 프로파일에 SSM 자동화가 동작되어 필요한 IAM 정책을 자동으로 추가할 수 있습니다.
다만 SSM 자동화 기능은 프리 티어로 제공되는 단계 수의 제한이 존재합니다. 자동 확장되는 인스턴스의 갯수가 많고, 자동화가 자주 트리거되는 환경에서는 비용이 커질 수 있어 자체적으로 IAM 정책 부여를 자동화하는 방안을 선택했습니다. 자동화와 같은 스케줄 방식이 아닌 Amazon EventBridge의 이벤트 기반으로 모든 인스턴스에 SSM 관련 IAM 역할 및 정책을 할당해줄 수 있는 효율적인 아키텍처를 구성하였습니다.
이 아키텍처를 다중 계정 환경에서 중앙 집중적으로 구현하기 위하여 AWS Control Tower와 함께 배포되는 자원들을 사용하기로 했습니다.
- 각 계정마다
aws-controltower-SecurityNotifications
이름을 가지는 SNS 주제와aws-controltower-NotificationForwarder
Lambda 함수가 존재합니다. - 해당 Lambda함수는 SNS 주제를 구독하고 있으며, 메세지 인입 시 Audit계정의
aws-controltower-AggregateSecurityNotification
SNS 주제로 포워딩해주는 역할을 합니다. - 위와 같은 흐름에 따라 Audit 계정의 SNS 주제로 멤버 계정의 모든 이벤트가 모이게 됩니다.
각 멤버 계정 내 EC2 인스턴스가 실행되고 인스턴스 프로파일에 변경이 발생하는 이벤트를 캡쳐하도록 AWS EventBridge 규칙을 생성하여 Control Tower 자원으로 이벤트를 전달하도록 구성합니다.
- EC2 상태가 Running인 이벤트를 캡쳐하는 규칙
- EC2 인스턴스 프로필에 대한 작업 이벤트를 캡쳐하는 규칙
-
여러 멤버 계정에 EventBridge 규칙을 생성할 수 있도록 테라폼 모듈을 작성하였고 모든 계정 내 배치되어 있는 IAM 역할을 사용하여 리소스를 프로비저닝할 수 있도록 테라폼 aws provider를 작성하였습니다. 이를 통해 각 계정에 동일한 리소스를 생성했습니다.
이렇게 캡쳐한 이벤트는 앞 서 설명한 흐름에 따라 중앙 Audit 계정의 aws-controltower-AggregateSecurityNotification
SNS 주제로 모이고, 이 SNS 주제를 구독하여 모인 이벤트를 처리하는 SSM-Role-Controller
Lambda 함수를 통해 아래와 같이 처리됩니다.
결과적으로 실시간으로 발생하는 이벤트를 캡쳐하고, 이를 트리거로 Lambda 함수에서 IAM 역할과 정책을 EC2 인스턴스에 연결시키면서, 운영중인 모든 인스턴스에 SSM 관련 권한이 빠짐없이 연결되는 환경을 구성했습니다.
다음은 EC2에 새로운 인스턴스 프로필이 연결되는 이벤트가 확인되었을 때, SSM 동작에 필요한 정책이 부여되어 있는지 검증하고, 누락된 경우 할당해주는 예시 코드입니다.
이 코드에서는 EventBridge를 통해 캡쳐한 이벤트의 AccountID 필드 정보를 확인하여 해당 계정에 배치한 알려진 IAM 역할의 권한을 얻어 정책 연결 작업을 수행합니다.
결과적으로 모든 멤버 계정의 범위에서 EC2에 인스턴스 프로필이 할당된 이벤트를 중앙 Lambda 함수에서 확인할 수 있게 되었으며, 해당 이벤트를 통해 SSM 동작에 필요한 정책이 누락된 케이스를 확인하고 필요한 정책들을 부여하는 흐름에 대한 자동화가 이루어졌습니다.
결론
빗썸 클라우드보안팀에서 AWS 이벤트 기반으로 모든 인스턴스 내 SSM 관련 IAM 역할과 정책을 할당해줄 수 있는 아키텍처에 대해 설명하였습니다. 이와 같은 아키텍처를 통해 많은 수의 인스턴스를 운영하는 환경에서 빠짐없이 정책을 배치할 수 있었고, 모든 과정을 자동화할 수 있었습니다.
이어서 2부에서는 SSM 연동이 완료된 다수의 계정에 존재하는 EC2 대상으로 중앙 환경에서 RunCommand를 통해 보안진단을 자동화한 사례를 소개하겠습니다.