次の方法で共有


Azure の Windows VM での拡張機能証明書に関する問題のトラブルシューティング

適用対象: ✔️ Windows VM

この記事では、拡張機能を使用する Windows 仮想マシン (VM) 上の証明書に関連する問題を特定して修正する方法について説明します。 通常、これらの問題は暗号化操作または証明書自体に関連しています。

トラブルシューティングのチェックリスト

ゲスト ログを表示する

エラーの詳細を取得するには、ゲスト ログを確認します。 拡張機能の証明書エラーをトラブルシューティングするために Windows VM 上で最も役立つログを次の表に示します。

ログ 説明
C:\WindowsAzure\Logs\WaAppAgent.log ログ ファイル ゲスト エージェント ログ。 拡張機能の操作 (ダウンロード、インストール、有効化、無効化など) とその結果について説明します。
C:\WindowsAzure\Logs\Plugins\<ExtensionName> フォルダー内のログ ファイル 特定の拡張機能の操作を反映するさまざまなログ。 各拡張機能には独自の機能がありますが、ほとんどの拡張機能には、CommandExecution.logCommandExecution_<Timestamp、CustomScriptHandler.logIaaSBcdrExtension>.log<Number>.log など、標準的なログ ファイルのセットがあります。

Note

この表には、最も注目すべきログ ファイルのみが含まれています。 これは包括的なリストではありません。

または、 CollectGuestLogs.exe ツールを実行して、すべてのゲスト ログを .zip アーカイブ ファイルに収集することもできます。 CollectGuestLogs.exe ツールは、次のいずれかのディレクトリにある Windows VM 上にあります。

  • C:\WindowsAzure\Packages
  • C:\WindowsAzure\GuestAgent_<VersionNumber>_<Timestamp>

現象

次の一覧では、Windows VM で拡張機能を使用するときに発生する可能性がある最も一般的なエラーの概要を示します。

  • FailedToDecryptProtectedSettings 例外: 拡張機能の保護された設定の暗号化を解除するために使用されるトランスポート証明書が VM に存在しません。

    Note

    FailedToDecryptProtectedSettings例外のバリアントにより、Crypto\RSA\MachineKeys フォルダーに不適切なアクセス許可が設定されます。 このシナリオでは、次のいずれかのエラー メッセージが表示されます。

    System.Security.Cryptography.CryptographicException: Keyset does not exist  
      at System.Security.Cryptography.Pkcs.EnvelopedCms.DecryptContent(RecipientInfoCollection recipientInfos, X509Certificate2Collection extraStore)  
      at Microsoft.Azure.Plugins.Diagnostics.dll.PluginConfigurationSettingsProvider.DecryptPrivateConfig(String encryptedConfig)  
    
    Failed to decode, decrypt, and deserialize the protected settings string. Error Message: Keyset does not exist"
    
    Decrypting Protected Settings - Invalid provider type specified
    
    [ERROR] Failed to get TransportCertificate. Error: Microsoft.WindowsAzure.GuestAgent.CertificateManager.CryptographyNative+PInvokeException: Self-signed Certificate Generation failed. Error Code: -2146893808.
    
  • "証明書を取得できません" というエラー メッセージ。

  • CryptographicException VM 診断設定の例外。"Enveloped-data メッセージに指定された受信者が含まれていません。次のテキストでは、この例外の例について説明します。

    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:32:20 PM] Decrypting private configuration
    
    DiagnosticsPluginLauncher.exe Warning: 0 : [6/29/2020 1:32:20 PM] No certficate with given thumbprint found in the certificate store. Thumbprint:34C8CDC747693E0E33A9648703E3990EC4F2C484
    
    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:32:20 PM] Retrying after 30 seconds. Retry attempt 1
    
    DiagnosticsPluginLauncher.exe Warning: 0 : [6/29/2020 1:32:50 PM] No certficate with given thumbprint found in the certificate store. Thumbprint:34C8CDC747693E0E33A9648703E3990EC4F2C484
    
    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:32:50 PM] Retrying after 30 seconds. Retry attempt 2
    
    DiagnosticsPluginLauncher.exe Warning: 0 : [6/29/2020 1:33:20 PM] No certficate with given thumbprint found in the certificate store. Thumbprint:34C8CDC747693E0E33A9648703E3990EC4F2C484
    
    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:33:20 PM] Retrying after 30 seconds. Retry attempt 3
    
    DiagnosticsPluginLauncher.exe Error: 0 : [6/29/2020 1:33:50 PM] System.Security.Cryptography.CryptographicException: The enveloped-data message does not contain the specified recipient.
      at System.Security.Cryptography.Pkcs.EnvelopedCms.DecryptContent(RecipientInfoCollection recipientInfos, X509Certificate2Collection extraStore)
      at Microsoft.Azure.Plugins.Diagnostics.dll.PluginConfigurationSettingsProvider.DecryptPrivateConfig(String encryptedConfig)
    
  • VM にプッシュされるが、他の操作に干渉する新しい証明書。

