背景と目的
無料の SSL/TLS 証明書と言えば、Let's Encrypt ですが、昔は Azure App Serivce に対して証明書を自動更新するスクリプトを用意して Cron を別環境で動かしていました。現在は無料の App Service マネージド証明書を使用して、自動更新も Azure に任せる方法がとても楽で便利です。ということで、Azure CLI で無料の App Service マネージド証明書を検証してみました。
前提条件
DNS に CNAME レコードを登録する必要があります。今回は Azure DNS を使用しますが、CNAME レコードが登録できて名前解決可能であれば良いです。
検証用の App Service を作成
bash
# 環境変数をセットします
region=japaneast
prefix=mnrappdev
domain=example.jp
# リソースグループを作成します
az group create \
--name ${prefix}-rg \
--location $region
# App Service Plan を作成します
az appservice plan create \
--name ${prefix}-plan \
--resource-group ${prefix}-rg \
--sku B1
# WebApp を作成します
az webapp create \
--name ${prefix}-app \
--resource-group ${prefix}-rg \
--plan ${prefix}-plan \
--runtime "PHP|7.4"
# (省略可) 常時接続を有効にします
az webapp config set \
--name ${prefix}-app \
--resource-group ${prefix}-rg \
--always-on true
# (省略可) 自分の IP からのみアクセスを許可します
az webapp config access-restriction add \
--name ${prefix}-app \
--resource-group ${prefix}-rg \
--priority 100 \
--rule-name MyIP \
--action Allow \
--ip-address $(curl -s inet-ip.info)
# (省略可) WebApp 自身からのループバックアクセスを許可します
az webapp config access-restriction add \
--name ${prefix}-app \
--resource-group ${prefix}-rg \
--priority 200 \
--rule-name AppIP \
--action Allow \
--ip-address $(az webapp show \
--name ${prefix}-app \
--resource-group ${prefix}-rg \
--query outboundIpAddresses \
--output tsv)
DNS に CNAME レコードを作成
bash
# WebApp へのアクセス用に CNAME レコードを登録します
az network dns record-set cname set-record \
--resource-group ${prefix}-rg \
--zone-name $domain \
--record-set-name ${prefix} \
--cname ${prefix}-app.azurewebsites.net
# ドメイン検証用に CNAME レコードを登録します
az network dns record-set cname set-record \
--resource-group ${prefix}-rg \
--zone-name $domain \
--record-set-name awverify.${prefix} \
--cname awverify.${prefix}-app.azurewebsites.net
ドメインと証明書を登録
bash
# ドメインを登録します
az webapp config hostname add \
--webapp-name ${prefix}-app \
--resource-group ${prefix}-rg \
--hostname ${prefix}.$domain
# マネージド証明書を作成します
az webapp config ssl create \
--resource-group ${prefix}-rg \
--name ${prefix}-app \
--hostname ${prefix}.$domain
# 作成したマネージド証明書をバインドします
az webapp config ssl bind \
--certificate-thumbprint $(az webapp config ssl show \
--resource-group ${prefix}-rg \
--certificate-name ${prefix}.$domain \
--query thumbprint \
--output tsv) \
--resource-group ${prefix}-rg \
--name ${prefix}-app \
--ssl-type SNI
# ブラウザでアクセスして確認します
open https://${prefix}.$domain
検証環境を削除
bash
# リソースグループを削除します
az group delete \
--name ${prefix}-rg \
--yes
参考