Solución de problemas de máquina sin sistema operativo mediante el comando az networkcloud baremetalmachine run-data-extract
Puede que haya situaciones en las que un usuario necesite investigar y resolver problemas con una máquina sin sistema operativo local. Azure Operator Nexus proporciona un conjunto preestablecido de comandos de extracción de datos a través de az networkcloud baremetalmachine run-data-extract
. Estos comandos permiten a los usuarios obtener datos de diagnóstico de una máquina sin sistema operativo.
El comando genera un archivo de salida que contiene los resultados de la extracción de datos. De forma predeterminada, los datos se envían a la cuenta de almacenamiento del Administrador de clústeres. También hay un método de vista previa en el que los usuarios pueden configurar el recurso de clúster con una cuenta de almacenamiento e identidad que tenga acceso a la cuenta de almacenamiento para recibir la salida.
Requisitos previos
- En este artículo se supone que se instala la interfaz de la línea de comandos de Azure y la extensión de la interfaz de la línea de comandos
networkcloud
. Para obtener más información, consulte Cómo instalar extensiones de la CLI. - La máquina sin sistema operativo de destino está activada y lista.
- La sintaxis de estos comandos se basa en la versión 0.3.0 o versiones posteriores de la CLI de
az networkcloud
. - Obtenga el nombre del grupo de recursos administrados del clúster (cluster_MRG) que ha creado para el recurso de clúster.
Envío de la salida del comando a una cuenta de almacenamiento especificada por el usuario
Crear y configurar recursos de almacenamiento
- Cree una cuenta de almacenamiento o identifique una cuenta de almacenamiento existente que quiera usar. Consulte Crear una cuenta de almacenamiento de Azure.
- Cree un contenedor de Blob Storage en la cuenta de almacenamiento. Consulte Crear un contenedor.
- Asigne el rol "Colaborador de datos de blobs de almacenamiento" a los usuarios e identidades administradas que necesitan acceso a la salida run-data-extract.
- Consulte Asignación de un rol de Azure para acceder a datos de blobs. El rol también debe asignarse a una identidad administrada asignada por el usuario o a la propia identidad administrada asignada por el sistema del clúster.
- Para más información sobre las identidades administradas, consulte Identidades administradas para recursos de Azure.
- Si usa la identidad asignada por el sistema del clúster, la identidad asignada por el sistema debe agregarse al clúster antes de que se pueda conceder acceso.
- Al asignar un rol a la identidad asignada por el sistema del clúster, asegúrese de seleccionar el recurso con el tipo "Cluster (Operator Nexus)".
Configurar el clúster para usar una identidad administrada asignada por el usuario para el acceso al almacenamiento
Use este comando para crear un clúster con una cuenta de almacenamiento administrada por el usuario y una identidad asignada por el usuario. Tenga en cuenta que este ejemplo es un comando abreviado que simplemente resalta los campos pertinentes para agregar el almacenamiento administrado por el usuario. No es el comando de creación de clúster completo.
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 un clúster existente para una cuenta de almacenamiento proporcionada por el usuario y una identidad asignada por el usuario. El comando update también se puede usar para cambiar la ubicación y la identidad de la cuenta de almacenamiento si es necesario.
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>"
Configuración del clúster para usar una identidad administrada asignada por el sistema para el acceso al almacenamiento
Use este comando para crear un clúster con una cuenta de almacenamiento administrada por el usuario y una identidad asignada por el sistema. Tenga en cuenta que este ejemplo es un comando abreviado que simplemente resalta los campos pertinentes para agregar el almacenamiento administrado por el usuario. No es el comando de creación de clúster completo.
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 un clúster existente para una cuenta de almacenamiento proporcionada por el usuario y para usar su propia identidad asignada por el sistema. El comando update también se puede usar para cambiar la ubicación de la cuenta de almacenamiento.
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 cambiar el clúster de una identidad asignada por el usuario a una identidad asignada por el sistema, la CommandOutputSettings primero debe borrarse mediante el comando de la sección siguiente y, a continuación, establecer con este comando.
Borrar la CommandOutputSettings del clúster
La CommandOutputSettings se puede borrar y volver a dirigir la salida run-data-extract al almacenamiento del administrador del clúster. Sin embargo, no se recomienda, ya que es menos seguro y la opción se quitará en una versión futura.
Sin embargo, la CommandOutputSettings debe borrarse si se cambia de una identidad asignada por el usuario a una identidad asignada por el sistema.
Use este comando para borrar 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}}'
Ver el id. de entidad de seguridad de la identidad administrada
Para encontrar el id. de recurso de identidad, seleccione "Vista JSON" en el recurso de identidad; el id. está en la parte superior del panel que aparece. La dirección URL del contenedor se puede encontrar en la pestaña Configuración: Propiedades de > del recurso de contenedor.
La CLI también se puede usar para ver la identidad y los datos del identificador de entidad de seguridad asociados dentro del clúster.
Ejemplo:
az networkcloud cluster show --ids /subscriptions/<Subscription ID>/resourceGroups/<Cluster Resource Group Name>/providers/Microsoft.NetworkCloud/clusters/<Cluster Name>
Ejemplo de identidad asignada por el sistema:
"identity": {
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned"
},
Ejemplo de identidad asignada por el usuario:
"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 EN DESUSO: Comprobación del acceso a la cuenta de almacenamiento del Administrador de clústeres
Importante
La cuenta de almacenamiento de Cluster Manager está destinada a la eliminación en abril de 2025 más reciente. Si usa este método hoy en día para la salida del comando, considere la posibilidad de convertir a mediante una cuenta de almacenamiento proporcionada por el usuario.
Si usa el método de almacenamiento del Administrador de clústeres, compruebe que tiene acceso a la cuenta de almacenamiento del Administrador de clústeres:
- En Azure Portal, vaya a la cuenta de almacenamiento del Administrador de clústeres.
- En los detalles de la cuenta de almacenamiento, seleccione Explorador de almacenamiento en el menú de navegación del lado izquierdo.
- En los detalles del explorador de almacenamiento, seleccione Contenedores de blobs.
- Si se encuentra el mensaje
403 This request is not authorized to perform this operation.
mientras accede a la cuenta de almacenamiento, la configuración del firewall de la cuenta de almacenamiento debe actualizarse para incluir la dirección IP pública. - Solicite acceso mediante la creación de una incidencia de soporte técnico a través del portal en el recurso Administrador de clústeres. Proporcione la dirección IP pública que requiere acceso.
Ejecutar un comando run-data-extract
El comando run-data-extract ejecuta uno o varios scripts predefinidos para extraer datos de una máquina sin sistema operativo.
Advertencia
Microsoft no proporciona ni admite ninguna llamada a la API de Operator Nexus que espere que se proporcione el nombre de usuario o la contraseña de texto no cifrado. Tenga en cuenta que los valores enviados se registran y se consideran secretos expuestos, que se deben rotar y revocar. El método documentado de Microsoft para usar secretos de forma segura es almacenarlos en una instancia de Azure Key Vault. Si tiene preguntas o dudas específicas, envíe una solicitud a través de Azure Portal.
Esta es la lista de comandos admitidos:
Colección SupportAssist/TSR para la solución de problemas de Dell
Nombre de comando:hardware-support-data-collection
Argumentos: tipo de registros solicitadosSysInfo
: información del sistemaTTYLog
: almacenamiento de datos de TTYLogDebug
: registros de depuración
Recopilación de información del agente de Microsoft Defender para punto de conexión (MDE)
Nombre de comando:mde-agent-information
Argumentos: NingunoRecopilación de registros de soporte técnico de diagnóstico de MDE
Nombre de comando:mde-support-diagnostics
Argumentos: NingunoRecopilación del estado de acumulación de hardware Dell
Nombre de comando:hardware-rollup-status
Argumentos: NingunoGeneración del informe de CVE del clúster
Nombre de comando:cluster-cve-report
Argumentos: NingunoRecopilación de versiones de Helm
Nombre de comando:collect-helm-releases
Argumentos: NingunoRecopilación de salida de
systemctl status
Nombre de comando:platform-services-status
Argumentos: Ninguno
La sintaxis del comando es la siguiente:
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 varios comandos con formato JSON en la opción --commands
. Cada valor command
especifica el comando y los argumentos. En el caso de un comando con varios argumentos, proporciónelos como una lista al parámetro arguments
. Consulte la sintaxis abreviada de la CLI de Azure para obtener instrucciones sobre cómo crear la estructura --commands
.
Estos comandos pueden ser de larga duración, por lo que se recomienda establecer --limit-time-seconds
en al menos 600 segundos (10 minutos). La opción Debug
o la ejecución de varios extractos puede tardar más de 10 minutos.
En la respuesta, la operación se realiza de forma asincrónica y devuelve un código de estado HTTP de 202. Consulte la sección Visualización de la salida para obtener más información sobre cómo realizar un seguimiento de la finalización del comando y ver el archivo de salida.
Recopilación de datos de soporte técnico de hardware
En este ejemplo, se ejecuta el comando hardware-support-data-collection
y se obtienen los registros SysInfo
y TTYLog
del servidor Dell. El script ejecuta un comando racadm supportassist collect
en la máquina sin sistema operativo designada. El archivo tar.gz que se obtiene contiene los resultados del archivo de comandos de extracción comprimido en 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
Salida hardware-support-data-collection
====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
Lista de ejemplos de archivos de soporte técnico de hardware recopilados
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..]
Recopilación de información del agente de MDE
Se recopilan datos con el comando mde-agent-information
y se formatean como JSON en /hostfs/tmp/runcommand/mde-agent-information.json
. El archivo JSON se encuentra en el archivo ZIP de extracción de datos ubicado en la cuenta de almacenamiento. El script ejecuta una secuencia de comandos mdatp
en la máquina sin sistema operativo designada.
En este ejemplo, se ejecuta el comando mde-agent-information
sin argumentos.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
--resource-group "cluster_MRG" \
--subscription "subscription" \
--commands '[{"command":"mde-agent-information"}]' \
--limit-time-seconds 600
Salida mde-agent-information
====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
Ejemplo de objeto JSON recopilado
{
"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
}
}
Recopilación de diagnósticos de soporte técnico de MDE
Los datos que se recopilan del comando mde-support-diagnostics
usan la herramienta de analizador de clientes de MDE para agrupar la información de los comandos mdatp
y de los archivos de registro pertinentes. El archivo de la cuenta de almacenamiento tgz
contiene un archivo zip
denominado mde-support-diagnostics-<hostname>.zip
. El archivo zip
debe enviarse junto con las solicitudes de soporte técnico para asegurarse de que los equipos correspondientes puedan usar los registros para la solución de problemas y el análisis de la causa principal, si es necesario.
En este ejemplo, se ejecuta el comando mde-support-diagnostics
sin argumentos.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
--resource-group "cluster_MRG" \
--subscription "subscription" \
--commands '[{"command":"mde-support-diagnostics"}]' \
--limit-time-seconds 600
Salida mde-support-diagnostics
====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
Después de descargar el archivo de resultados de ejecución, los archivos de soporte técnico se pueden descomprimir para analizarlos.
Lista de ejemplos de información recopilados por la herramienta de analizador de clientes de 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...]
Estado de acumulación del hardware
Se recopilan datos con el comando hardware-rollup-status
y se formatean como JSON en /hostfs/tmp/runcommand/rollupStatus.json
. El archivo JSON se encuentra en el archivo ZIP de extracción de datos ubicado en la cuenta de almacenamiento. Los datos recopilados muestran el estado de los subsistemas de la máquina.
En este ejemplo, se ejecuta el comando hardware-rollup-status
sin argumentos.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
--resource-group "clusete_MRG" \
--subscription "subscription" \
--commands '[{"command":"hardware-rollup-status"}]' \
--limit-time-seconds 600
Salida hardware-rollup-status
====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
Ejemplo de JSON recopilado
{
"@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..]
Generación del informe de CVE del clúster
Los datos de vulnerabilidades se recopilan con el comando cluster-cve-report
y se formatean como JSON en {year}-{month}-{day}-nexus-cluster-vulnerability-report.json
. El archivo JSON se encuentra en el archivo ZIP de extracción de datos ubicado en la cuenta de almacenamiento. Los datos recopilados incluyen datos de vulnerabilidades por imagen de contenedor en el clúster.
En este ejemplo, se ejecuta el comando cluster-cve-report
sin argumentos.
Nota:
La máquina de destino debe ser un nodo del plano de control o la acción no se ejecuta.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
--resource-group "cluster_MRG" \
--subscription "subscription" \
--commands '[{"command":"cluster-cve-report"}]' \
--limit-time-seconds 600
Salida cluster-cve-report
====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 del informe de 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"]
}
Detalles sobre los datos de CVE
Los datos CVE se actualizan por imagen de contenedor cada 24 horas o cuando hay un cambio en el recurso de Kubernetes que hace referencia a la imagen.
Recopilación de versiones de Helm
Los datos de versiones de Helm se recopilan con el comando collect-helm-releases
y se formatean como json en {year}-{month}-{day}-helm-releases.json
. El archivo JSON se encuentra en el archivo ZIP de extracción de datos ubicado en la cuenta de almacenamiento. Los datos recopilados incluyen toda la información de la versión de Helm del clúster, que consiste en los datos estándar devueltos al ejecutar el comando helm list
.
En este ejemplo, se ejecuta el comando collect-helm-releases
sin argumentos.
Nota:
La máquina de destino debe ser un nodo del plano de control o la acción no se ejecuta.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
--resource-group "cluster_MRG" \
--subscription "subscription" \
--commands '[{"command":"collect-helm-releases"}]' \
--limit-time-seconds 600
Salida collect-helm-releases
====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 versión de 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"
]
}
Recopilación de salida de estado de Systemctl
El estado del servicio se recopila con el comando platform-services-status
. La salida está en formato de texto sin formato y devuelve una visión general del estado de los servicios en el host y el systemctl status
para cada servicio encontrado.
En este ejemplo, se ejecuta el comando platform-services-status
sin 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"
Salida platform-services-status
====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..]
Visualizar la salida
El comando proporciona un vínculo (si usa el almacenamiento del administrador de clúster) u otro comando (si usa el almacenamiento proporcionado por el usuario) para descargar la salida completa. El archivo tar.gz también contiene la salida del archivo de comandos de extracción comprimido. Especifique la ruta de acceso del directorio en el argumento --output-directory
opcional para descargar el archivo de salida desde el blob de almacenamiento a un directorio local.
Advertencia
El uso del argumento --output-directory
sobrescribe los archivos del directorio local que tienen el mismo nombre que los nuevos archivos que se crean.
Nota:
La cuenta de almacenamiento podría bloquearse y, como consecuencia de ello, mostrarse el mensaje 403 This request is not authorized to perform this operation.
debido a restricciones de red o firewall. Consulte las secciones almacenamiento del administrador de clúster o almacenamiento administrado por el usuario para ver los procedimientos para comprobar el acceso.