Skip to main content
AWS 멀티 계정 보안 운영 보고서 자동화 대시보드

AWS 보안 운영 보고서 자동화

active
aws security iam fastapi automation

개요

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

향후 개선점

  • 다중 리전 점검 범위 확대
  • 위험 항목 발생 시 알림 연동
  • 계정별 예외 정책 관리
  • 대시보드 필터와 추세 차트 개선