独自ドメインと無料証明書を取得してAzureの検証環境準備を捗らせる
はじめに
別にPR記事ではないのですが2022/12/1現在、Value Domainで、.comと.netドメインの取得が初年度無料のキャンペーンをやっていますね。
Value Domainを20年近く利用している私ですが、今回はこの「捨てドメイン」を取得してネームサーバをAzure DNS Zoneに変更、あとは再掲ですがAcmebotを使ってLet's EncryptoのTLS証明書をAzure Key Vaultで管理する手順についてまとめました。
検証環境といえども、今やなんちゃってドメインを/etc/hostsに書いたり、自己証明書を使って頑張ってTLS通信しなくても、本番環境に近い構成でテストが行える時代ということですね。
ドメインを取得しよう
1年間限定の「捨てドメイン」という気持ちではいましたが、実際に新規取得するとなると「もしかしたらずっと使うかも」という事態も考えて少しちゃんと考えます。
「ktkrdev」で検索すると、.comも.netも取れそうなので「ktkrdev.com」にしましょう。
「登録年数」はデフォルトの1年のまま。「自動更新を適用する」のチェックは外します。1年後に継続利用したくなったら手動で更新することにします。
利用規約のチェックも入れて、次のステップに進みます。
無事登録できた模様。
しかし、ドメイン登録時に「自動更新」をしないにしても、「ドメインの自動更新・延長設定」を見ると、自動更新設定が「全体設定に従う」になっています。
ちなみに私の全体設定は自動更新ありになっています。
これも「自動更新しない」に変更しておいて、1年後に更新するかどうかを考えます。
AzureでDNS Zoneを準備しよう
続いてAzure側にDNS Zoneを作成します。
今回はポータルからサクッと操作します。
検索窓に「DNS」と入力してリストから「DNSゾーン」を選択します。プライベートDNSゾーンではないので注意。
(私の場合は)既存のDNSゾーンの一覧が出ている画面で「+作成」を押して先に進みます。
「DNSゾーンの作成」画面まで来たら、リソースを作成するリソースグループの指定と、先にValue Domainで登録したドメイン名を入力して、作成します。
無事作成できたら、リソース概要画面に表示されている「ネームサーバー1~4」を控えておきます。連番のように見せかけて実は末尾部分が異なるので注意です。
ネームサーバを変更しよう
再度Value Domainのコントロールパネルから、登録したドメインの「ネームサーバの設定」に移動して、ネームサーバ1~4を先ほど控えたAzure DNS Zoneのネームサーバに置き換えます。
最後のドット(.)はあっても無くても良いです。
whoisコマンドでもグローバルにもネームサーバがAzure DNS Zoneに向いていることが確認できましt。
ここまでで、ドメインの新規登録と、Azure DNS Zoneの設定は完了です。
適当なDNSレコードを追加して、dig等で名前解決ができるか確認しましょう。
$ dig +short a hogehoge.ktkrdev.com
8.8.8.8
Acmebotをインストールして無料証明書を手に入れる
しばやん作の「Key Vault Acmebot」を利用させてもらい、Let's EncryptoのTLS証明書をよしなに生成・更新してAzure Key Vaultに格納してもらいます。
GitHubページからAzureにデプロイ
GitHubのページの中ほどにある「Deployment」からAzure(Public)の「Deploy to Azure」をクリックして先に進みます。
パラメータ類は以下の感じで設定します。
設定名 | 設定値 |
---|---|
サブスクリプション リソースグループ |
適当に |
リージョン | 適当に。私は東日本を選択しました |
App Name Prefix | 作成するリソースの先頭に付与する文字列 |
Location | デフォルトのまま |
Mail Address | Let’s Encryptにリクエストを出すときに使用するメールアドレス |
Acme Endpoint | 今回はLet’s Encryptを使うのでデフォルトのまま |
Create With Key Vault | 今回は新規作成するのでデフォルトのまま |
Key Vault Sku Name | デフォルトのままでOK |
Key Vault Base Url | 今回は新規作成するので空でOK |
そしてデプロイが完了したAzureリソース類は以下の通りです。
肝となっているAzure Functionsは従量課金プランとなっており、非常にリーズナブルな構成でデプロイされています。
Functionsのアプリケーション設定
ほぼ最初のデプロイ時に入力したパラメータがアプリケーション設定に既に登録されていますが、追加で以下の設定をします。
- Acmebot:MitigateChainOrder
「true」を設定。Application Gatewayでの誤った順序が回避される[1]。 - Acmebot:AzureDns:SubscriptionId
Azure DNSのリソース(今回でいうと、私のktkrdev.com)があるAzureサブスクリプションIDを指定。
DNS ProviderはAzure DNS Zoneに限らず、数多く対応しているようです。他のDNS Providerの場合は、以下のWikiを参照して適切な設定をしてください。
Functionsの認証設定
この設定をしないと、Acmebotの管理画面に誰でも入ることが出来てしまうので、Wikiに書かれている通りに設定します。
Functionsの認証設定メニューから、「IDプロバイダーの追加」で「Microsoft」を選択後、後は全てデフォルトの値で「追加」すればとりあえずOKです。
既存のAzure DNSにFunctionsのMSIDに対する権限付与
Azure DNSに、Acmebotから色々操作させるために「DNS Zone Contributor」権限を付与します。
AcmebotのFunctionsはSystem Managed IDが有効化されているので、そちらをIAMに登録します。
Azure DNSに強い権限を与えないといけない理由ですが、Let’s Encryptが指定されたドメインの所有者確認として、TXTレコードを使って認証しているからです。
ダッシュボードへのアクセスと証明書発行
ポータルからFunctionsのエンドポイントURLを確認して、後ろに「/dashboard」を付けてブラウザからアクセスします。
最初にAzure AD認証と、認可して良いか聞かれますので良しなに設定して先に進みます。
こんな画面が出て、エラー的なポップアップ表示がされなければ、ひとまず準備完了です。
「+ Add」ボタンを押すと追加画面が出ます。
こちらの画面の「DNS Zone」で選択できるドメイン一覧は、事前に設定してAcmebotから操作可能なものだけが選択できるようになっています。
今回は私のドメイン「ktkrdev.com」を選択して、ワイルドカード証明書を作成するので「DNS Names」には「*」を入力後「Add」で追加します。
最後にグリーンの「Add」ボタンをクリックすると、証明書が作成されてKey Vaultに格納されます。
ダッシュボードの一覧に追加されましたね。
Key Vaultの証明書にも追加されています。
Key Vaultの証明書にアクセスするための権限付与
AcmebotでKey Vaultを作成すると、アクセス構成は「Azureロールベースのアクセス制御」となっており、Key VaultのIAM設定で自分のアカウントを「キーコンテナー証明書責任者」に任命する必要があります。
ポータルから設定してください。
TLS証明書の確認と利用
Key Vaultの証明書内を確認すると、Acmebotが作成してくれたTLS証明書が一覧に出ます。
あとは、証明書をダウンロードしてきて仮想マシン内で利用したり、直接Azureのサービス(Web AppsやApplication Gatewayなど)から利用できます。
AzureのサービスからKey Vault証明書を参照・インポートする際には、それぞれのサービスごとに操作手順が異なりますが、本記事では割愛します。
基本的にはマネージドIDを有効化して、Key VaultのIAMに適切な権限(通常は「キー コンテナー シークレット ユーザー」)を付与することで利用できます。
おわりに
DNS ZoneもAcmebot(Functions)もAzure利用料が無料という訳ではありませんが、かなり安価に自分専用のドメイン名とTLS証明書がこれで用意できると思います。
Azureに限らずクラウドの利点の一つである、気軽に「使いたい時だけ用意して試す!」がより捗るのではないでしょうか。
Discussion