https://aws.amazon.com/developertools/Amazon-Route-53/9706686376855511
ダイナミックDNS(DDNS)を実装します。上記ページで公開されているスクリプト dnscurl.pl を使って、AWS Route53のDNSレコードを操作します。
Route53を操作するためのIAMポリシー・ユーザを作成して、DNSレコード更新サンプルを書いていきます。
環境は、CentOS 6です。
AWSコンソールから、Route53編集用のIAMポリシーをつくる
IAM Management Console Policies
https://console.aws.amazon.com/iam/home?region=ap-northeast-1#policies
IAMポリシー設定ページを開く -> Create Policy -> Create Your Own Policy
ポリシー名と、ポリシードキュメントを入力。
ここでは、IPアドレス 153.126.157.62 にRoute53の編集許可を与えます。
Policy Name: Route53-FullAccess-with-valid-IP-address
Policy Document:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "route53:*" ], "Resource": [ "*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "153.126.157.62/32" ] } } } ] }
IAMユーザをつくる
IAM Management Console Users
https://console.aws.amazon.com/iam/home?region=ap-northeast-1#users
IAMポリシー設定ページを開く -> Create New Users ->
Enter User Names: route53_user -> Create
Access Key ID: AAAAAAAAAAAAAAAAA Secret Access Key: BBBBBBBBBBBBBBBBBキーをメモしておく。
先ほど作ったポリシーをひもづける。
-> Attach Policy -> Route53-FullAccess-with-valid-IP-address
dnscurl.plの準備
必須ライブラリをインストール
# yum -y install perl-Digest-HMAC*.aws-secretsファイルを準備
# emacs .aws-secrets %awsSecretAccessKeys = ( "my-aws-account" => { id => "AAAAAAAAAAAAAAAAA", key => "BBBBBBBBBBBBBBBBB", }, ); # chmod 600 .aws-secretsdnscurl.plをダウンロード
# wget http://awsmedia.s3.amazonaws.com/catalog/attachments/dnscurl.pl # chmod +x dnscurl.pl # ./dnscurl.pl --debug
dnscurl.pl接続確認
# ./dnscurl.pl --keyname my-aws-account -- -H "Content-Type: text/xml; charset=UTF-8" https://route53.amazonaws.com/2010-10-01/hostedzone <?xml version="1.0"?> <ListHostedZonesResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/"><HostedZones><HostedZone><Id>/hostedzone/HHHHHHHH</Id><Name>hitokoto.co.</Name><CallerReference>B56A5CA2-7F5D-5183-B014-94C24DE1720B</CallerReference><Config/></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesResponse>-> Hosted Zone ID:HHHHHHHH をメモしておく。
ドメインからIPアドレスをひいてみる。
hostedzone/ 以下に Hosted Zone ID を指定。
name= に test.hitokoto.co. を指定。
./dnscurl.pl --keyname my-aws-account -- -H "Content-Type: text/xml; charset=UTF-8" "https://route53.amazonaws.com/2010-10-01/hostedzone/HHHHHHHH/rrset?name=test.hitokoto.co.&maxitems=1" <?xml version="1.0"?> <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/"><ResourceRecordSets><ResourceRecordSet><Name>test.hitokoto.co.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>153.126.157.62</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>1</MaxItems></ListResourceRecordSetsResponse>指定したドメインのIPアドレスが返ってきました。
ドメインのIPアドレスを変更
test.hitokoto.co.のIPアドレスを変更します。153.126.157.62 -> 10.0.0.1
XMLファイルを用意。
$ emacs renew_ip_address_test.xmlIPアドレス変更を実行
# ./dnscurl.pl --keyname my-aws-account -- -H "Content-Type: text/xml; charset=UTF-8" -X POST --upload-file ./renew_ip_address_test.xml https://route53.amazonaws.com/2013-04-01/hostedzone/HHHHHHHH/rrset <?xml version="1.0"?> <ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/HHHHHHHH</Id><Status>PENDING</Status><SubmittedAt>2016-08-25T06:43:11.590Z</SubmittedAt></ChangeInfo></ChangeResourceRecordSetsResponse>ステータス PENDING になりました。
数秒待つと設定が反映されます。
無事に設定されました。