次の方法で共有


Windows のアクティブ化基準値が引き続き表示される

適用対象:Windows ✔️ Server 2022 Datacenter Azure Edition を実行している Windows VM の

このドキュメントでは、Microsoft Azure 仮想マシンでの Windows ライセンス認証基準値の継続的な存在を解決する方法について説明します。

前提条件

現象

Windows Server 2022 Datacenter Azure Edition を実行する Azure 仮想マシン (VM) を使用すると、次の現象が発生します。

  • デスクトップに、次のメッセージを含む透かしが表示されます。

    Windows のライセンス認証を行います。 設定を開き、Windows のライセンス認証を行ってください。

    この透かしは、Windows のライセンス認証の状態が正規の状態ではないことを示します。

  • Settings アプリを開き、System>Activation を選択すると、アプリケーションの状態フィールドはアクティブ化エラーを示します。

  • 管理者特権のコマンド プロンプト ウィンドウを開き、次の slmgr.vbs ボリューム ライセンス認証スクリプトを実行すると、キー管理サービス (KMS) のアクティブ化が成功したことが出力に示されますが、最初の 2 つの現象は残ります。

    cscript c:\windows\system32\slmgr.vbs /dlv
    
  • VM を再起動またはサインインすると、次のメッセージが表示されたポップアップ ウィンドウが表示されます。

    Windows Server 2022 Datacenter Azure Edition VM は、Azure またはサポートされている Azure Stack ハイパーバイザーで実行していないため、またはサポートされている Azure Stack で Azure 特典を有効にしていないため、非アクティブ化されています。 Azure 特典を有効にするには、Windows Admin Center のクラスター設定に移動 > Azure 特典を有効にします。

原因 1: Azure Instance Metadata Service の接続に関する問題

Azure VM は、アクティブ化トークンを取得するために不可欠な Azure Instance Metadata Service (IMDS) エンドポイントとの接続を確立できません。

VM ゲスト OS が IMDS と正常に通信できるかどうかを判断する方法

PowerShell のバージョンに応じて、次の PowerShell スクリプトを実行して、メタデータが IMDS から受信されているかどうかを確認します。

  • PowerShell 6 以降のバージョン

    Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri 
    http://169.254.169.254/metadata/attested/document?api-version=2020-09-01
    | Format-List * | Out-File "IMDSResponse1.txt"
    
  • PowerShell 5 以前のバージョン

    $Proxy=New-object System.Net.WebProxy
    $WebSession=new-object Microsoft.PowerShell.Commands.WebRequestSession
    $WebSession.Proxy=$Proxy
    Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/instance?api-version=2021-02-01" -WebSession $WebSession
    

正常な応答が得られると、次の出力など、VM からのメタデータ情報が表示されます。

compute                                                                                                                                                                  
-------                                                                                                                                                                  
@{azEnvironment=AzurePublicCloud; customData=; evictionPolicy=; isHostCompatibilityLayerVm=true; licenseType=; location=eastus; name=testWs2022; offer=WindowsServer; ...

そうでない場合は、IMDS ワイヤ サーバーへの接続がどこかでブロックされ、そのサーバーへのアクセスを許可する必要があることを意味します。 IMDS サーバーの IP が 169.254.169.254。 接続の問題を解決するには、「 ソリューション 1: VM 内の Web プロキシをバイパスするに関するページを参照してください。

アクティブ化プロセスに不可欠な中間証明書の有効期限が切れています。

詳細については、「 Azure Instance Metadata Service-Attested data TLS: Critical changes are hereを参照してください。

証明書がないかどうかを確認する方法

次の PowerShell スクリプトを実行して、不足している証明書があるかどうかを確認します。

# Get the signature
# Powershell 5.1 does not include -NoProxy
$attestedDoc = Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri http://169.254.169.254/metadata/attested/document?api-version=2018-10-01
#$attestedDoc = Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri http://169.254.169.254/metadata/attested/document?api-version=2018-10-01
 
# Decode the signature
$signature = [System.Convert]::FromBase64String($attestedDoc.signature)
 
# Get certificate chain
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]($signature)
$chain = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Chain
 
