Terraform을 활용한 AWS 보안 아키텍처 및 Amazon Q Developer를 활용한 통합모니터링 실습
Key Result : AWS 보안 아키텍처를 표현하고 ISMS 자산 식별 및 AWS 자동화
ex) Open Source 및 Terraform 활용하여 자산식별 및 ISMS 대응에 따른 자동화 구축
실습 : Terraform을 활용한 AWS 보안 아키텍처를 표현하고 Amazon Q Developer 를 활용한 ISMS 자산 식별 및 자산 상태 통합모니터링 자동화 구축
[구상도]
[구상 요약]
draw.io를 통해서 기본적인 AWS 아키텍쳐를 구성했다. 이후 ISMS에 입각하여 AWS 아키텍쳐를 보완하고, 자산 식별이 될 수 있도록 람다를 활용한 통합 모니터링을 구축(이번 실습에서는 EC2 Status와 메타 정보등을 불러오는 형태)했다. 그리고 이를 최종적으로 IaC도구인 Terraform을 활용하여 자동화를 진행했다.
[구축 순서]
1. 네트워크: VPC, Subnet, IGW(인터넷게이트웨이)
2. VPC 엔드포인트 생성
- S3와 통신하기 위함
- 인터넷을 통해 통신할 필요가 없기 때문에 보안적 측면에서 좋음
3. EC2에 접근하기 위한 Session Manager 설정
- PEM키를 활용에 비해 키 보관 등에서 자유롭다.
4. Config 스냅샷 & 데이터 저장을 위한 S3 버킷 생성
5. Config 활성화
- Status
6. SNS 토픽생성
- EC2 상태 변경 알림을 위한 토픽을 생성
- ex) pending, running, stopping, stopped, shutting-down, terminated
7. EventBridge 활성화 및 Rule 생성
- EC2 상태 변경 관련 이벤트 패턴 생성
8. EventBridge Target(대상)인 SNS에 입력 변환기 활용 및 SNS 토픽 액세스 정책 수정
- SNS -> Amazon Q -> Slack 을 활용하기 위해 Amazon Q 형식을 따라야 하며, 필요한 정보를 제공해야 하므로 입력 변환기를 활용
- SNS 토픽에서 해당 EventBridge 트리거를 허용하겠다는 액세스 정책 추가
9. AWS Amazon Q Developer(ChatBot) 생성 및 연결할 Slack 채널 구성
- 보안 알림인 EC2 실행, 중지, 생성, 삭제 등의 SNS 구독
- 자산 리포트인 EC2 갯수, 용량 등의 SNS 구독
10. EC2 자산 식별 리포트용 리소스 추가
- 자신 리포트용 SNS 토픽 생성
- 전체 EC2 갯수, 사용 용량 등 식별
- Lambda 역할 및 정책 설정
- 역할 생성 후, 정책 설정
- CloudWatch Logs 쓰기 권한 부여
- lambda 함수 코드가 정상적으로 실행되고 있는지 디버깅 하기 위함
- {
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "arn:aws:logs:*:*:*"
}
- EC2 인스턴스 정보와 EBS 볼륨 정보를 가져올 수 있는 권한 부여
- {
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeVolumes"
],
"Effect": "Allow",
"Resource": "*"
}
- {
- Lambda가 최종적으로 메시지를 보낼 SNS 토픽에 대해서 Publish 권한 부여
- {
"Action": "sns:Publish",
"Effect": "Allow",
"Resource": "arn:aws:sns:ap-northeast-2:194722431119:asset-report-dev"
}
- {
- CloudWatch Logs 쓰기 권한 부여
- 역할 생성 후, 정책 설정
- Lambda 코드 생성과 변형
- 파이썬으로 EC2 정보와 EBS 볼륨 정보를 가져와 자원 식별하는 알고리즘 생성
- *특이사항 : ChatBot 용으로 JSON 형태로 구성해야 함
- 코드 번들로 변형
- asset_report.py -> asset_report.zip
- 파이썬으로 EC2 정보와 EBS 볼륨 정보를 가져와 자원 식별하는 알고리즘 생성
- Lambda 함수 생성
- function_name : asset-identification-report-dev
- role : 위에서 만든 역할 부여
- handler : asset_report.py 내부 함수 lambda_handler
- runtime : python3.9
- filname(lambda에 올릴 코드 번들) : asset_report.zip
- source_code_hash : Terraform이 zip 파일의 내용에 변경이 생겼는지 감지하기 위해 사용하는 무결성 검사 값
- Terraform은 이 해시 가 이전 상태와 달라졌을 때만 Lambda 코드를 업데이트 하도록 동작한다.
- Lambda 스케쥴링 설정
- 10분 마다 Lambda를 트리거 할 수 있도록 EventBridge 규칙 설정
[최종결과]
1. EC2 상태 변화에 따른 알림
2. EC2 인스턴스 자산 식별 리포트
[Terraform 코드]
[Lamda 코드]
[결론]
이번 실습을 통해 Terraform을 활용해서 ISMS에 입각한 아키텍쳐 구성과 자산 식별을 수월하게 통합 관리를 할 수 있음을 확인할 수 있었다.
비록 시행 착오와 여러 삽질은 있었지만, 다음 실습 때에는 더 나은 형태로 진행할 수 있을 것 같다.
파이팅!
[참고자료]
Amazon EventBridge AWS Config 를 사용한 모니터링 - AWS Config
이벤트 버스는 소스로부터 이벤트를 수신하고, 규칙을 사용하여 이벤트를 평가하고, 구성된 입력 변환을 적용하고, 적절한 대상(들)으로 라우팅합니다. 계정의 기본 이벤트 버스는에서 이벤트
docs.aws.amazon.com
https://docs.aws.amazon.com/ko_kr/eventbridge/latest/APIReference/API_InputTransformer.html
InputTransformer - Amazon EventBridge
InputTransformer Contains the parameters needed for you to provide custom input to a target based on one or more pieces of data extracted from the event. Contents InputTemplate Input template where you specify placeholders that will be filled with the valu
docs.aws.amazon.com
Amazon EC2 인스턴스의 상태 변경 이벤트 - Amazon Elastic Compute Cloud
Amazon EC2 인스턴스의 상태 변경 이벤트 Amazon EC2는 인스턴스 상태가 변경되면 EC2 Instance State-change Notification 이벤트를 Amazon EventBridge로 보냅니다. 다음은 이 이벤트의 예제 데이터입니다. 이 예제에
docs.aws.amazon.com