조경시설물 사업부
조경시설물 사업부 시공 사례
개요
wizwww.com과 ecoindustry.co.kr에서 회원 가입 확인 메일과 비밀번호 찾기 메일을 AWS SES(서울 리전)로 보낸다. 2026-11-08에 설정했고, 같은 날 두 사이트에서 시험 발송에 성공했다.
구성 요약
| 항목 | 값 |
|---|---|
| AWS 리전 | 아시아 태평양(서울) ap-northeast-2 |
| SMTP 서버 | email-smtp.ap-northeast-2.amazonaws.com, 포트 587 (STARTTLS) |
| 보내는 주소 | noreply@wizwww.com (전역 설정), noreply@ecoindustry.co.kr (eco 사이트) |
| 인증한 도메인 | wizwww.com, ecoindustry.co.kr (Easy DKIM, Route 53 자동 등록) |
| 발송 전용 IAM 사용자 | ses-smtp-expresso (인라인 정책 ses-send-noreply) |
| SMTP 키 보관 | 사용자명은 설정 파일, 비밀번호는 Expresso 암호화 저장소(nc_config_secret) |
| SES 상태 | 샌드박스(시험 모드). 운영 전환 신청 필요 |
1. AWS SES 도메인 인증
- AWS 콘솔에서 리전을 서울로 바꾸고 SES를 연다.
- 구성 › 자격 증명 › 자격 증명 생성 › 도메인을 고르고 도메인을 입력한다(www 없이).
- 고급 DKIM 설정: Easy DKIM, RSA_2048_BIT, "Route53에 DNS 레코드 게시" 체크 상태 유지.
- wizwww.com, ecoindustry.co.kr 두 번 반복한다. 두 도메인 모두 같은 AWS 계정의 Route 53에서 DNS를 관리하므로 CNAME 3개가 자동으로 등록된다.
- 생성 직후 "작업 필요 … CNAME 레코드로 DKIM을 구성" 안내가 보이는 것은 정상이다. 몇 분에서 1시간 뒤 "확인됨"으로 바뀐다.
Route 53이 다른 계정에 있을 때는 도메인 상세 › 인증 탭의 CNAME 3줄을 Route 53에 직접 넣는다. 레코드 이름에는 도메인을 뺀 앞부분(예: xxxx._domainkey)만 넣는다.
2. 시험용 받는 주소 인증 (샌드박스 동안)
운영 전환 승인 전에는 인증한 주소로만 보낼 수 있다. 자격 증명 생성 › 이메일 주소로 suafafa@gmail.com을 인증했다.
3. SMTP 계정 만들기 (IAM에서 직접)
SES 화면의 SMTP 설정에서는 "기존 자격 증명 관리"만 보여서 IAM에서 직접 만들었다.
- IAM › 사용자 › 사용자 생성. 이름 ses-smtp-expresso, 콘솔 접근 권한 없음, 권한 없이 생성.
- 사용자 › 권한 › 권한 추가 › 인라인 정책 생성 › JSON에 아래 정책을 넣고 이름을 ses-send-noreply로 저장한다. 이 사용자는 두 noreply 주소로만 보낼 수 있다.
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "ses:SendRawEmail",
"Resource": "*",
"Condition": { "StringEquals": { "ses:FromAddress": [
"noreply@wizwww.com",
"noreply@ecoindustry.co.kr"
] } }
}]
}
- 보안 자격 증명 › 액세스 키 만들기 › "AWS 외부에서 실행되는 애플리케이션" › .csv 다운로드.
- 액세스 키(AKIA…)가 SMTP 사용자명이다.
- 비밀 액세스 키는 그대로 쓰면 로그인이 안 된다. AWS 문서의 변환 방식(서울 리전, 버전 0x04 HMAC-SHA256)으로 SMTP 비밀번호를 만든다.
4. Expresso 메일 설정
| 위치 | 설정 |
|---|---|
| 전역 메일 설정 시스템 설정 › 환경 설정 › 메일 발송 설정 /admin/config/configurations/email-configuration |
방식 ses, 사용 true, 발신자 noreply@wizwww.com, SES 호스트·포트, SES SMTP 사용자명·비밀번호 |
| eco 사이트 설정 사이트 & 페이지 › 사이트 관리 › eco › Configuration › Email |
Email Server Type AWS SES, 사용, Admin Email noreply@ecoindustry.co.kr, SES 호스트·포트·사용자명·비밀번호, Daily Send Limit 비움(300통) |
- 사이트 설정에 메일 방식을 지정하면 그 사이트 설정만 쓰고, 비워 두면 전역 설정을 쓴다. root(wizwww)는 전역 설정을 쓴다.
- SMTP 비밀번호 칸은 비밀 칸이라 AI 도구로 바꿀 수 없고, 관리자 화면(또는 /api/config-secrets/save)으로만 저장된다.
- 메일 양식 페이지(email.template.joinVerification, findPassword)를 지정하지 않으면 한국어 기본 메일 본문으로 보낸다.
5. Expresso 보호 장치 (2026-11-08 반영)
- 사이트별 하루 최대 발송 수: 사이트 설정 email.dailyLimit, 빈 값 300통, 0이면 제한 없음.
- 가입 확인·재발송·비밀번호 찾기: 같은 주소 1분에 1통·1시간에 5통, 같은 IP 1시간에 20건까지.
- 메일 서버 계정이 비어 있으면 가입은 확인 메일 없이 승인하고, 비밀번호 찾기는 "메일 발송 설정이 되어 있지 않아…"로 안내한다.
- 임시 비밀번호는 1시간 안에 한 번만 쓸 수 있다. 쓰지 않으면 기존 비밀번호가 그대로 유지된다.
- SMTP 비밀번호는 로그에 남기지 않는다.
6. 시험 결과 (2026-11-08)
- wizwww 비밀번호 찾기 → suafafa@gmail.com: SES 전달 성공 (발신 noreply@wizwww.com)
- eco 비밀번호 찾기 → suafafa@gmail.com: SES 전달 성공 (발신 noreply@ecoindustry.co.kr)
7. 남은 일
- 운영 전환 신청: SES › 계정 대시보드 › 프로덕션 액세스 요청. 메일 유형 트랜잭션, 웹 사이트 https://www.wizwww.com, 사용 사례에 두 사이트의 가입 확인·비밀번호 찾기 용도와 월 1,000통 미만, 발송 한도·반복 요청 차단을 적는다. 승인 전에는 일반 회원에게 메일이 가지 않는다.
- DMARC: Route 53 두 호스팅 영역에 이름 _dmarc, 유형 TXT, 값 "v=DMARC1; p=none;" 추가. 스팸 분류를 줄인다.
- 비용 한도: Budgets에서 SES 비용 예산 월 5달러, 20%(1달러)·100% 알림. 100%에 IAM 정책 적용 작업(Deny ses:SendRawEmail, ses:SendEmail)을 ses-smtp-expresso에 연결.
- (선택) CloudWatch 경보: SES Send 하루 합계 200 초과 시 메일 알림.
8. 운영 메모
- 키 교체: IAM 사용자에서 새 액세스 키를 만들고, 비밀 키를 SMTP 비밀번호로 변환해 두 설정 화면에 넣은 뒤 옛 키를 비활성화·삭제한다.
- 발송이 갑자기 멈추면: 예산 자동 차단이 실행됐는지(IAM 사용자에 차단 정책이 붙었는지), 사이트 하루 한도에 닿았는지(운영 로그 "오늘 메일 발송이 한도"), SES 계정 대시보드의 반송·신고 비율을 확인한다.
- 보내는 주소 추가: SES 도메인 인증 후 IAM 정책 ses:FromAddress 목록에 주소를 더한다.
- 요금: 1,000통당 약 0.1달러, 처음 12개월 월 3,000통 무료. 전용 IP·VDM은 쓰지 않는다.
- 키 원본 .csv는 안전한 곳에 보관하거나 지운다. 대화창·게시글에 키를 적지 않는다.
댓글 0