- クラウド
Microsoft Azure環境でのKMS認証について

お疲れ様です。
7年目社員の関です。
Microsoft Azure環境を触る機会があり、その中でWindows ServerのKMSライセンス認証について学んだことや、実際につまづいた点を共有できればと思います。
はじめに
KMSライセンス認証の概要
Microsoft Azure 上で稼働する Windows VM は従量課金制となっており、原則稼働時の従量課金にライセンス料が含まれております。ゲスト OS となる Windows からは KMS(Key Management Services)サーバーに、定期的なライセンス認証が行われます。
KMSサーバーの所在
考えられるパターンは下記の2パターンとなります。
・Microsoft Azure公式のKMSサーバー
・自前で構築したKMSサーバー
今回私が採用したのは「Microsoft Azure公式のKMSサーバー」です。
本記事では、この方法について詳しくご紹介します。
KMSライセンス認証の仕組み
KMS ライセンス認証に必要な設定および通信要件
Azure VM から KMS サーバーへの通信は、TCP 1688番ポート を使用し、以下のドメインに対して行われます。
kms.core.windows.net もしくは azkms.core.windows.net
このドメインは、以下のIPアドレスに名前解決されます。
20.118.99.224, 40.83.235.53, 23.102.135.246
上記の宛先に対してインターネット経由で通信する形となります。
Microsoft AzureのWindows VMは、これらのKMSサーバーに直接通信する必要があります。オンプレミス環境を経由する強制トンネリングを使用した場合、ライセンス認証は失敗します。
強制トンネリング環境での認証失敗の理由 Azure Windows VM は、Windows のライセンス認証のために Azure KMS サーバーに接続する必要があります。 このライセンス認証では、ライセンス認証要求が Azure のパブリック IP アドレスから送られる必要があります。 強制トンネリング シナリオでは、ライセンス認証要求が Azure のパブリック IP アドレスではなく、オンプレミス ネットワークから送信されるため、ライセンス認証は失敗します。
参考:強制トンネリングを使用したライセンス認証の問題
また、KMSサーバーへの通信は、通常NSGの暗黙的なルールによって許可されています。ただし、サブネットに「0.0.0.0/0」のユーザー定義ルート(UDR)が存在する場合、暗黙的なルールが適用されず、明示的に許可ルールを追加する必要があります。
自動的なライセンス認証および有効期限について
ライセンス認証は既定では以下の間隔で自動的に認証されます。
・ライセンス未承認状態:2 時間に 1 回の頻度
・ライセンス認証態 :7 日に 1 回の頻度
一度ライセンス認証に成功すると180日間の有効期限が付与されます。認証が成功するたびに、有効期限が180日から再カウントされます。
※イベントログからラインセンス認証のログを確認することをできます。
ライセンス認証切れの影響
ライセンス認証が切れてもVMの利用は継続可能ですが、適切なタイミングで認証が更新されるように設定する必要があります。
つまづいた事例と解決策
内部LBのバックエンドプールに追加後、ライセンス認証が失敗
原因
・内部ロードバランサー(内部LB)のバックエンドプールにVMを追加した後、ライセンス認証ができ
なくなった。
・VMにグローバルIPアドレスを割り当てていなかったため、Microsoft Azure公式のKMSサーバーと通信できな
くなった。
※当初は「強制トンネリング」を使って通信可能ではないかと認識していました…
解決策
・NAT Gatewayを使用し、KMS認証通信のみNAT GatewayのグローバルIPアドレスを使用するよう
に設定。
外部LBの送信規則を設定していなかった
原因
・外部ロードバランサー(外部LB)のバックエンドプールにVMを追加後、ライセンス認証が失敗。
・外部LBにはグローバルIPがあるため、通信可能だと考えていたが、外部LBの「送信規則」が未設定だっ
たため、通信できなかった。
解決策
・外部LBで「送信規則」を設定し、KMSサーバーへの通信を許可。
参考:送信規則について
まとめ
以上、Microsoft AzureのKMSサーバーによるライセンス認証のご紹介でした。
構築環境によってはグローバルIPアドレスをVMに付与しないポリシー等で気づかないうちにライセンス認証ができない状態にならないよう皆様もご注意いただければと思います。
参考文献
https://jpaztech.github.io/blog/vm/kms-troubleshooting/