BETA

[Terraform]AWS・GCPのDNSにSPF(TXT)レコードを設定するtfファイル実装例

投稿日:2019-11-03
最終更新:2019-11-07

じぶん G Suite をひとり運用しているのですが、ちょっと思いつきでドメインエイリアス追加はじめたら
なんやかや気づいたし、意外に情報がなかったので試行錯誤して個人的にたのしかったついでに投稿。

refs

設定する tf ファイル例

for GCP Cloud DNS

0.11.14  

resource "google_dns_managed_zone" "mydomain" {  
  name     = "(任意のゾーン名)"  
  dns_name = "(ドメイン名)."     # 末尾の `.` は必要っぽい  
}  

resource "google_dns_record_set" "spf_TXT" {  
  managed_zone = "${google_dns_managed_zone.mydomain.name}"  
  name         = "${google_dns_managed_zone.mydomain.dns_name}"  
  type         = "TXT"  
  ttl          = 3600  
  rrdatas      = ["\"v=spf1 include:_spf.google.com ~all\""]  
}  

for AWS Route53

0.12.13  

resource "aws_route53_record" "spf_TXT" {  
  zone_id = var.zone_id  
  name    = var.zone_name  
  ttl     = "3600"  
  type    = "TXT"  
  records = ["v=spf1 include:_spf.google.com ~all"]  
}  

# ・・・(他にも変数あるんですが省略)  

variable "zone_id"   {}  
variable "zone_name" {}  

コメントなど

  • G Suite で ドメイン認証が完了してしまえば google-site-verification=XXXXX... の TXT レコードは削除してしまっても大丈夫そう
    • かわりにSPFのTXTレコードを投入したかたち。複数行のTXTレコードの書き方は把握しておきたい
  • G Suite のヘルプに書いてあった、名前 / ホスト / エイリアス - 「@」と入力するか、空白のままにします。
    • 空白のまま のほうが妥当そう。terraform apply で 以下のようになる
      • (google) google_dns_record_set.spf_txt: Error creating DNS RecordSet: googleapi: Error 400: Invalid value for 'entity.change.additions[0].name': '@', invalid
      • (aws) エラーが出ずに Route53 に適用されるが、空白にして apply し直したあともマネージドコンソールにレコードが残る。どうしようもなかったので手動削除した。
  • google は rrdatas でダブルクオートをエスケープしないとならない(スペースで区切られてしまう)のに対して、aws の records はエスケープ不要
  • TTLは一発目は 300 くらいにして apply して、5分後くらいに以下を確認したあとで 3600 で apply し直した
    • SPFチェッカーでグリーンな感じ
    • テストメールを送ってメールヘッダーorメッセージのソースを確認して SPFが PASS となる
  • apply 後の状況を tf ファイルで収集しておきたくて terraformer で以下のコマンドで回収を試みたのがだ、google のが回収できていない。v0.12 に upgrade が必要そう。。
    • (aws: 回収成功) terraformer import aws --regions=ap-northeast-1 --resources=route53
      • @ のレコードがあると、終わりはするのだが以下のようなエラーがコンソール出力される
         `ERROR: Read resource response is null for resource aws_route53_record.tfer--...._TXT_`    
          `ERROR: Unable to refresh resource tfer--...._TXT_`  
    • (google: 回収できてない) terraformer import google --resources=dns --projects=(PROJECT_NAME)
      • 以下のコンソール出力
          `google importing project (PROJECT_NAME) region global`    
          `google importing... dns`  
          `plugin error 1: Incompatible API version with plugin. Plugin version: 4, Client versions: [5]`  
          `Incompatible API version with plugin. Plugin version: 4, Client versions: [5]`  

SPFチェッカー

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@sogaohの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!