if (-not $chain.Build($cert)) {
   # Print the Subject of the issuer
   Write-Host $cert.Subject
   Write-Host $cert.Thumbprint
   Write-Host "------------------------"
   Write-Host $cert.Issuer
   Write-Host "------------------------"
   Write-Host "Certificate not found: '$($cert.Issuer)'" -ForegroundColor Red
   Write-Host "Please refer to the following link to download missing certificates:" -ForegroundColor Yellow
   Write-Host "https://learn.microsoft.com/en-us/azure/security/fundamentals/azure-ca-details?tabs=certificate-authority-chains" -ForegroundColor Yellow
} else {
   # Print the Subject of each certificate in the chain
   foreach($element in $chain.ChainElements) {
       Write-Host $element.Certificate.Subject
       Write-Host $element.Certificate.Thumbprint
       Write-Host "------------------------"
   }
 
   # Get the content of the signed document
   Add-Type -AssemblyName System.Security
   $signedCms = New-Object -TypeName System.Security.Cryptography.Pkcs.SignedCms
   $signedCms.Decode($signature);
   $content = [System.Text.Encoding]::UTF8.GetString($signedCms.ContentInfo.Content)
   Write-Host "Attested data: " $content
   $json = $content | ConvertFrom-Json
}

証明書がない場合は、次のような出力が表示されます。

CN=metadata.azure.com, O=Microsoft Corporation, L=Redmond, S=WA, C=US
3ACCC393D3220E40F09A69AC3251F6F391172C32
------------------------
CN=Microsoft Azure RSA TLS Issuing CA 04, O=Microsoft Corporation, C=US
------------------------
Certificate not found: 'CN=Microsoft Azure RSA TLS Issuing CA 04, O=Microsoft Corporation, C=US'
Please refer to the following link to download missing certificates:
https://learn.microsoft.com/en-us/azure/security/fundamentals/azure-ca-details?tabs=certificate-authority-chains

証明書の問題を解決するには、「 ソリューション 2: 証明書のダウンロードを許可するようにファイアウォールとプロキシが構成されていることを確認するに進みます。

解決策 1: VM 内の Web プロキシをバイパスする

IMDS は、ルーティング不可能な既知の IP アドレス (169.254.169.254) で使用できる REST API です。 IMDS エンドポイントは、次の URI でのみ VM 内からアクセスできます: http://169.254.169.254/metadata/instance。 VM と IMDS 間の通信がホストから離れることはありません。 HTTP クライアントが IMDS のクエリを実行している間に、VM 内の Web プロキシをバイパスするようにします。 また、クライアントが 169.254.169.254 IP アドレスを 168.63.129.16 IP アドレスと同じ方法で処理していることを確認。 この直接ネットワーク接続が存在することを確認するには、次の手順に従います。

Note

