Compartilhar via


Solucionar problemas de computador bare-metal usando o comando az networkcloud baremetalmachine run-data-extract

Pode haver situações em que um usuário precise investigar e resolver problemas com um computador sem sistema operacional local. O Nexus do Operador do Azure fornece um conjunto prescrito de comandos de extração de dados por meio de az networkcloud baremetalmachine run-data-extract. Esses comandos permitem que os usuários obtenham dados de diagnóstico de um computador bare-metal.

O comando produz um arquivo de saída contendo os resultados da extração de dados. Por padrão, os dados são enviados para a conta de armazenamento do Gerente de Cluster. Há também um método em versão prévia onde usuários podem configurar o recurso de Cluster com uma conta de armazenamento e identidade que tenha acesso à conta de armazenamento para receber a saída.

Pré-requisitos

  • Este artigo assume que a interface de linha de comando do Azure e a extensão de interface de linha de comando networkcloud estão instaladas. Para obter mais informações, consulte Como instalar extensões da CLI.
  • O computador sem sistema operacional de destino está ligado e pronto.
  • A sintaxe desses comandos é baseada na versão 0.3.0+ da CLI az networkcloud.
  • Obtenha o nome do grupo de Recursos Gerenciados do Cluster (cluster_MRG) que você criou para o recurso cluster.

Verifique o acesso à conta de armazenamento do Gerente de Cluster

Observação

O método de saída da conta de armazenamento do Gerenciador de Cluster será preterido no futuro, assim que a integração do Cluster com Serviços Confiáveis estiver concluída e a opção de armazenamento gerenciado pelo usuário tiver suporte total.

Se estiver usando o método de armazenamento do Gerenciador de Cluster, verifique se você tem acesso à conta de armazenamento do Gerenciador de Cluster:

  1. No portal do Azure, navegue até a conta de Armazenamento do Gerenciador de Cluster.
  2. Nos detalhes da Conta de armazenamento, selecione Navegador de armazenamento no menu de navegação no lado esquerdo.
  3. Nos detalhes do Navegador de armazenamento, selecione Contêineres de blob.
  4. Se você encontrar um 403 This request is not authorized to perform this operation. ao acessar a conta de armazenamento, as configurações de firewall da conta de armazenamento precisam ser atualizadas para incluir o endereço de IP público.
  5. Solicite acesso criando um tíquete de suporte pelo Portal no recurso Gerenciador de Cluster. Forneça o endereço de IP público que requer acesso.

VERSÃO PRÉVIA: Enviar a saída do comando para uma conta de armazenamento especificada pelo usuário

Importante

Observe que este método de especificar uma conta de armazenamento do usuário para a saída do comando está em versão prévia. Este método deve ser usado apenas com contas de armazenamento do usuário que não tenham o firewall ativado. Se o seu ambiente exigir que o firewall da conta de armazenamento esteja ativado, use o método de saída existente do Gerenciador de Cluster.

Crie e configure recursos de armazenamento

  1. Crie uma conta de armazenamento ou identifique uma conta de armazenamento existente que você deseja usar. Consulte Criar uma conta de armazenamento do Azure.
  2. Crie um contêiner de armazenamento de blobs na conta de armazenamento. Consulte Criar um contêiner.
  3. Atribua a função "Colaborador de Dados de Blob de Armazenamento" a usuários e identidades gerenciadas que precisam de acesso à saída do run-data-extract.
    1. Confira Atribuir uma função do Azure para acesso a dados de blob. A função também deve ser atribuída a uma identidade gerenciada atribuída pelo usuário ou à própria identidade gerenciada atribuída pelo sistema do cluster.
    2. Para obter mais informações sobre identidades gerenciadas, consulte Identidades gerenciadas para recursos do Azure.
    3. Se estiver usando a identidade atribuída pelo sistema do Cluster, essa identidade precisa ser adicionada ao cluster antes que possa receber acesso.
    4. Ao atribuir uma função à identidade atribuída pelo sistema do cluster, certifique-se de selecionar o recurso com o tipo "Cluster (Nexus do Operador)."

Configure o cluster para usar uma identidade gerenciada atribuída pelo usuário para acesso ao armazenamento

