Terraform을 활용한 AWS 인프라 구축 자동화 프로젝트

틈메이러·2024년 11월 29일

포트폴리오

목록 보기
6/11
post-thumbnail

🍅주제

3-Tier 아키텍처와 AWS 보안 서비스를 활용한 안전하고 확장 가능한 클라우드 환경 구축
Git Hub 링크

1. 개발환경

개발 언어: HCL
프레임워크: AWS Provider
개발환경: vim, Cursor, Terraform CLI
기타: Git Hub, Docker, Terraform, AWS


2. 개발 배경

클라우드 환경에서 수동적인 인프라 설정은 비효율적이며 오류 발생 가능성이 높습니다. 이를 해결하기 위해 Infrastructure as Code(IaC) 접근 방식을 도입하여 테라폼을 활용한 AWS 인프라 자동화를 구현했습니다.
이 프로젝트는 네트워크, 컴퓨팅, 데이터베이스 리소스를 효율적으로 배포하고 보안유지보수를 용이하게 하기 위해 설계되었습니다.


3. 인프라 구조


3-Tier 아키텍처로 구성
Frontend (Presentation Tier):
CloudFront를 통해 프론트엔드 콘텐츠(CSS, JavaScript, 이미지 등) 배포
HTTPS를 적용하여 안전한 데이터 전송

Backend (Application Tier):
EC2 인스턴스에서 백엔드 애플리케이션 실행 (예: Nginx, PHP, Node.js)
Private Subnet에 배치하여 외부 접근 차단
Security Group을 통해 백엔드 서버에 대한 외부 접근 제한
ALB(Application Load Balancer)를 사용해 부하 분산 및 가용성 향상

Database (Data Tier):
Amazon RDS를 사용해 데이터베이스(MySQL) 관리
Private Subnet에 배치하여 외부 접근 차단
백엔드 서버와 RDS 간 통신은 보안 그룹을 통해 관리


4. 기능

  1. CloudWatch를 활용한 로그 관리
    CloudFront 접근 및 실시간 로그를 CloudWatch로 통합하여 트래픽 모니터링과 캐시 히트/미스 비율 분석
    Lambda@Edge 실행 결과와 오류를 CloudWatch Logs로 기록하여 디버깅 및 성능 최적화
    WAF 로그를 CloudWatch로 연동하여 악성 요청 탐지 및 규칙 최적화
  1. CloudFront를 통한 보안 강화
    AWS WAF(Web Application Firewall)를 CloudFront에 연동하여 SQL Injection, XSS와 같은 웹 공격 차단.
    HTTPS와 TLS 적용으로 데이터 전송 보안 강화
    Geo-Restriction(지역 제한)을 통해 특정 국가에서의 접근 차단
    DDoS 완화를 위한 AWS Shield Standard와 CloudFront의 분산 네트워크 활용
  1. GuardDuty를 통한 추가 보안 강화
    Amazon GuardDuty:
    CloudFront 및 AWS 계정의 잠재적 위협 탐지.
    이상 트래픽이나 의심스러운 API 호출 탐지.
    악성 활동 탐지(예: 의심스러운 IP에서의 접근, 데이터 유출 시도).
  1. AWS Security Hub 를 통한 추가 보안 강화:
    GuardDuty, WAF, CloudTrail 로그를 통합 분석.
    보안 규정 준수 평가: CIS Benchmarks와 AWS Best Practices에 기반한 평가.
    여러 AWS 보안 서비스 결과를 중앙에서 관리하여 취약점 통합 관리.


🍅문제점 및 해결방법

1. 변수 설정 누락

문제: Terraform이 필요한 입력 변수를 찾을 수 없다는 오류 발생

원인: 변수 파일(.tfvars)을 생성하지 않았거나, 변수 값을 명시적으로 전달하지 않음

해결 방법: terraform.tfvars 파일 생성 및 필요한 변수 값을 정의
명령어 실행 시 -var-file 옵션으로 파일을 명시적으로 전달


2. 리소스 이름 충돌

문제: 동일한 이름의 리소스를 중복 생성하려고 시도할 때 오류 발생

원인: 리소스 이름을 고유하게 설정하지 않음

해결 방법: 이름에 동적 값을 추가하여 고유성을 확보


3. 프로바이더 설정 문제

문제: AWS 프로바이더 설정이 제대로 이루어지지 않아 인증 실패

원인: AWS CLI가 설정되지 않았거나, Terraform 프로바이더 블록에서 필요한 정보가 누락

해결 방법: AWS CLI 설정 확인(aws configure)
프로바이더 블록에 명확히 정의


4. Syntax 오류

문제: Terraform 코드가 실행되지 않고 문법 오류 발생

원인: 괄호 누락, 콜론(:) 사용 등 HCL 문법과 맞지 않는 구문 사용

해결 방법: erraform validate 명령어로 문법 검사
에디터에서 Terraform 플러그인 사용


5. 도메인 및 HTTPS

HTTPS 연결 문제

문제: HTTPS 설정 후 사이트 접속 시 "인증서가 유효하지 않음" 또는 "SSL/TLS 연결 실패" 오류 발생

원인: ACM(AWS Certificate Manager)에서 발급된 인증서를 ALB 또는 CloudFront에 연결하지 않음
인증서 발급 시 도메인 소유권 확인 절차(DNS 검증)가 누락됨
HTTPS 설정 후 HTTP를 HTTPS로 리다이렉트하지 않음

해결 방법: ACM을 사용해 인증서를 발급하고, ALB/CloudFront에 연결
ACM에서 DNS 검증을 사용하여 도메인 소유권 인증
CloudFront Distribution에서 Custom SSL Certificate 선택

Target Group (ALB/NLB 대상 그룹)

문제: 도메인이 연결된 ALBTarget Group에 대상(EC2 등)을 제대로 등록하지 않아 트래픽 전달 실패

해결 방법:
ALB 설정에서 Target Group에 EC2 인스턴스를 추가

Target Group 상태 확인: 상태가 Healthy가 아닌 경우, 인스턴스나 포트 설정을 확인


6. 웹 페이지 업로드의 문제

문제: 웹 코드를 EC2 인스턴스에 배포하는 과정에서 생긴 문제

해결 방법: VPC 프로젝트
해당 부분에 대해서는 VPC 구조를 그리는 프로젝트의 글에 설명해두었다

profile
나는야 멋쟁이 토마토

0개의 댓글