= AWS Route53を使用したDNSリソースレコードのAPIによる許可設定 = * AWS Route53はAWS(Amazone Web Service)のDNSサービスである。 * Route53はマネージドサービスで、管理インターフェース・API機能込みで、[[https://aws.amazon.com/jp/route53/pricing/|おおよそ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ユーザーの作成(例) == ||<#FFFF00> ユーザー名 ||<#FFFF00> 所属グループ名 ||<#FFFF00> 追加適用ポリシー ||<#FFFF00> 発行済みアクセスキー ||<#FFFF00> 運用サーバー(例) || || 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クラスです!と言える者だけだが石を投げなさい。 [[https://aws.amazon.com/jp/route53/pricing/|料金表]]を見ながらの話になりますが、 標準クエリで100万クエリ/月を秒間(30日とする)で換算すると、0.39クエリ/秒になる。 まぁ個人サイトレベルなら余裕過ぎるレベル。 そこそこ目立つサイトで10クエリ/秒くらいだとすると(個人的見解です)、259万2千クエリ/月、それでも2USDも行かないくらい。 つまりワンコイン(500円)もあれば十分行ける数字ではある。 == Q.Route53って言ってるけどIAMしか書いてないぢゃないっすか == A.大丈夫だ。問題無い。 Route53の使い方的エッセンシャルな部分については普通にWebコンソールを使ってもらえば問題無いです。 そして外部からアクセスするためのAPIについてはWebコンソール外に用意されており、 必要なパラメータとアクセスについては(一部設定や引数などがあるものの)、cli53により実施する。 あとはアクセス制御の設定で、これについてはIAMで制御することになる。