Solucionar problemas de máquinas bare metal usando o az networkcloud baremetalmachine run-data-extract
comando
Pode haver situações em que um usuário precise investigar e resolver problemas com uma máquina bare metal local. O Azure Operator Nexus fornece um conjunto prescrito de comandos de extração de dados por meio az networkcloud baremetalmachine run-data-extract
do . Esses comandos permitem que os usuários obtenham dados de diagnóstico de uma máquina 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 Gerenciador de Clusters. Há também um método de visualização onde os usuários podem configurar o recurso de cluster com uma conta de armazenamento e identidade que tem acesso à conta de armazenamento para receber a saída.
Pré-requisitos
- Este artigo pressupõe que a interface de linha de comando do Azure e a extensão de interface de linha de
networkcloud
comando estejam instaladas. Para obter mais informações, consulte Como instalar extensões CLI. - A máquina bare metal alvo está ligada e pronta.
- A sintaxe para esses comandos é baseada na versão 0.3.0+ da
az networkcloud
CLI. - Obtenha o nome do grupo de Recursos Gerenciados por Cluster (cluster_MRG) que você criou para o recurso de Cluster.
Enviar saída de comando para uma conta de armazenamento especificada pelo usuário
Criar e configurar recursos de armazenamento
- Crie uma conta de armazenamento ou identifique uma conta de armazenamento existente que você deseja usar. Consulte Criar uma conta de armazenamento do Azure.
- Crie um contêiner de armazenamento de blob na conta de armazenamento. Consulte Criar um contêiner.
- Atribua a função "Storage Blob Data Contributor" a usuários e identidades gerenciadas que precisam de acesso à saída run-data-extract.
- Veja Atribuir uma função do Azure para acesso aos dados de blobs. 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 ao sistema do cluster.
- Para obter mais informações sobre identidades gerenciadas, consulte Identidades gerenciadas para recursos do Azure.
- Se estiver usando a identidade atribuída ao sistema do Cluster, a identidade atribuída ao sistema precisará ser adicionada ao cluster antes que possa receber acesso.
- Ao atribuir uma função à identidade atribuída ao sistema do cluster, certifique-se de selecionar o recurso com o tipo "Cluster (Operator Nexus)".
Configurar 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 gerenciado pelo usuário e identidade atribuída pelo usuário. Observe que este exemplo é um comando abreviado que apenas destaca os campos pertinentes para adicionar o armazenamento gerenciado pelo usuário. Não é o comando full cluster create.
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 identidade atribuída pelo usuário. O comando update também pode ser usado para alterar o local e a identidade da conta de armazenamento, 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>"
Configurar o cluster para usar uma identidade gerenciada atribuída ao sistema para acesso ao armazenamento
Use este comando para criar um cluster com uma conta de armazenamento gerenciado pelo usuário e uma identidade atribuída ao sistema. Observe que este exemplo é um comando abreviado que apenas destaca os campos pertinentes para adicionar o armazenamento gerenciado pelo usuário. Não é o comando full cluster create.
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 para usar sua própria identidade atribuída ao sistema. O comando update também pode ser usado para alterar o local 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, o CommandOutputSettings deve primeiro ser limpo usando o comando na próxima seção e, em seguida, definido usando esse comando.
Limpe CommandOutputSettings do cluster
O CommandOutputSettings pode ser limpo, direcionando a saída run-data-extract de volta para o armazenamento do gerenciador de cluster. No entanto, não é recomendado, pois é menos seguro, e a opção será removida em uma versão futura.
No entanto, o CommandOutputSettings precisa ser limpo se mudar de uma identidade atribuída pelo usuário para uma identidade atribuída pelo sistema.
Use este comando para limpar o 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 o ID principal da identidade gerenciada
O ID do recurso de identidade pode ser encontrado selecionando "Visualização JSON" no recurso de identidade; o ID está na parte superior do painel que aparece. A URL do contêiner pode ser encontrada na guia Configurações -> Propriedades do recurso de contêiner.
A CLI também pode ser usada para exibir a identidade e os dados de ID principal 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 ao 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"
}
}
},
MÉTODO DEPRECATED: Verificar o acesso à conta de armazenamento do Cluster Manager
Importante
A conta de armazenamento do Cluster Manager deve ser removida o mais tardar em abril de 2025. Se você estiver usando esse método hoje para saída de comando, considere converter para usar uma conta de armazenamento fornecida pelo usuário.
Se estiver usando o método de armazenamento do Gerenciador de Clusters, verifique se você tem acesso à conta de armazenamento do Gerenciador de Clusters:
- No portal do Azure, navegue até a conta de Armazenamento do Gerenciador de Clusters.
- Nos detalhes da conta de armazenamento, selecione Navegador de armazenamento no menu de navegação do lado esquerdo.
- Nos detalhes do navegador de armazenamento, selecione em Contêineres de Blob.
- 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 IP público. - Solicite acesso criando um tíquete de suporte via Portal no recurso Gerenciador de Cluster. Forneça o endereço IP público que requer acesso.
Executar um comando run-data-extract
O comando run data extract executa um ou mais scripts predefinidos para extrair dados de uma máquina bare metal.
Aviso
A Microsoft não fornece nem oferece suporte a chamadas de API do Operator Nexus que esperam que o nome de usuário e/ou senha de texto simples sejam fornecidos. Observe que todos os valores enviados são registrados e são considerados segredos expostos, que devem ser girados e revogados. O método documentado da Microsoft para usar segredos com segurança é armazená-los em um Cofre de Chaves do Azure. 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 suportados são
Coleção SupportAssist/TSR para solução de problemas da Dell
Nome do comando:hardware-support-data-collection
Argumentos: Tipo de logs solicitados-
SysInfo
- Sistema de Informação -
TTYLog
- Armazenamento de dados TTYLog -
Debug
- depurar logs
-
Coletar informações do agente do Microsoft Defender for Endpoints (MDE)
Nome do comando:mde-agent-information
Argumentos: NenhumColetar logs de suporte de diagnóstico MDE
Nome do comando:mde-support-diagnostics
Argumentos: NenhumColetar o status do pacote cumulativo de hardware da Dell
Nome do comando:hardware-rollup-status
Argumentos: NenhumGerar relatório CVE de cluster
Nome do comando:cluster-cve-report
Argumentos: NenhumColete lançamentos do Helm
Nome do comando:collect-helm-releases
Argumentos: NenhumColetar
systemctl status
saída
Nome do comando:platform-services-status
Argumentos: Nenhum
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 --commands
opção. Cada command
um especifica comandos e argumentos. Para um comando com vários argumentos, forneça como uma lista para o arguments
parâmetro. Consulte Taquigrafia da CLI do Azure para obter instruções sobre como construir a --commands
estrutura.
Esses comandos podem ser de longa execução, então a recomendação é definir --limit-time-seconds
para pelo menos 600 segundos (10 minutos). A Debug
opção ou a execução de várias extrações pode levar mais de 10 minutos.
Na resposta, a operação é executada de forma assíncrona e retorna um código de status HTTP de 202. Consulte a seção Exibindo a saída para obter detalhes sobre como acompanhar a conclusão do comando e exibir o arquivo de saída.
Recolha de Dados de Suporte de Hardware
Este exemplo executa o hardware-support-data-collection
comando e obtém SysInfo
e TTYLog
registra no servidor Dell. O script executa um racadm supportassist collect
comando na máquina bare metal designada. O arquivo tar.gz resultante contém as saídas do arquivo de comando de extração compactado 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
Realização
====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 MDE
Os dados são coletados com o mde-agent-information
comando 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 mdatp
comandos na máquina bare metal designada.
Este exemplo executa o mde-agent-information
comando 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
Realização
====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ósticos de suporte MDE
Os dados coletados do mde-support-diagnostics
comando usam a ferramenta MDE Client Analyzer para agrupar informações de comandos e arquivos de mdatp
log relevantes. O arquivo de conta tgz
de armazenamento contém um zip
arquivo chamado mde-support-diagnostics-<hostname>.zip
. O zip
deve ser enviado junto com quaisquer solicitações de suporte para garantir que as equipes de suporte possam usar os logs para solução de problemas e análise de causa raiz, se necessário.
Este exemplo executa o mde-support-diagnostics
comando 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
Realização
====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
Depois de 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 MDE Client Analyzer
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 pacote cumulativo de hardware
Os dados são coletados com o hardware-rollup-status
comando 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 da máquina.
Este exemplo executa o hardware-rollup-status
comando 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
Realização
====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 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 cluster-cve-report
comando 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 cluster-cve-report
comando sem argumentos.
Nota
A máquina de destino deve ser um nó do plano de controle ou a ação não é 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
Realização
====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 dos dados CVE
Os dados CVE são atualizados por imagem de contêiner a cada 24 horas ou quando há uma alteração no recurso do Kubernetes fazendo referência à imagem.
Colete lançamentos do Helm
Os dados de liberação do leme são coletados com o collect-helm-releases
comando 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 liberação de leme do Cluster, que consiste nos dados padrão retornados ao executar o comando helm list
.
Este exemplo executa o collect-helm-releases
comando sem argumentos.
Nota
A máquina de destino deve ser um nó do plano de controle ou a ação não é 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
Realização
====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 liberação do leme
{
"$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 platform-services-status
comando. A saída está em formato de texto sem formatação e retorna uma visão geral do status dos serviços no host e para systemctl status
cada serviço encontrado.
Este exemplo executa o platform-services-status
comando 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
Realização
====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 estiver usando o armazenamento do gerenciador de cluster) ou outro comando (se estiver usando o armazenamento fornecido pelo usuário) para baixar a saída completa. O arquivo tar.gz também contém as saídas do arquivo de comando de extração compactada. Baixe o arquivo de saída do blob de armazenamento para um diretório local especificando o caminho do diretório no argumento --output-directory
opcional .
Aviso
O uso do --output-directory
argumento substitui todos os arquivos no diretório local que têm o mesmo nome dos novos arquivos que estão sendo criados.
Nota
A conta de armazenamento pode ser bloqueada, resultando em 403 This request is not authorized to perform this operation.
devido a restrições de rede ou firewall. Consulte as seções Armazenamento do gerenciador de cluster ou Armazenamento gerenciado pelo usuário para obter os procedimentos para verificar o acesso.