Compartilhar via


Solucionar problemas usando a ferramenta de diagnóstico de malha protegida

Este artigo descreve o uso da Ferramenta de Diagnóstico de Malha Protegida para identificar e corrigir falhas comuns na implantação, configuração e operação contínua da infraestrutura de malha protegida. Isso inclui o HGS (Serviço Guardião de Host), todos os hosts protegidos e serviços de suporte, como o DNS e o Active Directory.

Aplica-se a: Windows Server 2022, Windows Server 2019, Windows Server 2016

A ferramenta de diagnóstico pode ser usada para executar uma primeira passagem na triagem de uma malha protegida com falha, fornecendo aos administradores um ponto de partida para resolver interrupções e identificar ativos configurados incorretamente. A ferramenta não substitui uma boa compreensão da operação de uma malha protegida e serve apenas para verificar rapidamente os problemas mais comuns encontrados durante as operações diárias.

A documentação completa dos cmdlets usados neste artigo pode ser encontrada na referência do módulo HgsDiagnostics.

Observação

Quando a ferramenta de diagnóstico Malha Protegida (Get-HgsTrace -RunDiagnostics) for executada, o status incorreto poderá ser retornado informando que a configuração HTTPS foi rompida, quando, na verdade, não foi rompida ou não está sendo utilizada. Esse erro pode ser retornado independentemente do modo de atestado do HGS. Estas são as causas possíveis:

  • O HTTPS foi, de fato, configurado incorretamente/rompido
  • Você está usando o atestado confiável do administrador e a relação de confiança está quebrada. Isso independentemente de o HTTPS estar configurado corretamente, incorretamente ou não estar em uso. Observe que o diagnóstico só retornará esse status incorreto quando um host Hyper-V for direcionado. Se o diagnóstico estiver direcionando o Serviço Guardião de Host, o status retornado será correto.

Início Rápido

Você pode diagnosticar um host protegido ou um nó HGS chamando o seguinte em uma sessão do Windows PowerShell com privilégios de administrador local:

Get-HgsTrace -RunDiagnostics -Detailed

Isso detectará automaticamente a função do host atual e diagnosticará quaisquer problemas relevantes que possam ser detectados automaticamente. Todos os resultados gerados durante esse processo são exibidos devido à presença do comutador -Detailed.

O restante deste tópico fornecerá um passo a passo detalhado sobre o uso avançado de Get-HgsTrace para realizar tarefas como diagnosticar vários hosts de uma só vez e detectar configurações incorretas complexas de nós cruzados.

Visão geral do diagnóstico

Os diagnósticos de malha protegida estão disponíveis em qualquer host com ferramentas e recursos relacionados a máquinas virtuais blindadas instalados, incluindo hosts que executam o Server Core. Atualmente, os diagnósticos incluem os seguintes recursos/pacotes:

  • Função Serviço Guardião de Host
  • Suporte do Hyper-V ao Guardião de Host
  • Ferramentas de Blindagem de VM para Gerenciamento de Malha
  • Ferramentas de Administração de Servidor Remoto (RSAT)

Isso significa que as ferramentas de diagnóstico estarão disponíveis em todos os hosts protegidos, nós HGS, em determinados servidores de gerenciamento de malha e em qualquer estação de trabalho Windows 10 com RSAT instalado. O diagnóstico pode ser invocado por qualquer um dos computadores acima com a intenção de diagnosticar qualquer host protegido ou nó HGS em uma malha protegida. Usando destinos de rastreamento remoto, o diagnóstico pode localizar e conectar a hosts que não sejam do computador que executa o diagnóstico.

Cada host direcionado pelo diagnóstico é chamado de "destino de rastreamento". Os destinos de rastreamento são identificados por seus nomes de host e funções. As funções descrevem a função que um determinado destino de rastreamento executa em uma malha protegida. Atualmente, os destinos de rastreamento dão suporte às funções HostGuardianService e GuardedHost. Observe que é possível que um host ocupe várias funções ao mesmo tempo e isso também é compatível com diagnósticos, no entanto, isso não deve ser feito em ambientes de produção. Os hosts HGS e Hyper-V devem ser mantidos separados e distintos o tempo todo.

