ApplicationGatewayのリスナー証明書を自動で更新する
2021-04-16
azblob://2022/11/11/eyecatch/2021-04-16-applicationgateway-update-cetificate-000.jpg

新規証明書をキーコンテナに格納後、AGWと同期されるまで4時間程度かかります(https://docs.microsoft.com/ja-jp/azure/application-gateway/key-vault-certs)
即反映させるためには、手動でやってあげるかスクリプト組んであげましょう。
そのため、完全自動化とはいえない部分があります。

はじめに

画像の内容に沿ってやってきます。
なお、AGW (ApplicationGateway) とバックエンドリソース (AppService) は既に作成済みとします。
証明書は自分用のAppService証明書で発行した標準SSL証明書を使用してます。

マネージドID作成

特に複雑な部分は無いので適当に作成します。

マネージドIDをAGWに適用

AGWがキーコンテナから証明書情報を参照する際に必要になります。

1. 作成したマネージドIDのプロパティにある、リソースIDを控えます。

2. az loginで対象の環境にログインして下記コマンドを実施します。

az network application-gateway identity assign `
    --identity {マネージドIDのリソースID} `
    -g {AGWのリソースグループ名} `
    --gateway-name {AGWの名前}

3. 上記実施後、下記コマンドを実施して何かしら表示されていれば適用されてます。

az network application-gateway identity show `
    -g {AGWのリソースグループ名} `
    --gateway-name {AGWの名前}

マネージドIDのアクセスポリシー(権限)を設定

1. キーコンテナを作成します。価格はStandardのもので大丈夫です。

2. アクセスポリシーを設定します。いらない権限も含まれてる気がしますが・・・

テンプレートからの構成:     選択しない
キーからのアクセス不可:     取得、一覧
シークレットからのアクセス不可: 取得、一覧
証明書からのアクセス不可:    取得、一覧、更新、インポート
プリンシパルの選択:       対象のマネージドID
承認されているアプリケーション: 選択しない

リスナー設定

「選択した証明書の更新または編集」にチェックを入れた後、対象のマネージドID、キーコンテナ、証明書を選択します。リスナーが複数ある場合、全てのリスナーで実施します。※今回の手順前に、既にリスナー証明書が設定されていても自動更新とはなりません。再度設定する必要があります。
ちなみに、ポータルから証明書を選択して更新していますが、Powershellでも可能です。僕の環境だとAzureCLIやTerraformも動作確認できました。

設定確認

コマンドとポータルの2種類での確認方法を記載します。
※証明書名の後ろにバージョンを示す文字列がある場合、自動更新とならないのでご注意を。

1. コマンド

下記実施結果の、keyVaultSecretIdの末尾が証明書名になっていれば問題ありません。

az network application-gateway ssl-cert list `
    -g {AGWのリソースグループ名} `
    --gateway-name {AGWの名前}

2. ポータル

AGWからテンプレートのエクスポートに移動します。sslCertificatesにある、keyVaultSecretIdの末尾が証明書名になっていれば問題ありません。

最新証明書の割り当て

1. キーコンテナにある既存の証明書名をクリック後、新規証明書を新しいバージョンとしてインポートします。

2. AGWの設定更新

即反映させるためには、何かしらの設定変更が必要です。ここでは適当な正常性プローブを作成し、その後削除して対応します。

az network application-gateway probe create `
    --gateway-name {AGWの名前} `
    --name temp `
    -g {AGWのリソースグループ名} `
    --protocol Http `
    --path /temp `
    --host 127.0.0.1
az network application-gateway probe delete `
    --gateway-name {AGWの名前} `
    --name temp `
    -g {AGWのリソースグループ名}

3. 証明書の変更確認

ブラウザを開いて対象のアドレスに移動します。画像の赤枠部分をクリックし、「証明書」をクリックすれば、証明書の情報が出てきます。以前と比べ、有効期間等の情報が変わってたら成功です。

まとめ

完全自動化ではありませんが、新規証明書をキーコンテナに格納後、AGWで何かしら設定を更新すれば最新の証明書が即時に割り当たることが確認できました。検証中は仕組みが分からなくて辛かったですが、いざ分かると気持ちがいいものです。
ちなみに、AFDのLatestも証明書の同期について同じことが言えます。即反映させるためには何かしらの設定更新が必要です。