Use este comando para criar um cluster com uma conta de armazenamento gerenciada pelo usuário e uma identidade atribuída pelo usuário. Observe que este exemplo é um comando abreviado que apenas realça os campos pertinentes para adicionar o armazenamento gerenciado pelo usuário. Não é o comando completo de criação de cluster.

az networkcloud cluster create --name "<cluster-name>" \
  --resource-group "<cluster-resource-group>" \
  ...
  --mi-user-assigned "<user-assigned-identity-resource-id>" \
  --command-output-settings identity-type="UserAssignedIdentity" \
  identity-resource-id="<user-assigned-identity-resource-id>" \
  container-url="<container-url>" \
  ...
  --subscription "<subscription>"

Use este comando para configurar um cluster existente para uma conta de armazenamento fornecida pelo usuário e uma identidade atribuída pelo usuário. O comando de atualização também pode ser usado para alterar a localização da conta de armazenamento e a identidade, se necessário.

az networkcloud cluster update --name "<cluster-name>" \
  --resource-group "<cluster-resource-group>" \
  --mi-user-assigned "<user-assigned-identity-resource-id>" \
  --command-output-settings identity-type="UserAssignedIdentity" \
  identity-resource-id="<user-assigned-identity-resource-id>" \
  container-url="<container-url>" \
  --subscription "<subscription>"

Configure o cluster para usar uma identidade gerenciada atribuída pelo sistema para acesso ao armazenamento

Use este comando para criar um cluster com uma conta de armazenamento gerenciada pelo usuário e uma identidade atribuída pelo sistema. Observe que este exemplo é um comando abreviado que apenas realça os campos pertinentes para adicionar o armazenamento gerenciado pelo usuário. Não é o comando completo de criação de cluster.

az networkcloud cluster create --name "<cluster-name>" \
  --resource-group "<cluster-resource-group>" \
  ...
  --mi-system-assigned true \
  --command-output-settings identity-type="SystemAssignedIdentity" \
  container-url="<container-url>" \
  ...
  --subscription "<subscription>"

Use este comando para configurar um cluster existente para uma conta de armazenamento fornecida pelo usuário e usar sua própria identidade atribuída pelo sistema. O comando de atualização também pode ser usado para alterar a localização da conta de armazenamento.

az networkcloud cluster update --name "<cluster-name>" \
  --resource-group "<cluster-resource-group>" \
  --mi-system-assigned true \
  --command-output-settings identity-type="SystemAssignedIdentity" \
  container-url="<container-url>" \
  --subscription "<subscription>"

Para alterar o cluster de uma identidade atribuída pelo usuário para uma identidade atribuída pelo sistema, primeiro é necessário limpar as CommandOutputSettings usando o comando na próxima seção e, em seguida, configurá-las usando este comando.

Limpar as CommandOutputSettings do cluster

As CommandOutputSettings podem ser limpas, redirecionando a saída do run-data-extract de volta para o armazenamento do gerenciador de cluster. No entanto, não é recomendável, pois é menos seguro, e essa opção será removida em uma versão futura.

No entanto, as CommandOutputSettings precisam ser limpas se estiver alternando de uma identidade atribuída pelo usuário para uma identidade atribuída pelo sistema.

Use este comando para limpar as CommandOutputSettings:

az rest --method patch \
  --url  "https://management.azure.com/subscriptions/<subscription>/resourceGroups/<cluster-resource-group>/providers/Microsoft.NetworkCloud/clusters/<cluster-name>?api-version=2024-08-01-preview" \
  --body '{"properties": {"commandOutputSettings":null}}'

Exibir a ID principal para a identidade gerenciada

A ID do recurso de identidade pode ser encontrada selecionando "Exibir JSON" no recurso de identidade; a ID está no topo do painel que aparece. A URL do contêiner pode ser encontrada na guia Configurações -> Propriedades do recurso do contêiner.

A CLI também pode ser usada para exibir a identidade e os dados da ID de entidade de segurança associados dentro do cluster.

Exemplo:

az networkcloud cluster show --ids /subscriptions/<Subscription ID>/resourceGroups/<Cluster Resource Group Name>/providers/Microsoft.NetworkCloud/clusters/<Cluster Name>