Os administradores podem iniciar qualquer tarefa de diagnóstico executando Get-HgsTrace. Esse cmdlet executa duas funções distintas com base nas opções fornecidas no runtime: coleta de rastreamento e diagnóstico. Ambos combinados compõem a totalidade da Ferramenta de Diagnóstico de Malha Protegida. Embora não seja explicitamente necessário, o diagnóstico mais útil requer rastreamentos que só podem ser coletados com credenciais de administrador no destino de rastreamento. Se privilégios insuficientes forem mantidos pelo usuário que executa a coleta de rastreamento, os rastreamentos que exigem elevação falharão enquanto todos os outros serão aprovados. Isso permite o diagnóstico parcial caso um operador com poucos privilégios esteja realizando a triagem.

Coleta de rastreamento

Por padrão, Get-HgsTrace só coletará rastreamentos e os salvará em uma pasta temporária. Os rastreamentos assumem a forma de uma pasta, nomeada após o host de destino, preenchida com arquivos formatados especialmente que descrevem como o host é configurado. Os rastreamentos também contêm metadados que descrevem como o diagnóstico foi invocado para coletar os rastreamentos. Esses dados são usados pelo diagnóstico para reidratar informações sobre o host ao executar o diagnóstico manual.

Se necessário, os rastreamentos podem ser examinados manualmente. Todos os formatos são legíveis por humanos (XML) ou podem ser prontamente inspecionados usando ferramentas padrão (por exemplo, certificados X509 e as Extensões do Windows Crypto Shell). Observe, no entanto, que os rastreamentos não são projetados para diagnóstico manual e é sempre mais eficaz processar os rastreamentos com os recursos de diagnóstico do Get-HgsTrace.

Os resultados da execução da coleta de rastreamento não fazem nenhuma indicação quanto à integridade de um determinado host. Eles simplesmente indicam que os rastreamentos foram coletados com êxito. É necessário usar os recursos de diagnóstico de Get-HgsTrace para determinar se os rastreamentos indicam um ambiente com falha.

Usando o parâmetro -Diagnostic, você pode restringir a coleta de rastreamento somente aos rastreamentos necessários para operar o diagnóstico especificado. Isso reduz a quantidade de dados coletados, bem como as permissões necessárias para invocar diagnósticos.

Diagnóstico

Os rastreamentos coletados podem ser diagnosticados pela localização Get-HgsTrace fornecida dos rastreamentos por meio do parâmetro -Path e pela especificação do comutador -RunDiagnostics. Além disso, Get-HgsTrace pode executar a coleta e o diagnóstico em uma única passagem fornecendo o comutador -RunDiagnostics e uma lista de destinos de rastreamento. Se nenhum destino de rastreamento for fornecido, o computador atual será usado como um destino implícito, com sua função inferida pela inspeção dos módulos do Windows PowerShell instalados.

O diagnóstico fornecerá resultados em um formato hierárquico mostrando quais destinos de rastreamento, conjuntos de diagnóstico e diagnósticos individuais são responsáveis por uma falha específica. As falhas incluem recomendações de correção e resolução se uma determinação puder ser feita sobre qual ação deve ser tomada em seguida. Por padrão, os resultados de passagem e irrelevantes são ocultados. Para ver tudo o que foi testado pelo diagnóstico, especifique a opção -Detailed. Isso faz com que todos os resultados apareçam independentemente de seu status.

É possível restringir o conjunto de diagnósticos executados usando o -Diagnostic parâmetro. Isso permite que você especifique quais classes de diagnóstico devem ser executadas nos destinos de rastreamento e suprimindo todas as outras. Exemplos de classes de diagnóstico disponíveis incluem rede, melhores práticas e hardware do cliente. Consulte a documentação do cmdlet para encontrar uma lista atualizada dos diagnósticos disponíveis.

Aviso

Os diagnósticos não substituem um forte pipeline de monitoramento e resposta a incidentes. Há um pacote do System Center Operations Manager disponível para monitorar malhas protegidas, incluindo vários canais de log de eventos que podem ser monitorados para detectar problemas antecipadamente. Em seguida, o diagnóstico pode ser usado para fazer a triagem rápida dessas falhas e estabelecer uma medida de ação.

