Files
runbooks/anvil-ses-final-setup.md
kappa 49fe96775a Add 5 more runbooks
- aws-ses-setup.md: AWS SES email configuration
- anvil-ses-final-setup.md: Anvil SES final setup
- n8n-setup-guide.md: n8n workflow automation
- gitea-setup.md: Gitea server installation
- cloudflare-vault-integration.md: Cloudflare + Vault integration

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 00:39:06 +09:00

195 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AWS SES 완벽 설정 완료 - anvil.it.com
## 🎉 설정 완료 상태
**Mail-Tester 점수: 10/10 (만점)** ✅
설정 완료일: 2025-09-06
도메인: anvil.it.com
리전: ap-northeast-2 (Seoul)
## 📧 SMTP 설정 정보
```yaml
SMTP_HOST: email-smtp.ap-northeast-2.amazonaws.com
SMTP_PORT: 587
SMTP_TLS: true
SMTP_USERNAME: [Vault: secret/aws/ses/smtp -> smtp_username]
SMTP_PASSWORD: [Vault: secret/aws/ses/smtp -> smtp_password]
SMTP_FROM: noreply@anvil.it.com
```
### Vault에서 인증 정보 조회
```bash
# 전체 설정 조회
vault kv get secret/aws/ses/smtp
# SMTP Password만 조회
vault kv get -field=smtp_password secret/aws/ses/smtp
```
## 🔐 DNS 레코드 설정
### 1. SPF 레코드 (TXT)
```
anvil.it.com TXT "v=spf1 include:_spf.mx.cloudflare.net include:amazonses.com ~all"
```
### 2. DKIM 레코드 (CNAME × 3)
```
dgcehnldehfmfgpvrrbc6drwasiibhnp._domainkey.anvil.it.com CNAME dgcehnldehfmfgpvrrbc6drwasiibhnp.dkim.amazonses.com
spopdscdt2sxngqzl5ir66k3ed6og7ut._domainkey.anvil.it.com CNAME spopdscdt2sxngqzl5ir66k3ed6og7ut.dkim.amazonses.com
55l5wnmktvacgyfpt6sovcgb2rqexrpy._domainkey.anvil.it.com CNAME 55l5wnmktvacgyfpt6sovcgb2rqexrpy.dkim.amazonses.com
```
### 3. DMARC 레코드 (TXT)
```
_dmarc.anvil.it.com TXT "v=DMARC1;p=quarantine;pct=25;rua=mailto:908761dcafa547a981e283a21768d69f@dmarc-reports.cloudflare.net,mailto:dmarc-reports@anvil.it.com;ruf=mailto:dmarc-failures@anvil.it.com"
```
### 4. MAIL FROM 도메인 설정
```
# MX 레코드
bounce.anvil.it.com MX 10 feedback-smtp.ap-northeast-2.amazonses.com
# SPF 레코드
bounce.anvil.it.com TXT "v=spf1 include:amazonses.com ~all"
```
### 5. 도메인 검증 (TXT)
```
_amazonses.anvil.it.com TXT "0cuw9v32N+aeFiNlTh2Poxglgzf3BlmFRjVOjeLEdy4="
```
## ✅ AWS SES 상태
### 도메인 검증
- **Status**: Success ✅
- **DKIM**: Success & Enabled ✅
- **MAIL FROM**: bounce.anvil.it.com (Success) ✅
### 발송 한도
- **일일 최대**: 50,000통
- **초당 최대**: 14통
- **현재 환경**: Production Ready
## 🎯 컴플라이언스 달성 상태
| 요구사항 | 상태 | 점수 |
|---------|------|------|
| SPF Authentication | ✅ Compliant | Pass |
| DKIM Authentication | ✅ Compliant | Pass |
| DMARC Authentication | ✅ Quarantine (25%) | Pass |
| From Header Alignment | ✅ Compliant | Pass |
| DNS Records | ✅ Compliant | Pass |
| Encryption | ✅ TLS Required | Pass |
| One-click Unsubscribe | ✅ RFC 8058 | Pass |
| Honor Unsubscribe | ✅ Compliant | Pass |
**최종 점수: 8/8 (완전 준수)** 🏆
## 📱 애플리케이션 통합 예시
### Node.js (nodemailer)
```javascript
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransporter({
host: 'email-smtp.ap-northeast-2.amazonaws.com',
port: 587,
secure: false,
auth: {
user: process.env.SMTP_USERNAME, // SMTP Username
pass: process.env.SMTP_PASSWORD // SMTP Password (변환된 값)
}
});
// RFC 8058 호환 메일 발송
const mailOptions = {
from: 'noreply@anvil.it.com',
to: 'user@example.com',
subject: 'Welcome!',
html: '<h1>Welcome!</h1>',
headers: {
'List-Unsubscribe': '<mailto:unsubscribe@anvil.it.com>, <https://anvil.it.com/unsubscribe>',
'List-Unsubscribe-Post': 'List-Unsubscribe=One-Click'
}
};
```
### Python (smtplib)
```python
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
msg = MIMEMultipart()
msg['From'] = 'noreply@anvil.it.com'
msg['To'] = 'user@example.com'
msg['Subject'] = 'Welcome!'
msg['List-Unsubscribe'] = '<mailto:unsubscribe@anvil.it.com>, <https://anvil.it.com/unsubscribe>'
msg['List-Unsubscribe-Post'] = 'List-Unsubscribe=One-Click'
server = smtplib.SMTP('email-smtp.ap-northeast-2.amazonaws.com', 587)
server.starttls()
server.login(smtp_username, smtp_password)
server.send_message(msg)
server.quit()
```
## 🚀 성과 요약
1. **완벽한 인증 체계**: SPF, DKIM, DMARC 모두 통과
2. **최고 수준 컴플라이언스**: RFC 8058 One-click Unsubscribe 구현
3. **Gmail 최적화**: Postmaster Tools 준비 완료
4. **확장 가능한 구조**: 일일 50K 발송 지원
5. **보안 강화**: 단계적 DMARC 정책 (quarantine 25%)
## 📊 모니터링 및 관리
### Gmail Postmaster Tools
- URL: https://postmaster.google.com
- 도메인 등록: anvil.it.com
- 데이터 확인: 1-2일 후부터
### DMARC 리포트
- **집계 리포트**: dmarc-reports@anvil.it.com
- **실패 리포트**: dmarc-failures@anvil.it.com
- **Cloudflare**: 자동 대시보드 제공
### AWS SES 모니터링
```bash
# 발송 통계
aws ses get-send-statistics --region ap-northeast-2
# 발송 한도 확인
aws ses get-send-quota --region ap-northeast-2
```
## 🔄 향후 개선 계획
### 1단계 (완료): 기본 설정
- ✅ 도메인 검증
- ✅ DKIM 활성화
- ✅ SPF 설정
- ✅ DMARC 모니터링
### 2단계 (완료): 컴플라이언스
- ✅ DMARC quarantine (25%)
- ✅ One-click Unsubscribe
- ✅ RFC 8058 준수
### 3단계 (2주 후): 정책 강화
- DMARC: p=quarantine;pct=100
- 평판 안정화 후 p=reject 고려
- Gmail Postmaster 데이터 분석
### 4단계 (1개월 후): 고도화
- 발송량 점진적 증가 (Warm-up)
- A/B 테스트 기반 최적화
- 고급 모니터링 구축
---
**🎯 결과: anvil.it.com 메일 시스템은 업계 최고 수준으로 설정되었습니다!**
Mail-Tester 10/10 점수는 모든 주요 메일 서비스에서 anvil.it.com을 신뢰할 수 있는 발신자로 인식한다는 의미입니다.