Exemplo de identidade atribuída pelo sistema:

    "identity": {
        "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
        "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
        "type": "SystemAssigned"
    },

Exemplo de identidade atribuída pelo usuário:

    "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
            "/subscriptions/<subscriptionID>/resourcegroups/<resourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userAssignedIdentityName>": {
                "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
                "principalId": "bbbbbbbb-cccc-dddd-2222-333333333333"
            }
        }
    },

Executar um comando run-data-extract

O comando executar extração de dados executa um ou mais scripts predefinidos para extrair dados de um computador bare-metal.

Aviso

A Microsoft não fornece nem oferece suporte a nenhuma chamada da API do Operator Nexus que espere receber um nome de usuário e/ou senha em texto não criptografado. Observe que todos os valores enviados serão registrados e considerados segredos expostos, os quais devem ser rotacionados e revogados. O método documentado pela Microsoft para usar segredos com segurança é armazená-los em um Azure Key Vault. Se você tiver dúvidas ou preocupações específicas, envie uma solicitação por meio do Portal do Azure.

A lista atual de comandos com suporte são

A sintaxe do comando é:

az networkcloud baremetalmachine run-data-extract --name "<machine-name>"  \
  --resource-group "<cluster_MRG>" \
  --subscription "<subscription>" \
  --commands '[{"arguments":["<arg1>","<arg2>"],"command":"<command1>"}]'  \
  --limit-time-seconds "<timeout>"

Especifique vários comandos usando o formato JSON na opção --commands. Cada command especifica o comando e os argumentos. Para um comando com vários argumentos, forneça como uma lista para o parâmetro arguments. Consulte a Abreviação da CLI do Azure para obter instruções sobre como construir a estrutura --commands.

Esses comandos podem ser de execução prolongada, portanto, a recomendação é definir --limit-time-seconds para pelo menos 600 segundos (10 minutos). A opção Debug ou a execução de vários extratos pode levar mais de 10 minutos.

Na resposta, a operação é executada de forma assíncrona e retorna um código de status HTTP 202. Consulte a seção Exibir a saída para obter informações sobre como acompanhar a conclusão do comando e exibir o arquivo de saída.

Coleta de dados de suporte de hardware

Este exemplo executa o comando hardware-support-data-collection e obtém SysInfo e registra TTYLog no Servidor Dell. O script executa um comando racadm supportassist collect no computador sem sistema operacional designado. O arquivo tar.gz resultante contém as saídas do arquivo de comando de extração compactada em hardware-support-data-<timestamp>.zip.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "cluster_MRG" \
  --subscription "subscription" \
  --commands '[{"arguments":["SysInfo", "TTYLog"],"command":"hardware-support-data-collection"}]' \
  --limit-time-seconds 600

hardware-support-data-collection Saída

====Action Command Output====
Executing hardware-support-data-collection command
Getting following hardware support logs: SysInfo,TTYLog
Job JID_814372800396 is running, waiting for it to complete ...
Job JID_814372800396 Completed.
---------------------------- JOB -------------------------
[Job ID=JID_814372800396]
Job Name=SupportAssist Collection
Status=Completed
Scheduled Start Time=[Not Applicable]
Expiration Time=[Not Applicable]
Actual Start Time=[Thu, 13 Apr 2023 20:54:40]
Actual Completion Time=[Thu, 13 Apr 2023 20:59:51]
Message=[SRV088: The SupportAssist Collection Operation is completed successfully.]
Percent Complete=[100]
----------------------------------------------------------
Deleting Job JID_814372800396
Collection successfully exported to /hostfs/tmp/runcommand/hardware-support-data-2023-04-13T21:00:01.zip

================================
Script execution result can be found in storage account:
https://cm2p9bctvhxnst.blob.core.windows.net/bmm-run-command-output/dd84df50-7b02-4d10-a2be-46782cbf4eef-action-bmmdataextcmd.tar.gz?se=2023-04-14T01%3A00%3A15Zandsig=ZJcsNoBzvOkUNL0IQ3XGtbJSaZxYqmtd%2BM6rmxDFqXE%3Dandsp=randspr=httpsandsr=bandst=2023-04-13T21%3A00%3A15Zandsv=2019-12-12

Exemplo de lista de arquivos de suporte de hardware coletados