Diagnóstico de direcionamento

Get-HgsTrace opera em relação a destinos de rastreamento. Um destino de rastreamento é um objeto que corresponde a um nó HGS ou a um host protegido dentro de uma malha protegida. Ele pode ser considerado como uma extensão de um PSSession, que inclui informações exigidas apenas por diagnósticos, como a função do host na malha. Os destinos podem ser gerados implicitamente (por exemplo, diagnóstico local ou manual) ou explicitamente com o New-HgsTraceTarget cmdlet.

Diagnóstico local

Por padrão, Get-HgsTrace terá como destino o localhost (ou seja, onde o cmdlet está sendo invocado). Isso é chamado de destino local implícito. O destino local implícito só é usado quando nenhum destino é fornecido no parâmetro -Target e nenhum rastreamento pré-existente é encontrado no -Path.

O destino local implícito usa inferência de função para determinar qual função o host atual desempenha na malha protegida. Isso se baseia nos módulos do Windows PowerShell instalados, que correspondem aproximadamente aos recursos instalados no sistema. A presença do HgsServer módulo faz com que o destino de rastreamento assuma a função HostGuardianService e a presença do módulo faz com que o destino de HgsClient rastreamento assuma a função GuardedHost. É possível que um determinado host tenha ambos os módulos presentes, caso em que será tratado como a HostGuardianService e um GuardedHost.

Portanto, a invocação padrão de diagnóstico para coletar rastreamentos localmente:

Get-HgsTrace

Isso equivale ao seguinte:

New-HgsTraceTarget -Local | Get-HgsTrace

Dica

Get-HgsTrace pode aceitar destinos por meio do pipeline ou diretamente por meio do parâmetro -Target. Operacionalmente, não há diferença entre os dois.

Diagnóstico remoto usando alvos de rastreamento

É possível diagnosticar remotamente um host gerando destinos de rastreamento com informações de conexão remota. Tudo o que é necessário é o nome do host e um conjunto de credenciais capazes de conectar usando a comunicação remota do Windows PowerShell.

$server = New-HgsTraceTarget -HostName "hgs-01.secure.contoso.com" -Role HostGuardianService -Credential (Enter-Credential)
Get-HgsTrace -RunDiagnostics -Target $server

Este exemplo gera um prompt para coletar as credenciais do usuário remoto e, em seguida, o diagnóstico é executado usando o host remoto em hgs-01.secure.contoso.com para concluir a coleta de rastreamento. Os rastreamentos resultantes são baixados para o localhost e, em seguida, diagnosticados. Os resultados do diagnóstico são apresentados da mesma forma que executando o diagnóstico local. Da mesma forma, não é necessário especificar uma função, pois ela pode ser inferida com base nos módulos do Windows PowerShell instalados no sistema remoto.

O diagnóstico remoto utiliza a comunicação remota do Windows PowerShell para todos os acessos ao host remoto. Portanto, é um pré-requisito que o destino de rastreamento tenha a comunicação remota do Windows PowerShell habilitada (consulte Habilitar PSRemoting) e que o host local esteja configurado corretamente para iniciar conexões com o destino.

Observação

Na maioria dos casos, só é necessário que o localhost faça parte da mesma floresta do Active Directory e que um nome de host DNS válido seja usado. Se o ambiente utilizar um modelo de federação mais complicado ou se você quiser usar endereços IP diretos para conectividade, talvez seja necessário realizar configurações adicionais, como definir os hosts confiáveis do WinRM.

Você pode verificar se um destino de rastreamento foi instanciado corretamente e configurado para aceitar conexões usando o cmdlet Test-HgsTraceTarget:

$server = New-HgsTraceTarget -HostName "hgs-01.secure.contoso.com" -Role HostGuardianService -Credential (Enter-Credential)
$server | Test-HgsTraceTarget

Esse cmdlet retorna $True se e somente se Get-HgsTrace for capaz de estabelecer uma sessão de diagnóstico remoto com o destino de rastreamento. Em caso de falha, esse cmdlet retorna informações de status relevantes para solução de problemas adicionais da conexão remota do Windows PowerShell.

Credenciais implícitas

