LoginSignup
1
1

More than 1 year has passed since last update.

Route53でDDNSみたいなことをする(ための準備)

Last updated at Posted at 2021-04-15

IAMでRoute53レコード更新用のグループとユーザを作成

グループの作成(説明は最小)

スクリーンショット 2021-04-15 110948.png
ポリシーは「AmazonRoute53AutoNamingRegistrantAccess」を選択。多分これが一番権限が少ないと思います。
スクリーンショット 2021-04-15 111106.png
最後に確認画面でグループを作成。(このSSではポリシーは設定されていません)スクリーンショット 2021-04-15 111116.pngスクリーンショット 2021-04-15 111129.png

ユーザの作成

スクリーンショット 2021-04-15 111142.pngスクリーンショット 2021-04-15 111156.png
先程作成したグループを割り当てスクリーンショット 2021-04-15 111208.png
タグは自由に。スクリーンショット 2021-04-15 111217.png
スクリーンショット 2021-04-15 111225.png
忘れないようにアクセスキーとシークレットキーが記載されているcsvをダウンロードしておきましょう。
スクリーンショット 2021-04-15 111237.png

オンプレ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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1