Archive:  TSR20240227164024_FM56PK3.pl.zip
   creating: tsr/hardware/
   creating: tsr/hardware/spd/
   creating: tsr/hardware/sysinfo/
   creating: tsr/hardware/sysinfo/inventory/
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_BIOSAttribute.xml
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_Sensor.xml
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_DCIM_View.xml
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_DCIM_SoftwareIdentity.xml
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_Capabilities.xml
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_StatisticalData.xml
   creating: tsr/hardware/sysinfo/lcfiles/
  inflating: tsr/hardware/sysinfo/lcfiles/lclog_0.xml.gz
  inflating: tsr/hardware/sysinfo/lcfiles/curr_lclog.xml
   creating: tsr/hardware/psu/
   creating: tsr/hardware/idracstateinfo/
  inflating: tsr/hardware/idracstateinfo/avc.log
 extracting: tsr/hardware/idracstateinfo/avc.log.persistent.1
[..snip..]

Coletar informações do agente do MDE

Os dados são coletados com o comando mde-agent-information e formatados como JSON para /hostfs/tmp/runcommand/mde-agent-information.json. O arquivo JSON é encontrado no arquivo zip de extração de dados, localizado na conta de armazenamento. O script executa uma sequência de comandos mdatp no computador sem sistema operacional designado.

Este exemplo executa o comando mde-agent-information sem argumentos.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "cluster_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"mde-agent-information"}]' \
  --limit-time-seconds 600

mde-agent-information Saída

====Action Command Output====
Executing mde-agent-information command
MDE agent is running, proceeding with data extract
Getting MDE agent information for bareMetalMachine
Writing to /hostfs/tmp/runcommand

================================
Script execution result can be found in storage account:
 https://cmzhnh6bdsfsdwpbst.blob.core.windows.net/bmm-run-command-output/f5962f18-2228-450b-8cf7-cb8344fdss63b0-action-bmmdataextcmd.tar.gz?se=2023-07-26T19%3A07%3A22Z&sig=X9K3VoNWRFP78OKqFjvYoxubp65BbNTq%2BGnlHclI9Og%3D&sp=r&spr=https&sr=b&st=2023-07-26T15%3A07%3A22Z&sv=2019-12-12

Exemplo de objeto JSON coletado

{
  "diagnosticInformation": {
      "realTimeProtectionStats": $real_time_protection_stats,
      "eventProviderStats": $event_provider_stats
      },
  "mdeDefinitions": $mde_definitions,
  "generalHealth": $general_health,
  "mdeConfiguration": $mde_config,
  "scanList": $scan_list,
  "threatInformation": {
      "list": $threat_info_list,
      "quarantineList": $threat_info_quarantine_list
    }
}

Coletar diagnóstico de suporte do MDE

Os dados coletados do comando mde-support-diagnostics usam a ferramenta do Analisador de Cliente do MDE para agrupar informações de comandos mdatp e arquivos de log relevantes. O tgz arquivo da conta de armazenamento contém um zip arquivo chamado mde-support-diagnostics-<hostname>.zip. O zip deve ser enviado junto a quaisquer solicitações de suporte a fim de garantir que as equipes de suporte possam usar os logs para solucionar problemas e realizar análise de causa raiz, se necessário.

Este exemplo executa o comando mde-support-diagnostics sem argumentos.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "cluster_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"mde-support-diagnostics"}]' \
  --limit-time-seconds 600

mde-support-diagnostics Saída

