WGA(Wise Global Audit) 애플리케이션의 FastAPI 백엔드를 AWS Lambda로 마이그레이션한 프로젝트입니다. 이 프로젝트는 CloudTrail 로그 분석 및 IAM 정책 추천 기능을 서버리스 아키텍처로 구현합니다.
wga-lambda/
├── cloudformation-template.yaml # CloudFormation 템플릿
├── deploy.sh # 배포 스크립트
├── parameters-dev.json # 개발 환경 파라미터
├── dynamodb-migration.py # MongoDB에서 DynamoDB로 데이터 마이그레이션 스크립트
└── lambda_functions/
├── common/ # 공통 모듈
│ ├── config.py # 설정 정보
│ ├── db.py # DynamoDB 연동 모듈
│ └── utils.py # 유틸리티 함수
├── auth/ # 인증 관련 Lambda 함수
│ ├── lambda_function.py # Lambda 핸들러
│ ├── auth_service.py # 인증 서비스 모듈
│ └── requirements.txt # 필요한 패키지 목록
├── cloudtrail/ # CloudTrail 관련 Lambda 함수
│ ├── lambda_function.py # Lambda 핸들러
│ ├── cloudtrail_service.py # CloudTrail 서비스 모듈
│ └── requirements.txt # 필요한 패키지 목록
└── policy_recommendation/ # 정책 추천 Lambda 함수
├── lambda_function.py # Lambda 핸들러
├── recommendation_service.py # 정책 추천 서비스 모듈
└── requirements.txt # 필요한 패키지 목록
-
AWS CLI 설치
# macOS (homebrew 사용 시) brew install awscli # 또는 pip로 설치 pip install awscli # 또는 AWS 공식 설치 스크립트 사용 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install
-
AWS 자격 증명 구성
aws configure
필요한 정보:
- AWS Access Key ID
- AWS Secret Access Key
- Default region name (예: us-east-1)
- Default output format (json)
-
필요한 AWS 서비스 권한 배포에 사용하는 IAM 사용자/역할에 다음 권한이 필요합니다:
- CloudFormation 스택 생성 및 관리
- IAM 역할 및 정책 생성
- Lambda 함수 생성 및 업데이트
- API Gateway 생성 및 설정
- DynamoDB 테이블 생성
- S3 버킷 생성 및 객체 업로드
-
파라미터 파일 설정
parameters-dev.json파일에 필요한 설정을 입력합니다:[ { "ParameterKey": "EnvironmentName", "ParameterValue": "dev" }, { "ParameterKey": "CognitoDomain", "ParameterValue": "https://your-cognito-domain.auth.us-east-1.amazoncognito.com" }, { "ParameterKey": "UserPoolId", "ParameterValue": "us-east-1_XXXXXXXX" }, { "ParameterKey": "CognitoClientId", "ParameterValue": "your-client-id" }, { "ParameterKey": "CognitoIdentityPoolId", "ParameterValue": "us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, { "ParameterKey": "OutputBucketName", "ParameterValue": "wga-outputbucket" } ] 이후, S3버킷을 미리 생성해야 작동!! -
배포 스크립트 실행
# 배포 스크립트에 실행 권한 부여 chmod +x deploy.sh # 개발 환경으로 배포 (기본 리전: us-east-1) ./deploy.sh dev # 또는 리전을 지정하여 배포 ./deploy.sh dev us-east-1
-
배포 확인 배포가 완료되면 API 엔드포인트 URL이 출력됩니다:
배포 완료! API 엔드포인트: https://abcd1234.execute-api.us-east-1.amazonaws.com/dev
deploy.sh 스크립트를 실행하면 다음과 같은 과정이 진행됩니다:
- 배포 환경(dev)과 리전(us-east-1) 설정
- Lambda 배포 패키지를 저장할 S3 버킷 확인 및 생성
- 임시 작업 디렉토리 생성
- 각 Lambda 함수의 소스 코드와 공통 모듈을 임시 디렉토리로 복사
- 필요한 패키지 설치(requirements.txt)
- ZIP 배포 패키지 생성
- S3 버킷에 패키지 업로드
- CloudFormation 템플릿 S3 업로드
- 파라미터 파일을 사용하여 CloudFormation 스택 생성/업데이트
- 스택 생성 완료 대기
- DynamoDB 테이블
- Sessions-dev: 사용자 세션 정보 저장
- Users-dev: 사용자 정보 저장
- AnalysisResults-dev: 정책 분석 결과 저장
- Lambda 함수
- wga-auth-dev: 인증 관련 기능
- wga-cloudtrail-dev: CloudTrail 로그 조회 및 분석
- wga-policy-recommendation-dev: IAM 정책 추천 기능
- IAM 역할
- wga-lambda-execution-role-dev: Lambda 함수 실행 권한
- API Gateway
- wga-api-dev: REST API 및 엔드포인트
MongoDB에서 DynamoDB로 데이터를 마이그레이션하려면 다음 스크립트를 실행합니다:
# 필요한 패키지 설치
pip install boto3 pymongo
# MongoDB URI 설정
export MONGODB_URI="mongodb://username:password@host:port/dbname"
export MONGODB_DB_NAME="wga"
# 마이그레이션 실행
python dynamodb-migration.py --env dev --region us-east-1배포 후 사용 가능한 API 엔드포인트:
GET /auth- 현재 로그인 상태 확인GET /auth/logout- 로그아웃POST /auth/verify-token- 토큰 검증
GET /cloudtrail/logs- CloudTrail 로그 조회GET /cloudtrail/analyze-logs- CloudTrail 로그 분석
GET /policy-recommendation/process-multiple-analyses- 분석 결과 처리POST /policy-recommendation/apply-policy-changes- 정책 변경 적용
Lambda 함수를 로컬에서 테스트하려면 AWS SAM CLI를 사용할 수 있습니다:
# AWS SAM CLI 설치
pip install aws-sam-cli
# 로컬에서 Lambda 함수 실행
sam local invoke "WgaAuthFunction" -e events/auth-event.json- AWS CLI 명령 오류: AWS CLI가 설치되어 있는지 확인합니다.
- 권한 부족 오류: AWS 자격 증명에 필요한 권한이 있는지 확인합니다.
- CloudFormation 스택 롤백: AWS CloudFormation 콘솔에서 이벤트 탭을 확인하여 실패 원인을 파악합니다.
- Lambda 실행 오류: CloudWatch Logs에서 Lambda 함수 로그를 확인합니다.
- 타임아웃 오류: Lambda 함수의 제한 시간을 늘리거나 코드를 최적화합니다.
- 메모리 부족: Lambda 함수의 메모리 할당량을 늘립니다.
이 프로젝트는 MIT 라이선스로 배포됩니다.