はじめに
クラウド技術部のWです。
今回はクライアントからTLS通信を実現するためにApplication gatewayで証明書を参照する方法をお伝えします。
Application gatewayでHTTPS通信を実現する方法
Application gatewayはWebアプリケーションへの通信を管理・分散できるロードバランサーです。
Application gatewayがTLS証明書を参照する方法が2つあります。
- Application gatewayのリスナーに直接アタッチする方法
- Key VaultにTLS証明書を格納し、Application gatewayのリスナーにTLS証明書を参照しに行く方法。
Key VaultにTLS証明書を格納するメリット
Application gatewayがKey Vaultに参照しに行くには以下のメリットがあります。
- Key Vaultは証明書のほかにシークレットやSSHキー等機密情報を統合管理できる。
- Key VaultはAzureの専用の保管場所に隔離し、脅威から守る。
- 証明書にライフサイクル管理ができ、自動更新が可能になる。
以上のことから、Key VaultにTLS証明書を格納し、Application gatewayのリスナーにTLS証明書を参照しに行く方法を今回使用します。
前提条件
- CLI操作を行うため、CloudshellかAzure CLIを利用できるようにする。
- TLS 1.1がサポート終了したため、TLS1.2以上のTLS証明書を利用する。
- ソフトウェアで検証された証明書を利用して下さい。ハードウェアセキュリティモジュール(MSM)で検証された証明書はサポート対象外です。
- 必要なリソースはすべて作成した状態で手順を記載します。Key vaultはAzure ロールベースのアクセス制御を利用します。Application gatewayはHTTPS通信が可能なリスナーを用意してください。
- Key vaultに証明書を格納/生成するには「キー コンテナー証明書責任者」が必要です。
設定の流れ

①ユーザーマネージドIDを作成します。作成したKey Vaultで「Key vault Certificate User」をマネージドIDに割り当てます。
②Key VaultにTLS証明書を格納します。
③TLS証明書をApplication gatewayから参照できるように、権限を付与したマネージドIDをApplication gatewayに割り当て、リスナーのTLS証明書として設定します。
実際にやってみる
まずはユーザー割り当てマネージドIDにキーコンテナーで「Key vault Certificate User」を割り当てます。

次にApplication gatewayでKey Vaultに格納したTLS証明書を参照する設定を行います。
Azureポータルで設定しようとするとエラーが発生し、設定することができないため、Powershell で実行します。

以下をPowershell で実行します。<>内はご自身の環境に合わせて設定してください。
$appgw = Get-AzApplicationGateway -Name
-ResourceGroupName <リソースグループ名>
# ユーザー割り当てマネージドIDにリソースIDを指定
Set-AzApplicationGatewayIdentity -ApplicationGateway $appgw -UserAssignedIdentityId "/subscriptions/<サブスクリプションID>/resourceGroups/<リソースグループ名>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<マネージドID名>"
# Key Vault からシークレットの ID を取得する。
$secret = Get-AzKeyVaultSecret -VaultName "Key vault名" -Name "Key Vaultの証明書の名前"
$secretId = $secret.Id.Replace($secret.Version, "") # 今後の同期で Application Gateway が最新バージョンを使用するように設定
# Key VaultからシークレットIDをApplication gatewayが取得できるようにする。
Add-AzApplicationGatewaySslCertificate -KeyVaultSecretId $secretId -ApplicationGateway $appgw -Name $secret.Name
# Application Gateway への変更を保存する。
Set-AzApplicationGateway -ApplicationGateway $appgw
実行後、リスナーTLS証明書として、ポータルに表示されます。

DNSで名前解決できるよう設定し、HTTPSポートを開放しました。
実際にWebブラウザでURLを検索するとアクセスできるようになります。
※今回は自己証明書を使用したため、証明書エラーが記載されています

終わりに
NW初心者の私はApplication gateway実装、DNS、証明書設定に苦労しました。
一度やってみると、アクセスエラーが発生する箇所がわかってきたので、とてもいい勉強になりました。