Ao executar o diagnóstico remoto de um usuário com privilégios suficientes para se conectar remotamente ao destino de rastreamento, não é necessário fornecer credenciais para New-HgsTraceTarget. O cmdlet Get-HgsTrace reutilizará automaticamente as credenciais do usuário que invocou o cmdlet ao abrir uma conexão.

Aviso

Algumas restrições se aplicam reutilizando credenciais, especialmente ao executar o que é conhecido como um "segundo salto". Isso ocorre ao tentar reutilizar credenciais de dentro de uma sessão remota para outro computador. É necessário configurar o CredSSP para dar suporte a esse cenário, mas isso está fora do escopo do gerenciamento de malha protegida e da solução de problemas.

Usando a JEA (Administração Just Enough) e o diagnóstico do Windows PowerShell

O diagnóstico remoto dá suporte ao uso de pontos de extremidade do Windows PowerShell restritos a JEA. Por padrão, os destinos de rastreamento remoto se conectarão usando o ponto de extremidade microsoft.powershell padrão. Se o destino de rastreamento tiver a HostGuardianService função, ele também tentará usar o ponto de extremidade, que é configurado quando o microsoft.windows.hgs HGS é instalado.

Se você quiser usar um ponto de extremidade personalizado, especifique o nome da configuração da sessão ao construir o destino de rastreamento usando o parâmetro -PSSessionConfigurationName, como abaixo:

New-HgsTraceTarget -HostName "hgs-01.secure.contoso.com" -Role HostGuardianService -Credential (Enter-Credential) -PSSessionConfigurationName "microsoft.windows.hgs"

Diagnosticando vários hosts

Você pode passar vários destinos de rastreamento para Get-HgsTrace de uma só vez. Isso inclui uma combinação de destinos locais e remotos. Cada alvo é rastreado por sua vez e, em seguida, os rastreamentos de cada alvo serão diagnosticados simultaneamente. A ferramenta de diagnóstico pode usar o conhecimento aprimorado de sua implantação para identificar configurações incorretas complexas entre nós que, de outra forma, não seriam detectáveis. Usar esse recurso requer apenas o fornecimento de rastreamentos de vários hosts simultaneamente (no caso de diagnóstico manual) ou direcionando vários hosts ao chamar Get-HgsTrace (no caso de diagnóstico remoto).

Aqui está um exemplo de como usar o diagnóstico remoto para fazer a triagem de uma malha composta por dois nós HGS e dois hosts protegidos, em que um dos hosts protegidos está sendo usado para iniciar Get-HgsTrace.

$hgs01 = New-HgsTraceTarget -HostName "hgs-01.secure.contoso.com" -Credential (Enter-Credential)
$hgs02 = New-HgsTraceTarget -HostName "hgs-02.secure.contoso.com" -Credential (Enter-Credential)
$gh01 = New-HgsTraceTarget -Local
$gh02 = New-HgsTraceTarget -HostName "guardedhost-02.contoso.com"
Get-HgsTrace -Target $hgs01,$hgs02,$gh01,$gh02 -RunDiagnostics

Observação

Você não precisa diagnosticar toda a malha protegida ao diagnosticar vários nós. Em muitos casos, é suficiente incluir todos os nós que podem estar envolvidos em uma determinada condição de falha. Geralmente, esse é um subconjunto dos hosts protegidos e alguns nós do cluster HGS.

Diagnóstico manual usando rastreamentos salvos

Às vezes, você pode querer executar novamente o diagnóstico sem coletar rastreamentos novamente ou pode não ter as credenciais necessárias para diagnosticar remotamente todos os hosts em sua malha simultaneamente. O diagnóstico manual é um mecanismo pelo qual você ainda pode realizar uma triagem de malha inteira usando Get-HgsTrace, mas sem usar a coleção de rastreamento remoto.

Antes de executar o diagnóstico manual, você precisará garantir que os administradores de cada host na malha que será triada estejam prontos e dispostos a executar comandos em seu nome. A saída de rastreamento de diagnóstico não expõe nenhuma informação que geralmente é vista como confidencial, no entanto, cabe ao usuário determinar se é seguro expor essas informações a outras pessoas.

Observação

