Terraform을 통해 개별 도메인 이름을 설정하는 Gmail 및 Amazon SES
기념할 만한 젠.이것은 dev의 첫 번째 보도이다🎂
생각
이번 대응을 하기 전에 이해를 못했어요.
SES에서 메일을 보낼 때 필요한 것은
ドメインを所有していることの検証
및 有効なメール送信元のひとつとしてAWSが用意しているサーバを指定(SPF)
도메인 메일을 받을 때 특별히 지정되지 않은 행위그래서
メール送信先としてドメインが指定された場合にGmailのサーバを利用(MX)
...이런 설정과有効なメール送信元にGmailのサーバを追加(SPF)
할 수 있다면 OK또한 SES/Gmail의 각 서버에서 보낸 메시지는
なりすまし/改竄されていないことを示すレコード(DKIM)
입니다.사칭/변조가 감지된 경우
挙動を受信者側に表明するレコード(DMARC)
를 설정하면 더욱 신뢰성 있게 메일을 받을 수 있습니다따라서 레코드를 Route 53에 등록할 수 있다면 다음과 같습니다.
송이경(신지현):어,여기까지쓰는건 자신 없어...🙄)
그리고 경품으로 드리는 내용입니다.
독자적인 도메인 이름의 Gmail은
http://mail.example.com/
형식으로 접근할 수 있기 때문이다이번에는 회사 내부 호스트 구역을 별도로 제작
internal.example.com
하여 거기에 등록할 것이다만든 물건
관련 부분만 발췌하여 tf 파일의 내용을 기록하였다
편의를 위해 몇 군데에 소양을 설정했지만 실제로 활용할 때 tfvars로 적절하게 정의했으면 좋겠다고 생각합니다.
또 유지자Gsuite 공급자도 공개됐다.
관리 측면에서 Gsuite를 사용한 것은 이번이 처음으로, 이번에는 AWS의 공급업체가 지정한 상품만을 코딩 범위로 삼았다
각 항목을 설정할 때 참고 링크를 최대한 붙여라🔗
호스트 로케일
# プライマリドメインのホストゾーン
resource "aws_route53_zone" "primary" {
name = "example.com"
}
# 社内向けサブドメインのホストゾーン(オマケ)
resource "aws_route53_zone" "internal" {
name = "internal.${aws_route53_zone.primary.name}"
}
SES 관련 설정
# SESドメイン
resource "aws_ses_domain_identity" "primary" {
domain = aws_route53_zone.primary.name
}
# SESのDKIM認証用レコードを作成
resource "aws_ses_domain_dkim" "ses" {
domain = aws_route53_zone.primary.name
}
호스트 영역에 등록할 레코드
# SES向けドメイン検証
resource "aws_route53_record" "primary_ses_txt" {
zone_id = aws_route53_zone.primary.zone_id
name = "_amazonses.${aws_route53_zone.primary.name}"
type = "TXT"
ttl = var.route53_record_ttl
records = [
# https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/dns-txt-records.html
aws_ses_domain_identity.primary.verification_token
]
}
# Gsuite向けドメイン所有権の証明とSPF
resource "aws_route53_record" "primary_txt" {
zone_id = aws_route53_zone.primary.zone_id
name = ""
type = "TXT"
ttl = var.route53_record_ttl
records = [
# https://support.google.com/a/answer/183895
# 手ポチにて作成
"google-site-verification=xxxxx",
# https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-email-authentication-spf.html
# https://support.google.com/a/answer/33786
"v=spf1 include:amazonses.com include:_spf.google.com ~all"
]
}
# メール送受信をGmail経由で実施するようMX指定
resource "aws_route53_record" "primary_mx" {
zone_id = aws_route53_zone.primary.zone_id
name = ""
type = "MX"
ttl = var.route53_record_ttl
records = [
# https://support.google.com/a/answer/6149697
"1 ASPMX.L.GOOGLE.COM.",
"5 ALT1.ASPMX.L.GOOGLE.COM.",
"5 ALT2.ASPMX.L.GOOGLE.COM.",
"10 ALT3.ASPMX.L.GOOGLE.COM.",
"10 ALT4.ASPMX.L.GOOGLE.COM."
]
}
# SES向けDKIM設定
resource "aws_route53_record" "primary_ses_dkim" {
for_each = { for el in aws_ses_domain_dkim.ses.dkim_tokens : el => el }
zone_id = aws_route53_zone.primary.zone_id
name = "${each.value}._domainkey.${aws_route53_zone.primary.name}"
type = "CNAME"
ttl = var.route53_record_ttl
records = [
# https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-email-authentication-dkim-easy-setup-domain.html
"${each.value}.dkim.amazonses.com"
]
}
# Gsuite向けDKIM設定
resource "aws_route53_record" "primary_gsuite_dkim" {
zone_id = aws_route53_zone.primary.zone_id
name = "google._domainkey.${aws_route53_zone.primary.name}"
type = "TXT"
ttl = var.route53_record_ttl
records = [
# https://support.google.com/a/answer/174124
# 手ポチにて作成
# レコード長の上限の関係で1024ビットで生成する必要あり
"v=DKIM1; k=rsa; p=xxxxxxxxxx"
]
}
# DMARC設定はSESとGmailで共通
resource "aws_route53_record" "primary_dmarc" {
zone_id = aws_route53_zone.primary.zone_id
name = "_dmarc.${aws_route53_zone.primary.name}"
type = "TXT"
ttl = var.route53_record_ttl
records = [
# https://sendgrid.kke.co.jp/blog/?p=3137
# ruaとrufに指定できるメールアドレスのドメインはホストゾーンと揃える必要あり
"v=DMARC1; p=quarantine; rua=mailto:xxxxx@${aws_route53_zone.primary.name}; ruf=mailto:xxxxx@${aws_route53_zone.primary.name}; rf=afrf; pct=100"
]
}
# サブドメインのレコードはサブドメインのホストゾーンに向ける
resource "aws_route53_record" "internal_ns" {
zone_id = aws_route53_zone.primary.zone_id
name = aws_route53_zone.internal.name
type = "NS"
ttl = var.route53_record_ttl
# https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/dns-routing-traffic-for-subdomains.html
records = aws_route53_zone.internal.name_servers
}
사내 호스트 영역에 등록된 컨텐츠
# Gsuiteを http://mail.internal.example.com/ の形式で利用できるように設定(オマケ)
# 設定有効化は手ポチにて実施
resource "aws_route53_record" "gsuite_alias" {
for_each = toset(["mail", "sites", "calendar", "drive", "groups"])
zone_id = aws_route53_zone.internal.zone_id
name = each.value
type = "CNAME"
ttl = var.route53_record_ttl
records = [
# https://support.google.com/a/answer/53340
"ghs.googlehosted.com."
]
}
확인
설치해 봤지만 어떻게 테스트하면 좋을까...🤢순간 에 어찌할 바를 모르다
시나닷컴 블로그에서 소개한 mail-tester.com 서비스는 SPF, DKIM, DMARC를 전면적으로 검사할 수 있을 것 같아서 사용했습니다.
이번에는 SES의 자동 답장 메일과 Gmail에서 메일을 보내는 용례가 있기 때문에 각자의 주소로 한번...
충분한 점수를 받아서 좋아요!🐈⛑
또한 주제와 본문이 눈에 잘 띄지 않으면 점수가 떨어지므로 개인정보를 숨긴 범위에 일정 정도의 내용을 입력하는 것이 좋다
그리고 처음에 설명한 SPF 기록이 잘 해결되었는지 궁금합니다.
G Suite Toolbox Check MX 이 도구를 사용하여 확인했습니다.
이번에 SPF 음반에 등록
amazonses.com
과_spf.google.com
는 각각 어느 IP 주소 범위입니까참조Gmail의 웹 클라이언트에서 메시지 헤더를 확인하는 방법, 송신 소스 IP 주소 확인
마침 Squist에 기재된
23.251.224.0/19
범위 내의 IP에서 보내온 거예요.Gmail에서 보낸 메일도 같은 방법으로 IP를 확인할 수 있어서 괜찮은 것 같아요.
끝말
전자메일은 기본적으로 비즈니스의 중요도가 매우 높은 기술이지만, 나는 계속 접촉하고 싶다💌
이번에는 요구 사항을 충족하는 규격에 초점을 맞췄지만 메일 헤더를 비롯한 각종 기술 규격에 대한 기초적인 이해가 턱없이 부족해 책을 사서 공부했는데...
Reference
이 문제에 관하여(Terraform을 통해 개별 도메인 이름을 설정하는 Gmail 및 Amazon SES), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yktakaha4/articles/gmail_and_ses_by_tf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)