에코인더스트리 공사

친환경적 녹지관리 시공사례

개요

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 도메인 인증

  1. AWS 콘솔에서 리전을 서울로 바꾸고 SES를 연다.
  2. 구성 › 자격 증명 › 자격 증명 생성 › 도메인을 고르고 도메인을 입력한다(www 없이).
  3. 고급 DKIM 설정: Easy DKIM, RSA_2048_BIT, "Route53에 DNS 레코드 게시" 체크 상태 유지.
  4. wizwww.com, ecoindustry.co.kr 두 번 반복한다. 두 도메인 모두 같은 AWS 계정의 Route 53에서 DNS를 관리하므로 CNAME 3개가 자동으로 등록된다.
  5. 생성 직후 "작업 필요 … CNAME 레코드로 DKIM을 구성" 안내가 보이는 것은 정상이다. 몇 분에서 1시간 뒤 "확인됨"으로 바뀐다.

Route 53이 다른 계정에 있을 때는 도메인 상세 › 인증 탭의 CNAME 3줄을 Route 53에 직접 넣는다. 레코드 이름에는 도메인을 뺀 앞부분(예: xxxx._domainkey)만 넣는다.

2. 시험용 받는 주소 인증 (샌드박스 동안)

운영 전환 승인 전에는 인증한 주소로만 보낼 수 있다. 자격 증명 생성 › 이메일 주소로 suafafa@gmail.com을 인증했다.

3. SMTP 계정 만들기 (IAM에서 직접)

SES 화면의 SMTP 설정에서는 "기존 자격 증명 관리"만 보여서 IAM에서 직접 만들었다.

  1. IAM › 사용자 › 사용자 생성. 이름 ses-smtp-expresso, 콘솔 접근 권한 없음, 권한 없이 생성.
  2. 사용자 › 권한 › 권한 추가 › 인라인 정책 생성 › 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"
    ] } }
  }]
}
  1. 보안 자격 증명 › 액세스 키 만들기 › "AWS 외부에서 실행되는 애플리케이션" › .csv 다운로드.
  2. 액세스 키(AKIA…)가 SMTP 사용자명이다.
  3. 비밀 액세스 키는 그대로 쓰면 로그인이 안 된다. 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. 남은 일

  1. 운영 전환 신청: SES › 계정 대시보드 › 프로덕션 액세스 요청. 메일 유형 트랜잭션, 웹 사이트 https://www.wizwww.com, 사용 사례에 두 사이트의 가입 확인·비밀번호 찾기 용도와 월 1,000통 미만, 발송 한도·반복 요청 차단을 적는다. 승인 전에는 일반 회원에게 메일이 가지 않는다.
  2. DMARC: Route 53 두 호스팅 영역에 이름 _dmarc, 유형 TXT, 값 "v=DMARC1; p=none;" 추가. 스팸 분류를 줄인다.
  3. 비용 한도: Budgets에서 SES 비용 예산 월 5달러, 20%(1달러)·100% 알림. 100%에 IAM 정책 적용 작업(Deny ses:SendRawEmail, ses:SendEmail)을 ses-smtp-expresso에 연결.
  4. (선택) CloudWatch 경보: SES Send 하루 합계 200 초과 시 메일 알림.

8. 운영 메모

  • 키 교체: IAM 사용자에서 새 액세스 키를 만들고, 비밀 키를 SMTP 비밀번호로 변환해 두 설정 화면에 넣은 뒤 옛 키를 비활성화·삭제한다.
  • 발송이 갑자기 멈추면: 예산 자동 차단이 실행됐는지(IAM 사용자에 차단 정책이 붙었는지), 사이트 하루 한도에 닿았는지(운영 로그 "오늘 메일 발송이 한도"), SES 계정 대시보드의 반송·신고 비율을 확인한다.
  • 보내는 주소 추가: SES 도메인 인증 후 IAM 정책 ses:FromAddress 목록에 주소를 더한다.
  • 요금: 1,000통당 약 0.1달러, 처음 12개월 월 3,000통 무료. 전용 IP·VDM은 쓰지 않는다.
  • 키 원본 .csv는 안전한 곳에 보관하거나 지운다. 대화창·게시글에 키를 적지 않는다.