Os rastreamentos não são anônimos e revelam a configuração de rede, as configurações de PKI e outras configurações que às vezes são consideradas informações privadas. Portanto, os rastreamentos só devem ser transmitidos para entidades confiáveis dentro de uma organização e nunca postados publicamente.

As etapas para executar um diagnóstico manual são as seguintes:

  1. Solicite que cada administrador de host execute Get-HgsTrace especificando um -Path conhecido e a lista de diagnósticos que você pretende executar nos rastreamentos resultantes. Por exemplo:

    Get-HgsTrace -Path C:\Traces -Diagnostic Networking,BestPractices
    
  2. Solicite que cada administrador de host empacote a pasta de rastreamentos resultante e envie-a para você. Esse processo pode ser conduzido por email, por meio de compartilhamentos de arquivos ou de qualquer outro mecanismo com base nas políticas e procedimentos operacionais estabelecidos pela sua organização.

  3. Mescle todos os rastreamentos recebidos em uma única pasta, sem outros conteúdos ou pastas.

    Por exemplo, suponha que os administradores tenham enviado rastreamentos coletados de quatro computadores chamados HGS-01, HGS-02, RR1N2608-12 e RR1N2608-13. Cada administrador teria enviado uma pasta com o mesmo nome. Você montaria uma estrutura de diretório com a seguinte aparência:

    FabricTraces
    |- HGS-01
    |  |- TargetMetadata.xml
    |  |- Metadata.xml
    |  |- [any other trace files for this host]
    |- HGS-02
    |  |- [...]
    |- RR1N2608-12
    |  |- [...]
    |- RR1N2608-13
       |- [..]
    
  4. Execute o diagnóstico, fornecendo o caminho para a pasta de rastreamento montada no parâmetro -Path e especificando o comutador -RunDiagnostics, bem como os diagnósticos para os quais você pediu aos administradores que coletassem rastreamentos. O diagnóstico pressupõe que não pode acessar os hosts encontrados dentro do caminho e, portanto, tentará usar apenas os rastreamentos pré-coletados. Se algum rastreamento estiver ausente ou danificado, o diagnóstico falhará apenas nos testes afetados e continuará normalmente. Por exemplo:

    Get-HgsTrace -RunDiagnostics -Diagnostic Networking,BestPractices -Path ".\FabricTraces"
    

Misturando rastreamentos salvos com destinos adicionais

Em alguns casos, você pode ter um conjunto de rastreamentos pré-coletados que deseja aumentar com rastreamentos de host adicionais. É possível misturar rastreamentos pré-coletados com alvos adicionais que serão rastreados e diagnosticados em uma única chamada de diagnóstico.

Seguindo as instruções para coletar e montar uma pasta de rastreamento especificada acima, chame Get-HgsTrace com destinos de rastreamento adicionais não encontrados na pasta de rastreamento pré-coletada:

$hgs03 = New-HgsTraceTarget -HostName "hgs-03.secure.contoso.com" -Credential (Enter-Credential)
Get-HgsTrace -RunDiagnostics -Target $hgs03 -Path .\FabricTraces

O cmdlet de diagnóstico identificará todos os hosts pré-coletados e o host adicional que ainda precisa ser rastreado e executará o rastreamento necessário. A soma de todos os vestígios pré-coletados e recém-coletados será então diagnosticada. A pasta de rastreamento resultante conterá ambos os rastreamentos antigos e novos.

Problemas conhecidos

O módulo de diagnóstico de malha protegida tem limitações conhecidas quando executado no Windows Server 2019 ou no Windows 10 versão 1809 e versões mais recentes do sistema operacional. O uso dos recursos a seguir pode causar resultados incorretos:

  • Atestado de chave de host
  • Configuração do HGS somente atestado (para cenários do Always Encrypted do SQL Server)
  • Uso de artefatos de política v1 em um servidor HGS em que o padrão da política de atestado é v2

Uma falha ao Get-HgsTrace usar esses recursos não indica necessariamente que o servidor HGS ou o host protegido está configurado incorretamente. Use outras ferramentas de diagnóstico, como Get-HgsClientConfiguration, em um host protegido para testar se um host passou pelo atestado.