0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Azure】Application gatewayがKey Vaultに格納したTLS証明書を参照する方法

Posted at

みなさん、こんにちは!
今回はクライアントから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に証明書を格納/生成するには「キー コンテナー証明書責任者」が必要です。

設定の流れ

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

実際にやってみる

まずはユーザー割り当てマネージドIDにキーコンテナーで「Key vault Certificate User」を割り当てます。
image.png

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

以下を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証明書として、ポータルに表示されます。
image.png

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

終わりに

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?