====Action Command Output====
Executing mde-support-diagnostics command
[2024-01-23 16:07:37.588][INFO] XMDEClientAnalyzer Version: 1.3.2
[2024-01-23 16:07:38.367][INFO] Top Command output: [/tmp/top_output_2024_01_23_16_07_37mel0nue0.txt]
[2024-01-23 16:07:38.367][INFO] Top Command Summary: [/tmp/top_summary_2024_01_23_16_07_370zh7dkqn.txt]
[2024-01-23 16:07:38.367][INFO] Top Command Outliers: [/tmp/top_outlier_2024_01_23_16_07_37aypcfidh.txt]
[2024-01-23 16:07:38.368][INFO] [MDE Diagnostic]
[2024-01-23 16:07:38.368][INFO]   Collecting MDE Diagnostic
[2024-01-23 16:07:38.613][WARNING] mde is not running
[2024-01-23 16:07:41.343][INFO] [SLEEP] [3sec] waiting for agent to create diagnostic package
[2024-01-23 16:07:44.347][INFO] diagnostic package path: /var/opt/microsoft/mdatp/wdavdiag/5b1edef9-3b2a-45c1-a45d-9e7e4b6b869e.zip
[2024-01-23 16:07:44.347][INFO] Successfully created MDE diagnostic zip
[2024-01-23 16:07:44.348][INFO]   Adding mde_diagnostic.zip to report directory
[2024-01-23 16:07:44.348][INFO]   Collecting MDE Health
[...snip...]
================================
Script execution result can be found in storage account:
 https://cmmj627vvrzkst.blob.core.windows.net/bmm-run-command-output/7c5557b9-b6b6-a4a4-97ea-752c38918ded-action-bmmdataextcmd.tar.gz?se=2024-01-23T20%3A11%3A32Z&sig=9h20XlZO87J7fCr0S1234xcyu%2Fl%2BVuaDh1BE0J6Yfl8%3D&sp=r&spr=https&sr=b&st=2024-01-23T16%3A11%3A32Z&sv=2019-12-12

Após baixar o arquivo de resultado da execução, os arquivos de suporte podem ser descompactados para análise.

Exemplo de lista de informações coletadas pelo Analisador de Cliente do MDE

Archive:  mde-support-diagnostics-rack1compute02.zip
  inflating: mde_diagnostic.zip
  inflating: process_information.txt
  inflating: auditd_info.txt
  inflating: auditd_log_analysis.txt
  inflating: auditd_logs.zip
  inflating: ebpf_kernel_config.txt
  inflating: ebpf_enabled_func.txt
  inflating: ebpf_syscalls.zip
  inflating: ebpf_raw_syscalls.zip
  inflating: messagess.zip
  inflating: conflicting_processes_information.txt
[...snip...]

Status do rollup de hardware

Os dados são coletados com o comando hardware-rollup-status e formatados como JSON para /hostfs/tmp/runcommand/rollupStatus.json. O arquivo JSON é encontrado no arquivo zip de extração de dados, localizado na conta de armazenamento. Os dados coletados mostram a integridade dos subsistemas do computador.

Este exemplo executa o comando hardware-rollup-status sem argumentos.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "clusete_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"hardware-rollup-status"}]' \
  --limit-time-seconds 600

hardware-rollup-status Saída

====Action Command Output====
Executing hardware-rollup-status command
Getting rollup status logs for b37dev03a1c002
Writing to /hostfs/tmp/runcommand

================================
Script execution result can be found in storage account:
https://cmkfjft8twwpst.blob.core.windows.net/bmm-run-command-output/20b217b5-ea38-4394-9db1-21a0d392eff0-action-bmmdataextcmd.tar.gz?se=2023-09-19T18%3A47%3A17Z&sig=ZJcsNoBzvOkUNL0IQ3XGtbJSaZxYqmtd%3D&sp=r&spr=https&sr=b&st=2023-09-19T14%3A47%3A17Z&sv=2019-12-12

Exemplo de JSON coletado