原因: ワークフローと依存関係コードの変更

この問題の主な原因は、2020 年 5 月頃に実装された Azure プラットフォームの変更です。 この変更は、VM 拡張機能のワークフローを改善し、他の Azure コンポーネントへの依存関係を排除することでした。 拡張機能、カスタム リソース プロバイダー (CSP)、およびゲスト エージェントがまとめて動作する必要があります。 軽微なバグにより、拡張証明書の問題に反映されるセカンダリの問題が発生しました。

解決策 1: 拡張機能証明書を更新する

拡張機能と共に正常に使用できる証明書に更新するには、次の手順に従います。

  1. Windows Azure CRP Certificate Generator 証明書が Microsoft 管理コンソールの証明書スナップインに含まれているかどうかを確認します。 これを行うには、「 拡張機能を使用する Azure IaaS VM 上の複数の証明書 の手順に従って、Windows VM の症状を見つけます。

  2. その証明書を削除します。 これを行うには、 Windows Azure CRP 証明書ジェネレーター 証明書を選択し、 Delete アイコンを選択します。

    Note

    Windows Azure CRP Certificate Generator 証明書が必要な場合、VM は証明書がない場合に証明書を再作成します。

  3. 次のいずれかのオプションを適用して、ゲスト エージェントの新しい目標状態をトリガーします。

    • 次の PowerShell コマンドを実行します。

      $rg = "<name-of-the-resource-group-containing-the-virtual-machine>"
      $vmName = "<name-of-the-virtual-machine>"
      $vm = Get-AzVM -ResourceGroupName $rg -Name $vmName  
      Update-AzVM -ResourceGroupName $rg -VM $vm
      
    • 仮想マシンが失敗した状態でスタックしているに関する記事の「解決策」セクションの手順に従って、VM に対して "再適用" 操作を実行します。

  4. 拡張機能の操作を再試行します。

証明書の更新で問題が解決しない場合は、VM を停止または割り当て解除してから、VM をもう一度起動します。

解決策 2: MachineKeys フォルダーまたは SystemKeys フォルダーのアクセス制御リスト (ACL) を修正する

Crypto\RSA\MachineKeys フォルダーで、正しいアクセス許可が適用されるようにアクセス制御リスト (ACL) を修正します。

  1. 管理 PowerShell コンソールで、次のコマンドを実行して、テナント証明書の一意のキー コンテナー名を取得します。 従来の RedDog フロントエンド (RDFE) VM (証明書名がWindows Azure Service Management for Extensions) または Azure Resource Manager VM (証明書名がWindows Azure CRP Certificate Generator) のどちらを使用しているかに応じて、$certName定義のいずれかをコメント アウトしてください。

    # Comment out one of the following certificate name definitions.
    $certName = "Windows Azure Service Management for Extensions"  # Classic RDFE VM
    $certName = "Windows Azure CRP Certificate Generator"          # Azure Resource Manager VM
    
    $fileName = (Get-ChildItem Cert:\LocalMachine\My |
                    Where-Object {$_.Subject -eq 'DC=$certName'}
                ).PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
    
  2. icacls コマンドを実行して、ACL のバックアップを作成します。

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /save machinekeys_permissions_before.aclfile /t
    
  3. 次の icacls コマンドを実行して、 MachineKeys アクセス許可を修正します。

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant SYSTEM:(F)
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant Administrators:(RX)
    
  4. icaclsをもう一度実行して、更新された MachineKeys ACL をテキスト ファイルにリダイレクトします。

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t > machinekeys_permissions_after.txt
    
  5. machinekeys_permissions_after.txt ファイルをテキスト エディターで表示し、アクセス許可の変更が期待どおりに表示されることを確認します。

  6. 拡張機能をもう一度試すか、 WaAppAgent.exe または WindowsAzureGuestAgent.exe ツールを実行してゲスト エージェント サービスを再起動してみてください。

この手順が機能しない場合は、C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName フォルダーではなく、C:\ProgramData\Microsoft\Crypto\SystemKeys\* ワイルドカード フォルダーでicacls コマンドをもう一度実行してみてください (手順 2 から 4)。

詳細

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

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