AWS Route53を使用したDNSリソースレコードのAPIによる許可設定
- AWS Route53はAWS(Amazone Web Service)のDNSサービスである。
Route53はマネージドサービスで、管理インターフェース・API機能込みで、おおよそ1ゾーン百数十円/月で利用できる。
- クエリ数による従量課金?ほぼ無視して良いです。
- ここではRoute53そのものの使い方は取り扱わない。
- よってAPIを叩くにあたって設定すべき権限について解説する。
- 想定クライアントは「ACMEクライアント」として例示する。
目次
AWS側の設定
IAMポリシーの作成
route53-acme-dns-01
- LE認証局(Let's Encrypt)に対してSSL証明書要求プロトコル(ACME)のDNS-01メソッドを使用するためのRoute53側の設定(共通設定)である。
- 各ACMEクライアントは本設定に基づいて照会が許可される(各ゾーン中のレコードの照会および変更は別ポリシーにて定義)。
- 下記設定の内、「アクセス元IPアドレス帯」を書き換えて使用する。
- 指定したIPアドレス帯以外からのAPI呼び出しは無効になる。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "route53:ListHostedZones", "route53:ListHostedZonesByName" ], "Resource": "*", "Condition": { "ForAnyValue:IpAddress": { "aws:SourceIp": [ "アクセス元IPアドレス帯" ] } } }, { "Effect": "Allow", "Action": "route53:GetChange", "Resource": "arn:aws:route53:::change/*", "Condition": { "ForAnyValue:IpAddress": { "aws:SourceIp": [ "アクセス元IPアドレス帯" ] } } } ] }
route53-hosted-zone-ゾーン名
- LE認証局(Let's Encrypt)に対してSSL証明書要求プロトコル(ACME)のDNS-01メソッドを使用するためのRoute53側の設定(共通設定)である。
- 各ACMEクライアントは本設定に基づいて指定された「ゾーン名」に所属するレコードの更新が許可される。
- この「ポリシー名」は例えば ninth-nine.com の場合「route53-hosted-zone-ninth-nine.com」となる。
- 下記設定の内、「アクセス元IPアドレス帯」を書き換えて使用する。
- 指定したIPアドレス帯以外からのAPI呼び出しは無効になる。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "route53:ListResourceRecordSets", "route53:ChangeResourceRecordSets" ], "Resource": "arn:aws:route53:::hostedzone/ホステッドゾーンID", "Condition": { "ForAnyValue:IpAddress": { "aws:SourceIp": [ "アクセス元IPアドレス帯" ] } } } ] }
IAMグループの作成
route53-acme-dns-01
- 用途
- Let's Encrypt のSSL証明書自動更新のためのグループ。基本的なアクセス許可を提供する。
- 適用済ポリシー
- route53-acme-dns-01
IAMユーザーの作成(例)
ユーザー名 |
所属グループ名 |
追加適用ポリシー |
発行済みアクセスキー |
運用サーバー(例) |
route53-acme-client-wiki |
route53-acme-dns-01 |
route53-acme-hosted-zone-ninth-nine.com |
XXXXXXXXXXXXXXXXXXXX |
wiki.ninth-nine.com |
クライアント側の設定
インストール
- ports/devel/awscli
- ports/dns/cli53
クレデンシャルファイルの作成
- 発行したアクセスキーおよびシークレットアクセスキーをAPIクライアント側で使用するために「クレデンシャルファイル」を作成する。
- APIを実行するクライアント(Webサーバーやメールサーバーなど)の所定のユーザー(dehydrated の利用においては root)のホームディレクトリをベースに以下の作業を実施する。
mkdir -p -m 0700 ~root/.aws
- クレデンシャルファイル(~root/.aws/credentials)を以下のように作成する。この時、プロファイル名はIAMユーザー名と同じものとする。
[ユーザー名] aws_access_key_id = XXXXXXXXXXXXXXXXXXXX aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
- この時、作成されたクレデンシャルファイルのパーミッションを変更すること。
chmod 0600 ~root/.aws/credentials
- API設定に問題無いかチェックする。
aws --profile ユーザー名 configure list または env AWS_PROFILE=ユーザー名 aws configure list
- 当該APIか稼働しているか動作確認すること。
cli53 list --profile ユーザー名
よくある質問とその答え
Q.またまた~従量制なんだから高くなるんでないの?
A.ホスティングするゾーン(ドメイン)はYahoo、Googleクラスです!と言える者だけだが石を投げなさい。
料金表を見ながらの話になりますが、 標準クエリで100万クエリ/月を秒間(30日とする)で換算すると、0.39クエリ/秒になる。 まぁ個人サイトレベルなら余裕過ぎるレベル。
そこそこ目立つサイトで10クエリ/秒くらいだとすると(個人的見解です)、259万2千クエリ/月、それでも2USDも行かないくらい。
つまりワンコイン(500円)もあれば十分行ける数字ではある。
Q.Route53って言ってるけどIAMしか書いてないぢゃないっすか
A.大丈夫だ。問題無い。
Route53の使い方的エッセンシャルな部分については普通にWebコンソールを使ってもらえば問題無いです。 そして外部からアクセスするためのAPIについてはWebコンソール外に用意されており、 必要なパラメータとアクセスについては(一部設定や引数などがあるものの)、cli53により実施する。 あとはアクセス制御の設定で、これについてはIAMで制御することになる。