728x90

1. AWS SES란?

AWS SES는 마케팅 이메일, 거래 이메일 및 기타 대규모 이메일 발송을 쉽게 처리할 수 있는 서비스로 저렴한 비용으로 대규모 이메일 발송이 가능합니다. SMTP(Simple Mail Transfer Protocol)를 통해 직접 통합하거나 AWS SDK를 사용하여 애플리케이션에서 쉽게 사용할 수 있습니다. SES는 이메일 발송뿐 아니라 수신도 가능하며, 이메일을 인증하는 기능도 제공합니다.

주요 기능:

도메인 인증 : 발송 도메인에 대한 검증 및 설정을 지원하여 이메일의 신뢰성을 높입니다.
DKIM 서명 : DKIM(Domain Keys Identified Mail)을 통해 이메일이 변조되지 않았음을 수신 서버에 증명할 수 있습니다.
전송 상태 모니터링 : 이메일 발송 성공 여부, 반송 상태 등을 실시간으로 모니터링할 수 있습니다.
대량 이메일 발송 : AWS 인프라를 활용해 대규모 이메일 발송이 가능합니다.

2. Amazon SES 요금

Amazon SES는 사용한 만큼 비용 지불이 되며, 이메일 발신 및 수신, 데이터 사용량 및 추가 기능에 대한 요금은 별도로 부과됩니다.

서비스 유형 요금 추가 요금
아웃바운드 이메일 0.10 USD/이메일 1,000건 발신 첨부 파일의 데이터 기가바이트(GB)당 0.12 USD
인바운드 이메일 0.10 USD/이메일 1,000건 수신 이메일 청크 1,000개당 0.09 USD
자세한 내용은 요금페이지 참조

3. AWS SES 설정

AWS SES 는 두가지 자격 증명 방식을 제공합니다.

  • 도메인 : 확인된 도메인의 모든 하위 도메인이나 이메일 주소에서 이메일을 보낼 수 있습니다.
  • 이메일 주소 : 이메일 주소 자격 증명은 확인된 이메일 주소만 메일을 보내는 데 사용할 수 있습니다.

사전 요구 사항:

  1. AWS 계정 : AWS SES를 사용하려면 먼저 AWS 계정이 필요합니다.
  2. 도메인 정보 : 이메일을 발송할 도메인이 필요합니다. 이 도메인에 대해 DNS 설정을 추가해야 하기 때문에 도메인 관리 권한이 필요합니다.

4. AWS SES 도메인 인증 프로비저닝

도메인을 사용하여 이메일을 발송 하려면 도메인을 먼저 검증해야 합니다. SES는 DNS 레코드를 통해 도메인이 실제 소유자의 것인지 확인합니다.

4.1 Terraform Provider 설정

provider "aws" {
  region = "ap-northeast-2"
}

4.2 SES 도메인 인증 리소스 생성:

resource "aws_ses_domain_identity" "example" {
  domain = "example.com"
}

# Route53에 도메인 검증을 위한 TXT 레코드 설정
resource "aws_route53_record" "ses_verification_record" {
  zone_id = "Z3P5QSUBK4POTI"  # Route53 Hosted Zone ID
  name    = "_amazonses.example.com"
  type    = "TXT"
  ttl     = 300
  records = [aws_ses_domain_identity.example.verification_token]
}

4.3 DKIM(Domain Keys Identified Mail) 설정

DKIM(Domain Keys Identified Mail)은 발송된 이메일이 수신 도메인에서 변조되지 않았음을 증명하는 방식입니다. DKIM 서명을 추가하면 이메일의 신뢰도를 높일 수 있습니다. DKIM을 사용하려면 별도의 CNAME 레코드를 DNS에 추가해야 합니다.


# DKIM 설정을 위한 SES 이메일 인증 자격 증명 생성
resource "aws_ses_domain_dkim" "example_dkim" {
  domain = aws_ses_domain_identity.example.domain
}


# Route53에서 DKIM을 위한 CNAME 레코드 설정
resource "aws_route53_record" "ses_dkim_records" {
  count   = length(aws_ses_domain_dkim.example_dkim.dkim_tokens)
  zone_id = "Z3P5QSUBK4POTI"  # Route53 Hosted Zone ID
  name    = "${aws_ses_domain_dkim.example_dkim.dkim_tokens[count.index]}._domainkey.example.com"
  type    = "CNAME"
  ttl     = 300
  records = ["${aws_ses_domain_dkim.example_dkim.dkim_tokens[count.index]}.dkim.amazonses.com"]
}

DKIM 설정을 적용한 후에는 AWS SES 콘솔에서 DKIM 상태가 verified로 표시 되는지 확인합니다.

4.4 Mail From 도메인 설정

반송 메일이 있을 경우 설정된 Mail From 도메인으로 해당 메일을 처리합니다.

# Mail From 도메인 설정
resource "aws_ses_domain_mail_from" "example_mail_from" {
  domain           = aws_ses_domain_identity.example.domain
  mail_from_domain = "mail.example.com"
}

# Route53에서 Mail From 도메인을 위한 MX 레코드 설정
resource "aws_route53_record" "mail_from_mx" {
  zone_id = "Z3P5QSUBK4POTI"   # Route53 Hosted Zone ID
  name    = "mail.example.com"
  type    = "MX"
  ttl     = 300
  records = ["10 feedback-smtp.{region}.amazonses.com"]
}

# Route53에서 Mail From 도메인을 위한 SPF 레코드 설정
resource "aws_route53_record" "mail_from_spf" {
  zone_id = "Z3P5QSUBK4POTI"
  name    = "mail.example.com"
  type    = "TXT"
  ttl     = 300
  records = ["v=spf1 include:amazonses.com -all"]
}

사기 및 남용을 방지하기 위해 신규로 생성시에는 SandBox로 구성되어, 서비스 제한이 있습니다. 생성 후에는 프로덕션으로 전환하도록 요청하여합니다.

  • 확인된 이메일 주소 및 도메인 또는 Amazon SES 메일박스 시뮬레이터로만 메일을 보낼 수 있습니다.
  • 24시간 동안 최대 200개 발송 가능
  • 확인되지 않은 이메일 주소로 이메일 발송 불가

4. 이메일 발송 테스트

AWS 콘솔 및 CLI를 사용하여 이메일을 발송할 수 있습니다.

콘솔에서 테스트 방법 :

CLI로 테스트 하는 방법 :

aws ses send-email \
  --from "no-reply@example.com" \
  --destination "ToAddresses=user@recipient.com" \
  --message "Subject={Data=Email Send Test},Body={Text={Data=This is a test email}}"

결론

AWS SES를 프로비저닝하는 과정은 생각보다 복잡해 보일 수 있지만, 도메인 검증, DKIM 설정, Mail From 설정 등 단계별로 차근차근 설정하면 손쉽게 신뢰도 높은 대규모 이메일 발송 인프라를 구축할 수 있습니다. 추가적으로, 이메일 발송 후 결과를 지속적으로 모니터링하여 도메인 평판을 유지하는 것이 중요합니다.

Reference

728x90
반응형

+ Recent posts