{
	"@odata.context" : "/redfish/v1/$metadata#DellRollupStatusCollection.DellRollupStatusCollection",
	"@odata.id" : "/redfish/v1/Systems/System.Embedded.1/Oem/Dell/DellRollupStatus",
	"@odata.type" : "#DellRollupStatusCollection.DellRollupStatusCollection",
	"Description" : "A collection of DellRollupStatus resource",
	"Members" :
	[
		{
			"@odata.context" : "/redfish/v1/$metadata#DellRollupStatus.DellRollupStatus",
			"@odata.id" : "/redfish/v1/Systems/System.Embedded.1/Oem/Dell/DellRollupStatus/iDRAC.Embedded.1_0x23_SubSystem.1_0x23_Current",
			"@odata.type" : "#DellRollupStatus.v1_0_0.DellRollupStatus",
			"CollectionName" : "CurrentRollupStatus",
			"Description" : "Represents the subcomponent roll-up statuses.",
			"Id" : "iDRAC.Embedded.1_0x23_SubSystem.1_0x23_Current",
			"InstanceID" : "iDRAC.Embedded.1#SubSystem.1#Current",
			"Name" : "DellRollupStatus",
			"RollupStatus" : "Ok",
			"SubSystem" : "Current"
		},
		{
			"@odata.context" : "/redfish/v1/$metadata#DellRollupStatus.DellRollupStatus",
			"@odata.id" : "/redfish/v1/Systems/System.Embedded.1/Oem/Dell/DellRollupStatus/iDRAC.Embedded.1_0x23_SubSystem.1_0x23_Voltage",
			"@odata.type" : "#DellRollupStatus.v1_0_0.DellRollupStatus",
			"CollectionName" : "VoltageRollupStatus",
			"Description" : "Represents the subcomponent roll-up statuses.",
			"Id" : "iDRAC.Embedded.1_0x23_SubSystem.1_0x23_Voltage",
			"InstanceID" : "iDRAC.Embedded.1#SubSystem.1#Voltage",
			"Name" : "DellRollupStatus",
			"RollupStatus" : "Ok",
			"SubSystem" : "Voltage"
		},
[..snip..]

Gerar relatório CVE de cluster

Os dados de vulnerabilidade são coletados com o comando cluster-cve-report e formatados como JSON para {year}-{month}-{day}-nexus-cluster-vulnerability-report.json. O arquivo JSON é encontrado no arquivo zip de extração de dados, localizado na conta de armazenamento. Os dados coletados incluem dados de vulnerabilidade por imagem de contêiner no cluster.

Este exemplo executa o comando cluster-cve-report sem argumentos.

Observação

O computador de destino deve ser um nó do plano de controle ou a ação não será executada.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "cluster_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"cluster-cve-report"}]' \
  --limit-time-seconds 600

cluster-cve-report Saída

====Action Command Output====
Nexus cluster vulnerability report saved.


================================
Script execution result can be found in storage account:
https://cmkfjft8twwpst.blob.core.windows.net/bmm-run-command-output/20b217b5-ea38-4394-9db1-21a0d392eff0-action-bmmdataextcmd.tar.gz?se=2023-09-19T18%3A47%3A17Z&sig=ZJcsNoBzvOkUNL0IQ3XGtbJSaZxYqmtd%3D&sp=r&spr=https&sr=b&st=2023-09-19T14%3A47%3A17Z&sv=2019-12-12

Esquema de relatório CVE

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Vulnerability Report",
  "type": "object",
  "properties": {
    "metadata": {
      "type": "object",
      "properties": {
        "dateRetrieved": {
          "type": "string",
          "format": "date-time",
          "description": "The date and time when the data was retrieved."
        },
        "platform": {
          "type": "string",
          "description": "The name of the platform."
        },
        "resource": {
          "type": "string",
          "description": "The name of the resource."
        },
        "runtimeVersion": {
          "type": "string",
          "description": "The version of the runtime."
        },
        "managementVersion": {
          "type": "string",
          "description": "The version of the management software."
        },
        "vulnerabilitySummary": {
          "type": "object",
          "properties": {
            "criticalCount": {
              "type": "integer",
              "description": "Number of critical vulnerabilities."
            },
            "highCount": {
              "type": "integer",
              "description": "Number of high severity vulnerabilities."
            },
            "mediumCount": {
              "type": "integer",
              "description": "Number of medium severity vulnerabilities."
            },
            "lowCount": {
              "type": "integer",
              "description": "Number of low severity vulnerabilities."
            },
            "noneCount": {
              "type": "integer",
              "description": "Number of vulnerabilities with no severity."
            },
            "unknownCount": {
              "type": "integer",
              "description": "Number of vulnerabilities with unknown severity."
            }
          },
          "required": ["criticalCount", "highCount", "mediumCount", "lowCount", "noneCount", "unknownCount"]
        }
      },
      "required": ["dateRetrieved", "platform", "resource", "runtimeVersion", "managementVersion", "vulnerabilitySummary"]
    },
    "containers": {
      "type": "object",
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "namespace": {
              "type": "string",
              "description": "The namespace of the container."
            },
            "digest": {
              "type": "string",
              "description": "The digest of the container image."
            },
            "os": {
              "type": "object",
              "properties": {
                "family": {
                  "type": "string",
                  "description": "The family of the operating system."
                }
              },
              "required": ["family"]
            },
            "summary": {
              "type": "object",
              "properties": {
                "criticalCount": {
                  "type": "integer",
                  "description": "Number of critical vulnerabilities in this container."
                },
                "highCount": {
                  "type": "integer",
                  "description": "Number of high severity vulnerabilities in this container."
                },
                "lowCount": {
                  "type": "integer",
                  "description": "Number of low severity vulnerabilities in this container."
                },
                "mediumCount": {
                  "type": "integer",
                  "description": "Number of medium severity vulnerabilities in this container."
                },
                "noneCount": {
                  "type": "integer",
                  "description": "Number of vulnerabilities with no severity in this container."
                },
                "unknownCount": {
                  "type": "integer",
                  "description": "Number of vulnerabilities with unknown severity in this container."
                }
              },
              "required": ["criticalCount", "highCount", "lowCount", "mediumCount", "noneCount", "unknownCount"]
            },
            "vulnerabilities": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "Title of the vulnerability."
                  },
                  "vulnerabilityID": {
                    "type": "string",
                    "description": "Identifier of the vulnerability."
                  },
                  "fixedVersion": {
                    "type": "string",
                    "description": "The version in which the vulnerability is fixed."
                  },
                  "installedVersion": {
                    "type": "string",
                    "description": "The currently installed version."
                  },
                  "referenceLink": {
                    "type": "string",
                    "format": "uri",
                    "description": "Link to the vulnerability details."
                  },
                  "publishedDate": {
                    "type": "string",
                    "format": "date-time",
                    "description": "The date when the vulnerability was published."
                  },
                  "score": {
                    "type": "number",
                    "description": "The CVSS score of the vulnerability."
                  },
                  "severity": {
                    "type": "string",
                    "description": "The severity level of the vulnerability."
                  },
                  "resource": {
                    "type": "string",
                    "description": "The resource affected by the vulnerability."
                  },
                  "target": {
                    "type": "string",
                    "description": "The target of the vulnerability."
                  },
                  "packageType": {
                    "type": "string",
                    "description": "The type of the package."
                  },
                  "exploitAvailable": {
                    "type": "boolean",
                    "description": "Indicates if an exploit is available for the vulnerability."
                  }
                },
                "required": ["title", "vulnerabilityID", "fixedVersion", "installedVersion", "referenceLink", "publishedDate", "score", "severity", "resource", "target", "packageType", "exploitAvailable"]
              }
            }
          },
          "required": ["namespace", "digest", "os", "summary", "vulnerabilities"]
        }
      }
    }
  },
  "required": ["metadata", "containers"]
}

