次の方法で共有


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

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

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

ゲスト ログを表示する

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

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

注:

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

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

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

現象

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

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

    注:

    例外の 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.
    
  • "証明書を取得できません" というエラー メッセージ。

  • CryptographicExceptionVM 診断設定の例外。"エンベロープ データ メッセージに指定された受信者が含まれていません" というメッセージが添付されています。次のテキストでは、この例外の例について説明します。

    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 コンポーネントへの依存関係を排除することでした。 拡張機能、カスタム リソース プロバイダー (CRP)、ゲスト エージェントがまとめて動作する必要があります。 軽微なバグにより、拡張機能証明書の問題に反映されるセカンダリの問題が発生しました。

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

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

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

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

    注:

    Windows Azure CRP 証明書ジェネレーター証明書が必要な場合、VM は証明書が見つからない場合に証明書を再作成します。

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

    • Get-AzureRmVM コマンドと Update-AzureRmVM コマンドを含む次の PowerShell スクリプトを実行します。

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

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

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

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

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

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

    # 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\SystemKeys\* ワイルドカード フォルダーの代わりに C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName フォルダーでコマンドをもう一度実行icaclsできます (手順 2 から 4)。

詳細

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

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