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.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/"> | |
<ChangeBatch> | |
<Changes> | |
<Change> | |
<Action>DELETE</Action> | |
<ResourceRecordSet> | |
<Name>test.hitokoto.co.</Name> | |
<Type>A</Type> | |
<TTL>300</TTL> | |
<ResourceRecords> | |
<ResourceRecord> | |
<Value>153.126.157.62</Value> | |
</ResourceRecord> | |
</ResourceRecords> | |
</ResourceRecordSet> | |
</Change> | |
<Change> | |
<Action>CREATE</Action> | |
<ResourceRecordSet> | |
<Name>test.hitokoto.co.</Name> | |
<Type>A</Type> | |
<TTL>300</TTL> | |
<ResourceRecords> | |
<ResourceRecord> | |
<Value>10.0.0.1</Value> | |
</ResourceRecord> | |
</ResourceRecords> | |
</ResourceRecordSet> | |
</Change> | |
</Changes> | |
</ChangeBatch> | |
</ChangeResourceRecordSetsRequest> |
# ./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 になりました。
数秒待つと設定が反映されます。
無事に設定されました。