# AWS CloudFront with OpenTofu 이 프로젝트는 OpenTofu를 사용하여 AWS CloudFront 배포와 CloudFormation 스택을 관리합니다. ## 구조 - `versions.tf` - Provider 및 Terraform 버전 설정 - `variables.tf` - 입력 변수 정의 - `main.tf` - CloudFront 배포 및 CloudFormation 스택 - `security.tf` - 보안 그룹 및 WAF 설정 - `outputs.tf` - 출력 변수 - `terraform.tfvars.example` - 변수 설정 예시 ## 주요 기능 ### CloudFront 배포 - `origin.servidor.it.com`을 원본 서버로 사용 - HTTPS 리디렉션 및 압축 지원 - 사용자 정의 도메인(CNAME) 지원 - 캐시 정책 및 원본 요청 정책 설정 - 커스텀 오류 페이지 설정 ### CloudFormation 스택 - VPC 및 네트워킹 리소스 생성 - 퍼블릭 서브넷 및 인터넷 게이트웨이 - 스택 출력을 통한 리소스 ID 공유 ### 보안 기능 - ALB 및 웹 서버용 보안 그룹 (선택사항) - AWS WAF v2 웹 ACL (선택사항) - 레이트 제한 및 관리 규칙 세트 ## 사용 방법 ### 1. 환경 설정 ```bash # OpenTofu 설치 확인 tofu version # AWS 자격 증명 설정 export AWS_ACCESS_KEY_ID="your-access-key" export AWS_SECRET_ACCESS_KEY="your-secret-key" export AWS_DEFAULT_REGION="us-east-1" ``` ### 2. 변수 설정 ```bash # 설정 파일 복사 cp terraform.tfvars.example terraform.tfvars # 필요한 값들 수정 vim terraform.tfvars ``` ### 3. 배포 ```bash # 초기화 tofu init # 계획 확인 tofu plan # 배포 실행 tofu apply ``` ### 4. 확인 배포 후 출력된 CloudFront URL을 통해 서비스에 접근할 수 있습니다: ```bash # CloudFront 배포 상태 확인 aws cloudfront get-distribution --id # CloudFormation 스택 상태 확인 aws cloudformation describe-stacks --stack-name ``` ## 중요 설정 ### SSL 인증서 이 설정은 **ACM(AWS Certificate Manager) 인증서**를 사용합니다: - `servidor.it.com`과 `*.servidor.it.com` 도메인 지원 - 자동으로 us-east-1 리전에 ACM 인증서 생성 - DNS 검증을 통한 자동 인증서 발급 - Route53을 통한 자동 DNS 레코드 관리 - CloudFront와 완전 통합된 HTTPS 설정 ### 캐시 정책 기본 제공되는 AWS 관리 정책: - `4135ea2d-6df8-44a3-9df3-4b5a84be39ad` - CachingDisabled - `725fe1d6-8a84-4f3e-8ab1-bc2d5bb10e12` - CachingOptimized - `df3c6b6c-4e41-4d9c-a8c7-6b8b2b8e6b8b` - CachingOptimizedForUncompressedObjects ### 보안 고려사항 프로덕션 환경에서는: - `ssh_allowed_cidrs`를 특정 IP로 제한 - WAF 활성화 (`enable_waf = true`) - 적절한 캐시 정책 선택 - CloudTrail 및 CloudWatch 로깅 활성화 ### 도메인 설정 **전제 조건**: - `servidor.it.com` 도메인의 Route53 호스팅 영역이 존재해야 함 - 도메인의 네임서버가 Route53으로 설정되어 있어야 함 **자동 설정**: - ACM 인증서 자동 생성 및 검증 - Route53 A 레코드 자동 생성 (`servidor.it.com` → CloudFront) - Route53 A 레코드 자동 생성 (`www.servidor.it.com` → CloudFront) ## 출력 정보 배포 완료 후 다음 정보들이 출력됩니다: - CloudFront 배포 ID 및 도메인 - CloudFormation 스택 정보 - 보안 그룹 ID (활성화된 경우) - WAF Web ACL ARN (활성화된 경우) - VPC 및 서브넷 정보 ## 정리 ```bash # 리소스 삭제 tofu destroy ``` ## 문제 해결 ### 일반적인 오류 1. **인증서 오류**: CloudFront용 인증서는 us-east-1에서만 생성 가능 2. **도메인 검증**: CNAME 설정 전에 도메인 소유권 확인 필요 3. **원본 서버**: `origin.servidor.it.com`이 HTTPS를 지원하는지 확인 ### 로그 확인 - CloudFront 액세스 로그 활성화 - CloudWatch 메트릭 모니터링 - WAF 로그 분석 (활성화된 경우)