Update documentation with current infrastructure state

- Update all resource IDs to match current deployment
- CloudFront Distribution: EATJ1HDQU8V51
- WAF Web ACL: d61073b6-27b1-473e-aa9f-d2aa4a4c75a6
- WAF IP Set: a9e47946-c186-4b28-83a8-fe3aeb9c296b
- ACM Certificate: b011e60a-1ea1-4dd3-844f-e0851ece4784
- Route53 Zone: Z01934581JQAF2GS71GG
- Reflect enabled ACM certificate and Route53 DNS management
- Update all AWS CLI commands with correct resource IDs

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
kappa
2025-09-09 15:32:35 +09:00
parent 3b66e6d29f
commit d5440630f5
3 changed files with 460 additions and 340 deletions

202
README.md
View File

@@ -1,151 +1,87 @@
# AWS CloudFront with OpenTofu
# AWS CloudFront + CrowdSec WAF Integration
이 프로젝트는 OpenTofu를 사용하여 AWS CloudFront 배포와 CloudFormation 스택을 관리합니다.
🛡️ AWS CloudFront CDN with real-time CrowdSec threat protection via Lambda integration.
## 구조
## 🏗️ Architecture
- `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"
```
CrowdSec Container → API Gateway → Lambda → AWS WAF → CloudFront Distribution
```
### 2. 변수 설정
## 📋 Project Overview
- **CloudFront Distribution**: `EATJ1HDQU8V51`
- **Origin Server**: `origin.servidor.it.com` (HTTP-only)
- **WAF Protection**: Real-time IP blocking via CrowdSec
- **Custom Domains**: `servidor.it.com`, `www.servidor.it.com`
- **ACM Certificate**: `b011e60a-1ea1-4dd3-844f-e0851ece4784`
## 🚀 Quick Start
```bash
# 설정 파일 복사
cp terraform.tfvars.example terraform.tfvars
# 필요한 값들 수정
vim terraform.tfvars
```
### 3. 배포
```bash
# 초기화
# 1. Deploy infrastructure
tofu init
# 계획 확인
tofu plan
# 배포 실행
tofu apply
# 2. Configure CrowdSec
incus exec crowdsec -- cscli collections install crowdsecurity/nginx-proxy-manager
# 3. Verify WAF configuration
aws wafv2 get-ip-set --scope CLOUDFRONT --region us-east-1 \
--id a9e47946-c186-4b28-83a8-fe3aeb9c296b \
--name aws-cf-dev-blocked-ips
```
### 4. 확인
## 📊 Key Resources
배포 후 출력된 CloudFront URL을 통해 서비스에 접근할 수 있습니다:
- **CloudFront URL**: https://d2mhxhntq3ezzr.cloudfront.net
- **WAF Web ACL ID**: `d61073b6-27b1-473e-aa9f-d2aa4a4c75a6`
- **WAF IP Set ID**: `a9e47946-c186-4b28-83a8-fe3aeb9c296b`
- **Route53 Zone ID**: `Z01934581JQAF2GS71GG`
## 🛡️ Security Features
1. **Priority 1**: CrowdSec real-time IP blocking
2. **Priority 2**: Rate limiting (10K req/5min)
3. **Priority 3**: AWS Managed Common Rules
4. **Priority 4**: AWS Managed Bad Input Rules
## 📁 Project Structure
```
├── README.md # This file
├── CLAUDE.md # Development guide for Claude Code
├── DEPLOYMENT_GUIDE.md # Detailed deployment instructions
├── CROWDSEC-WAF-INTEGRATION.md # CrowdSec integration documentation
├── main.tf # CloudFront and core infrastructure
├── security.tf # WAF and security configurations
├── lambda.tf # CrowdSec Lambda integration
├── lambda-crowdsec-waf.py # Lambda function code
└── terraform.tfvars # Configuration variables
```
## 📚 Documentation
- **🚀 [Deployment Guide](DEPLOYMENT_GUIDE.md)** - Complete deployment instructions
- **🛡️ [CrowdSec Integration](CROWDSEC-WAF-INTEGRATION.md)** - Real-time security setup
- **🔧 [Development Guide](CLAUDE.md)** - Claude Code specific instructions
## ⚡ Common Commands
```bash
# CloudFront 배포 상태 확인
aws cloudfront get-distribution --id <distribution-id>
# Check WAF blocked IPs
aws wafv2 get-ip-set --scope CLOUDFRONT --region us-east-1 \
--id a9e47946-c186-4b28-83a8-fe3aeb9c296b \
--name aws-cf-dev-blocked-ips \
--query 'IPSet.Addresses'
# CloudFormation 스택 상태 확인
aws cloudformation describe-stacks --stack-name <stack-name>
# Monitor CrowdSec decisions
incus exec crowdsec -- cscli decisions list
# View Lambda logs
aws logs tail /aws/lambda/aws-cf-dev-crowdsec-waf-updater --follow
```
## 중요 설정
---
### 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 로그 분석 (활성화된 경우)
**Status**: ✅ Production Ready | **Last Updated**: 2025-09-09