Terraform을 통해 개별 도메인 이름을 설정하는 Gmail 및 Amazon SES

SES를 통해 자동으로 메일을 보내는 영역에 Gmail을 추가할 기회가 있기 때문에 비망록으로 보존합니다✍️
기념할 만한 젠.이것은 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를 확인할 수 있어서 괜찮은 것 같아요.
メールの内容

끝말


전자메일은 기본적으로 비즈니스의 중요도가 매우 높은 기술이지만, 나는 계속 접촉하고 싶다💌
이번에는 요구 사항을 충족하는 규격에 초점을 맞췄지만 메일 헤더를 비롯한 각종 기술 규격에 대한 기초적인 이해가 턱없이 부족해 책을 사서 공부했는데...

좋은 웹페이지 즐겨찾기