Detalhes de dados CVE

Os dados de CVE são atualizados por imagem de contêiner a cada 24 horas ou quando há uma alteração no recurso do Kubernetes que faz referência à imagem.

Coletar versões do Helm

Os dados de versão do Helm são coletados com o comando collect-helm-releases e formatados como json para {year}-{month}-{day}-helm-releases.json. O arquivo JSON é encontrado no arquivo zip de extração de dados, localizado na conta de armazenamento. Os dados coletados incluem todas as informações de versão do helm do Cluster, que consiste nos dados padrão retornados ao executar o comando helm list.

Este exemplo executa o comando collect-helm-releases sem argumentos.

Observação

O computador de destino deve ser um nó do plano de controle ou a ação não será executada.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "cluster_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"collect-helm-releases"}]' \
  --limit-time-seconds 600

collect-helm-releases Saída

====Action Command Output====
Helm releases report saved.


================================
Script execution result can be found in storage account:
https://cmcr5xp3mbn7st.blob.core.windows.net/bmm-run-command-output/a29dcbdb-5524-4172-8b55-88e0e5ec93ff-action-bmmdataextcmd.tar.gz?se=2024-10-30T02%3A09%3A54Z&sig=v6cjiIDBP9viEijs%2B%2BwJDrHIAbLEmuiVmCEEDHEi%2FEc%3D&sp=r&spr=https&sr=b&st=2024-10-29T22%3A09%3A54Z&sv=2023-11-03

Esquema de versão do Helm

