🐙

独自ドメインと無料証明書を取得してAzureの検証環境準備を捗らせる

2022/12/01に公開

はじめに

別に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」にしましょう。

img

「登録年数」はデフォルトの1年のまま。「自動更新を適用する」のチェックは外します。1年後に継続利用したくなったら手動で更新することにします。

利用規約のチェックも入れて、次のステップに進みます。

img

無事登録できた模様。

img

しかし、ドメイン登録時に「自動更新」をしないにしても、「ドメインの自動更新・延長設定」を見ると、自動更新設定が「全体設定に従う」になっています。

ちなみに私の全体設定は自動更新ありになっています。

img

これも「自動更新しない」に変更しておいて、1年後に更新するかどうかを考えます。

img

AzureでDNS Zoneを準備しよう

続いてAzure側にDNS Zoneを作成します。

今回はポータルからサクッと操作します。

検索窓に「DNS」と入力してリストから「DNSゾーン」を選択します。プライベートDNSゾーンではないので注意。

img

(私の場合は)既存のDNSゾーンの一覧が出ている画面で「+作成」を押して先に進みます。

img

「DNSゾーンの作成」画面まで来たら、リソースを作成するリソースグループの指定と、先にValue Domainで登録したドメイン名を入力して、作成します。

img

無事作成できたら、リソース概要画面に表示されている「ネームサーバー1~4」を控えておきます。連番のように見せかけて実は末尾部分が異なるので注意です。

img

ネームサーバを変更しよう

再度Value Domainのコントロールパネルから、登録したドメインの「ネームサーバの設定」に移動して、ネームサーバ1~4を先ほど控えたAzure DNS Zoneのネームサーバに置き換えます。

最後のドット(.)はあっても無くても良いです。

img

whoisコマンドでもグローバルにもネームサーバがAzure DNS Zoneに向いていることが確認できましt。

img

ここまでで、ドメインの新規登録と、Azure DNS Zoneの設定は完了です。

適当なDNSレコードを追加して、dig等で名前解決ができるか確認しましょう。

img

$ dig +short a hogehoge.ktkrdev.com
8.8.8.8

Acmebotをインストールして無料証明書を手に入れる

しばやん作の「Key Vault Acmebot」を利用させてもらい、Let's EncryptoのTLS証明書をよしなに生成・更新してAzure Key Vaultに格納してもらいます。

Key Vault Acmebot(GitHub)

GitHubページからAzureにデプロイ

GitHubのページの中ほどにある「Deployment」からAzure(Public)の「Deploy to Azure」をクリックして先に進みます。

img

パラメータ類は以下の感じで設定します。

設定名 設定値
サブスクリプション
リソースグループ
適当に
リージョン 適当に。私は東日本を選択しました
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

img

そしてデプロイが完了したAzureリソース類は以下の通りです。

img

肝となっている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を参照して適切な設定をしてください。

DNS Provider Configuration

Functionsの認証設定

この設定をしないと、Acmebotの管理画面に誰でも入ることが出来てしまうので、Wikiに書かれている通りに設定します。

Functionsの認証設定メニューから、「IDプロバイダーの追加」で「Microsoft」を選択後、後は全てデフォルトの値で「追加」すればとりあえずOKです。

img

既存のAzure DNSにFunctionsのMSIDに対する権限付与

Azure DNSに、Acmebotから色々操作させるために「DNS Zone Contributor」権限を付与します。

AcmebotのFunctionsはSystem Managed IDが有効化されているので、そちらをIAMに登録します。

img

Azure DNSに強い権限を与えないといけない理由ですが、Let’s Encryptが指定されたドメインの所有者確認として、TXTレコードを使って認証しているからです。

ダッシュボードへのアクセスと証明書発行

ポータルからFunctionsのエンドポイントURLを確認して、後ろに「/dashboard」を付けてブラウザからアクセスします。

img

最初にAzure AD認証と、認可して良いか聞かれますので良しなに設定して先に進みます。

こんな画面が出て、エラー的なポップアップ表示がされなければ、ひとまず準備完了です。

img

「+ Add」ボタンを押すと追加画面が出ます。

こちらの画面の「DNS Zone」で選択できるドメイン一覧は、事前に設定してAcmebotから操作可能なものだけが選択できるようになっています。

今回は私のドメイン「ktkrdev.com」を選択して、ワイルドカード証明書を作成するので「DNS Names」には「*」を入力後「Add」で追加します。

img

最後にグリーンの「Add」ボタンをクリックすると、証明書が作成されてKey Vaultに格納されます。

ダッシュボードの一覧に追加されましたね。

img

Key Vaultの証明書にも追加されています。

img

Key Vaultの証明書にアクセスするための権限付与

AcmebotでKey Vaultを作成すると、アクセス構成は「Azureロールベースのアクセス制御」となっており、Key VaultのIAM設定で自分のアカウントを「キーコンテナー証明書責任者」に任命する必要があります。

ポータルから設定してください。

img

TLS証明書の確認と利用

Key Vaultの証明書内を確認すると、Acmebotが作成してくれたTLS証明書が一覧に出ます。

img

あとは、証明書をダウンロードしてきて仮想マシン内で利用したり、直接Azureのサービス(Web AppsやApplication Gatewayなど)から利用できます。

img

AzureのサービスからKey Vault証明書を参照・インポートする際には、それぞれのサービスごとに操作手順が異なりますが、本記事では割愛します。

基本的にはマネージドIDを有効化して、Key VaultのIAMに適切な権限(通常は「キー コンテナー シークレット ユーザー」)を付与することで利用できます。

おわりに

DNS ZoneもAcmebot(Functions)もAzure利用料が無料という訳ではありませんが、かなり安価に自分専用のドメイン名とTLS証明書がこれで用意できると思います。

Azureに限らずクラウドの利点の一つである、気軽に「使いたい時だけ用意して試す!」がより捗るのではないでしょうか。

脚注
  1. https://github.com/shibayan/keyvault-acmebot/discussions/406 ↩︎

Discussion