AWS 보안 운영 보고서 자동화
개요
AWS 멀티 계정 환경에서 IAM 사용자, 액세스 키, MFA 적용 여부, CloudTrail 변경 이력을 정기적으로 점검하고 보고서로 정리하는 내부 운영 도구입니다.
계정이 늘어나면 보안 점검은 금방 반복 작업이 됩니다. 매번 콘솔을 열어 IAM 사용자를 확인하고, 액세스 키와 MFA 상태를 정리한 뒤, CloudTrail 변경 이력을 따로 모으는 식으로는 누락이 생기기 쉽습니다. 그래서 점검 기준을 코드로 고정하고, 수집부터 Excel 보고서 생성, 대시보드 조회까지 한 흐름으로 묶었습니다.
| 기능 | 내용 |
|---|---|
| 월간 보고서 | 매월 1일 08:30 KST에 전월 기준 Excel 보고서 생성 |
| 일일 점검 | 매일 08:45 KST에 위험 사용자와 변경 이력 수집 |
| IAM 점검 | MFA 미적용, 장기 미접속, 패스워드 장기 미변경, 장기 사용 액세스 키 확인 |
| 변경 이력 | IAM, 정책, Role, Security Group, EC2 변경 이력 수집 |
| 권한 제어 | Keycloak OIDC 그룹 기반 관리자/조회 권한 분리 |
기술 스택
| 영역 | 기술 |
|---|---|
| 백엔드 | FastAPI, SQLAlchemy |
| 스케줄링 | APScheduler |
| AWS 연동 | boto3 |
| 데이터베이스 | SQLite |
| 인증 | Keycloak OIDC SSO |
| 보고서 | Excel report builder |
아키텍처
flowchart LR
Admin[Admin User]
User[Read-only User]
FastAPI[FastAPI Dashboard/API]
Keycloak[Keycloak OIDC]
Scheduler[APScheduler]
IAM[IAM Collector]
CloudTrail[CloudTrail Collector]
Report[Excel Report Builder]
DB[(SQLite)]
AWS[AWS Multi Accounts]
Admin --> FastAPI
User --> FastAPI
FastAPI --> Keycloak
FastAPI --> DB
Scheduler --> IAM
Scheduler --> CloudTrail
IAM --> AWS
CloudTrail --> AWS
IAM --> DB
CloudTrail --> DB
FastAPI --> Report
Report --> DB
주요 구현 포인트
IAM 보안 기준 자동 점검
운영에서 반복적으로 확인하던 기준을 수집 로직으로 고정했습니다. IAM 사용자 정보는 AWS Credential Report를 생성한 뒤 CSV를 파싱해서 가져옵니다. 이 방식으로 콘솔 접근 여부, 마지막 로그인, 패스워드 변경일, MFA 상태, 액세스 키 회전 시점을 한 번에 다룰 수 있습니다.
| 점검 항목 | 기준 |
|---|---|
| 장기 미접속 사용자 | 90일 초과 |
| MFA 미적용 사용자 | MFA 디바이스 미등록 |
| 패스워드 장기 미변경 | 90일 초과 |
| 장기 사용 액세스 키 | 150일 초과 |
| 변경 이력 | CloudTrail 기반 IAM/EC2/SecurityGroup 이벤트 |
일일 점검 결과는 계정별 통계와 위험 사용자 상세 목록으로 나눠 저장합니다. 대시보드에서는 전체 추이를 보고, 필요할 때 위험 사용자 상세까지 바로 확인할 수 있게 했습니다.
월간 보고서 생성
월간 보고서는 전월 데이터를 기준으로 생성합니다. 보고서 생성 시점과 점검 기준을 스케줄러에 등록해두고, 운영자가 별도 스크립트를 실행하지 않아도 매월 같은 형식의 Excel 파일이 만들어지도록 구성했습니다.
CloudTrail 변경 이력 수집
IAM 사용자나 정책 변경은 단순 스냅샷만으로는 원인을 파악하기 어렵습니다. CloudTrail 이벤트를 함께 수집해 사용자, 정책, Role, Security Group, EC2 관련 변경을 보고서와 대시보드에서 같이 확인할 수 있게 했습니다.
IAM 관련 이벤트는 글로벌 서비스 특성에 맞춰 us-east-1 기준으로 조회하고, Security Group과 EC2 이벤트는 운영 리전 기준으로 조회합니다. 운영 중 반복적으로 발생하는 이벤트나 자동화 계정은 제외 규칙으로 빼서 보고서 노이즈도 줄였습니다.
Keycloak 기반 권한 분리
대시보드는 Keycloak OIDC로 인증합니다. 운영자는 admin 그룹과 user 그룹으로 나누고, 관리자만 계정 등록/삭제, 수동 보고서 생성, 일일 점검 실행을 할 수 있도록 분리했습니다.
| 그룹 | 권한 |
|---|---|
admin | 계정 관리, 보고서 생성, 일일 점검 실행 |
user | 대시보드 및 보고서 조회 |
프로젝트 구조
app/
├── main.py
├── config.py
├── database.py
├── core/
│ ├── auth.py
│ └── logging.py
├── collectors/
│ ├── cloudtrail_collector.py
│ └── iam_collector.py
├── models/
├── report/
│ └── excel_builder.py
├── routers/
│ ├── accounts.py
│ └── reports.py
└── services/
├── account.py
├── daily.py
├── dashboard.py
├── report.py
└── scheduler.py
실행
uv sync
uv run fastapi dev app/main.py
Docker Compose로도 실행할 수 있습니다.
docker compose up -d
향후 개선점
- 다중 리전 점검 범위 확대
- 위험 항목 발생 시 알림 연동
- 계정별 예외 정책 관리
- 대시보드 필터와 추세 차트 개선