{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "metadata": {
      "type": "object",
      "properties": {
        "dateRetrieved": {
          "type": "string"
        },
        "platform": {
          "type": "string"
        },
        "resource": {
          "type": "string"
        },
        "clusterId": {
          "type": "string"
        },
        "runtimeVersion": {
          "type": "string"
        },
        "managementVersion": {
          "type": "string"
        }
      },
      "required": [
        "clusterId",
        "dateRetrieved",
        "managementVersion",
        "platform",
        "resource",
        "runtimeVersion"
      ]
    },
    "helmReleases": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "revision": {
            "type": "string"
          },
          "updated": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "chart": {
            "type": "string"
          },
          "app_version": {
            "type": "string"
          }
        },
        "required": [
          "app_version",
          "chart",
          "name",
          "namespace",
          "revision",
          "status",
          "updated"
        ]
      }
    }
  },
  "required": [
    "helmReleases",
    "metadata"
  ]
}

Coletar Saída de Status do Systemctl

O status do serviço é coletado com o comando platform-services-status. A saída está em formato de texto sem formatação e retorna uma visão geral do status dos serviços no host, bem como do systemctl status para cada serviço encontrado.

Este exemplo executa o comando platform-services-status sem argumentos.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "clusete_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"platform-services-status"}]' \
  --limit-time-seconds 600
  --output-directory "/path/to/local/directory"

platform-services-status Saída

====Action Command Output====
UNIT                                                                                          LOAD      ACTIVE   SUB     DESCRIPTION
aods-infra-vf-config.service                                                                  not-found inactive dead    aods-infra-vf-config.service
aods-pnic-config-infra.service                                                                not-found inactive dead    aods-pnic-config-infra.service
aods-pnic-config-workload.service                                                             not-found inactive dead    aods-pnic-config-workload.service
arc-unenroll-file-semaphore.service                                                           loaded    active   exited  Arc-unenrollment upon shutdown service
atop-rotate.service                                                                           loaded    inactive dead    Restart atop daemon to rotate logs
atop.service                                                                                  loaded    active   running Atop advanced performance monitor
atopacct.service                                                                              loaded    active   running Atop process accounting daemon
audit.service                                                                                 loaded    inactive dead    Audit service
auditd.service                                                                                loaded    active   running Security Auditing Service
azurelinux-sysinfo.service                                                                    loaded    inactive dead    Azure Linux Sysinfo Service
blk-availability.service                                                                      loaded    inactive dead    Availability of block devices
[..snip..]


-------
● arc-unenroll-file-semaphore.service - Arc-unenrollment upon shutdown service
     Loaded: loaded (/etc/systemd/system/arc-unenroll-file-semaphore.service; enabled; vendor preset: enabled)
     Active: active (exited) since Tue 2024-11-12 06:33:40 UTC; 11h ago
   Main PID: 11663 (code=exited, status=0/SUCCESS)
        CPU: 5ms

Nov 12 06:33:39 rack1compute01 systemd[1]: Starting Arc-unenrollment upon shutdown service...
Nov 12 06:33:40 rack1compute01 systemd[1]: Finished Arc-unenrollment upon shutdown service.


-------
○ atop-rotate.service - Restart atop daemon to rotate logs
     Loaded: loaded (/usr/lib/systemd/system/atop-rotate.service; static)
     Active: inactive (dead)
TriggeredBy: ● atop-rotate.timer
[..snip..]

Visualizando a saída

O comando fornece um link (se usar o armazenamento do gerente do cluster) ou outro comando (se usar o armazenamento fornecido pelo usuário) para download da saída completa. O arquivo tar.gz também contém as saídas do arquivo de comando de extração compactada. Faça download do arquivo de saída do blob de armazenamento para um diretório local especificando o caminho do diretório no argumento opcional --output-directory.

Aviso

Usar o argumento --output-directory substituirá quaisquer arquivos no diretório local que tenham o mesmo nome que os novos arquivos sendo criados.

Observação

A Conta de Armazenamento pode ser bloqueada, resultando em 403 This request is not authorized to perform this operation. devido às restrições de rede ou de firewall. Consulte as seções armazenamento do gerente do cluster ou armazenamento gerenciado pelo usuário para procedimentos para verificar o acesso.