#IAMでRoute53レコード更新用のグループとユーザを作成
####グループの作成(説明は最小)
ポリシーは「AmazonRoute53AutoNamingRegistrantAccess」を選択。多分これが一番権限が少ないと思います。
最後に確認画面でグループを作成。(このSSではポリシーは設定されていません)
####ユーザの作成
先程作成したグループを割り当て
タグは自由に。
忘れないようにアクセスキーとシークレットキーが記載されているcsvをダウンロードしておきましょう。
#オンプレLinux上での操作(今回はubuntu)
####AWSユーザの登録
AWSCLIとJQがインストールされていること。
ここでアクセスキーとシークレットキーを使ってユーザを作成。
$ aws configure --profile route53ddns
AWS Access Key ID [None]: ACCESS_KEY
AWS Secret Access Key [None]: SECRET_KEY
Default region name [None]: #入力無し
Default output format [None]: #入力無し
$ aws configure list --profile route53ddns
Name Value Type Location
---- ----- ---- --------
profile route53ddns manual --profile
access_key ******************** shared-credentials-file
secret_key ******************** shared-credentials-file
region <not set> None None
####IP更新用JSONのテンプレートを作成
"//"はJSON上ではコメントにならないので削除してね☆
{
"Changes":
[
{
// 更新なのでUPSERT
"Action":"UPSERT",
"ResourceRecordSet":
{
// 更新したいレコードの設定(今回はAレコードなので以下)
"Name":"{%HOST%}.example.net",
"Type":"A",
"TTL":300,
"ResourceRecords":
[
{
// 取得をどこから行うかによるが、
// 今回は取得したJSONにダブルクォーテーションがついているのでこっちはつけない。
"Value":{%IP%}
}
]
}
}
]
}
####グローバルIPを取得してファイルに保存
httpbin.org/ipからjson形式で取得可能。
取得出来るならどこから取得してもヨシ
$ curl httpbin.org/ip > globalip.json
$ cat globalip.json
{
"origin": "MY_GLOBAL_IP"
}
jqで抽出して変数にセット。
$ test=$(jq ".origin" globalip.json)
sedで作っていたテンプレートの値を置き換えて、別ファイルに出力。
sed -e "s/{%IP%}/${test}/g;s/{%HOST%}/test/g" dyndns.tmpl > update.json
####ファイルを指定して更新を実行
$ aws route53 change-resource-record-sets --profile route53ddns --hosted-zone-id HOST_ZONE_ID --change-batch file:///UPDATE_JSON_LOCAL_PATH
{
"ChangeInfo": {
"Id": "/change/*********************",
"Status": "PENDING",
"SubmittedAt": "2021-04-15T02:54:55.544Z"
}
}
$
Route53のコンソールで対象にしたレコードの値が更新されていれば成功。
これをcronなりを使って自動化すれば多分出来る。たぶん。(まだやってない)
主に参考にさせていただいた記事:Route53でダイナミックDNS
2021/05/06追記:
certbotを使ってnginxとletencryptでssl化したので参照したサイト(機械翻訳かな?):Ubuntu 20.04でLet’s Encryptを使用してNginxを保護する方法
2021/05/20追記:
GitHub