168.63.129.16 は、Azure リソースとの通信に使用される Microsoft 所有の仮想パブリック IP アドレスです。

  1. VM 上のローカル ルーティング テーブルを表示するには、 route print コマンドを実行します。

    route print
    
  2. IMDS ターゲットのルーティング エントリを見つけるには、IPv4 Route Table出力の Active Routes セクションに移動し、Network Destination列で169.254.169.254 IP アドレスを含む行を見つけます。

    ネットワーク宛先 Netmask ゲートウェイ Interface メトリック
    0.0.0.0 0.0.0.0 172.16.69.1 172.16.69.7 10
    127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
    127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
    127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
    168.63.129.16 255.255.255.255 172.16.69.1 172.16.69.7 11
    169.254.169.254 255.255.255.255 172.16.69.1 172.16.69.7 11
    ... ... ... ... ...

    サンプル ルート テーブルの出力では、IMDS ターゲット エントリは最後の行にあり、対応するネットワーク インターフェイスはその行内の Interface 列の値です。 (この例では、ネットワーク インターフェイスは 172.16.69.7

  3. VM の IP 構成を表示するには、 ipconfig コマンドを実行します。

    ipconfig /all
    
  4. ipconfig コマンド出力で、 IPv4 Address フィールドが IMDS エントリ (172.16.69.7) のネットワーク インターフェイス値と一致する IP 構成を見つけます。

    ...
    Ethernet adapter Ethernet:
    
    Connection-specific DNS Suffix  . : xic3mnxjiefupcwr1mcs1rjiqa.cx.internal.cloudapp.net
    Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
    Physical Address. . . . . . . . . : 00-0D-3A-E5-1C-C0
    DHCP Enabled. . . . . . . . . . . : Yes
    Autoconfiguration Enabled . . . . : Yes
    Link-local IPv6 Address . . . . . : fe80::3166:ce5a:2bd5:a6d1%3(Preferred)
    IPv4 Address. . . . . . . . . . . : 172.16.69.7(Preferred)
    Subnet Mask . . . . . . . . . . . : 255.255.255.0
    ...
    

    サンプル ipconfig 出力では、IMDS エントリのネットワーク インターフェイス値を含む IP 構成が Ethernet adapter Ethernet

  5. 見つけた IP 構成で、メディア アクセス制御 (MAC) アドレスと、VM が使用するプライマリ プライベート IP アドレスをコピーします。 MAC アドレスが Physical Address フィールドに表示され、プライマリ プライベート IP アドレスが IPv4 Address フィールドに表示されます。 この例では、MAC アドレスとプライマリ プライベート IP アドレスがそれぞれ 00-0D-3A-E5-1C-C0 され、 172.16.69.7されます。

  6. Azure が VM に使用する MAC とプライマリ プライベート IP アドレスが、VM のゲスト OS が実際に使用する MAC アドレスとプライマリ プライベート IP アドレス (前の手順で見つけたアドレス) と一致するかどうかを確認します。 MAC アドレスとして Azure が使用する内容を確認するには、Azure CLI を使用します。 プライマリ プライベート IP アドレスとして Azure が使用する内容を確認するには、Azure portal でネットワーク構成を調べます。

    • MAC アドレスを検索する (PowerShell スクリプトで Azure CLI を使用)

      Azure CLI コマンドを呼び出す次の PowerShell スクリプトを実行します。 このスクリプトは、 az vm nic list コマンドを呼び出して、VM 上のネットワーク インターフェイスの名前を収集します。 次に、 az vm nic show コマンドを呼び出して、各ネットワーク インターフェイスの名前、そのネットワーク インターフェイスがプライマリ ネットワーク インターフェイス (True または False)、およびネットワーク インターフェイスの MAC アドレスを表示します。

      Note

      コマンドでは、"nic" はネットワーク インターフェイス カードではなく、ネットワーク インターフェイスを表します。

      # Placeholder variable definitions
      $ResourceGroup = "<resource-group-name>"
      $VmName = "<virtual-machine-name>"
      
      # Code
      $NicNames = az vm nic list --resource-group $ResourceGroup --vm-name $VmName |
          ConvertFrom-Json | Foreach-Object { $_.id.Split('/')[-1] }
      foreach($NicName in $NicNames)
      {
          az vm nic show --resource-group $ResourceGroup --vm-name $VmName --nic $NicName |
              ConvertFrom-Json | Format-Table -Property name, primary, macAddress
      }
      
      name       primary macAddress
      ----       ------- ----------
      wintest767    True 00-0D-3A-E5-1C-C0
      
    • (Azure portal を使用して) プライマリ プライベート IP アドレスを見つけます。

      1. Azure portal で、[仮想マシン] を検索して選択します。

      2. VM の一覧で、VM の名前を選択します。

      3. VM Overview ページの Properties タブで、Networking 見出しを見つけます。

      4. Private IP アドレスフィールドで、表示されている IPv4 アドレスをコピーします。

  7. MAC アドレスまたはプライマリ プライベート IP アドレスが Azure と VM ゲスト OS の間で同じでない場合は、さまざまな route コマンドを使用して、プライマリ ネットワーク インターフェイスと IP アドレスが対象になるようにルーティング テーブルを更新します。

解決策 2: 証明書のダウンロードを許可するようにファイアウォールとプロキシが構成されていることを確認する

  1. KB 5036909がインストールされているかどうかを確認します。 インストールされていない場合は、インストールします。 Microsoft Update Catalog から取得できます。

  2. 更新プログラムをインストールしても問題が発生する場合は、証明書のダウンロードを許可するようにシステムのファイアウォールとプロキシが構成されていることを確認します。 詳細については、「 Certificate のダウンロードと失効リストを参照してください。

    または、 root および下位証明機関チェーンからすべての証明書を直接ダウンロードしてインストール

    Note

    インストール ウィザードで、ストアの場所 ローカル コンピューター を選択してください。

  3. 管理者としてコマンド プロンプトを開き、 c:\windows\system32 に移動して、 fclip.exeを実行します。

  4. VM を再起動するかサインアウトしてから、もう一度サインインします。 ホーム ページの透かしが表示されなくなり、Settings>Activation 画面の Application state フィールドが成功を報告します。

詳細

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。