Résoudre les problèmes de machine nue à l’aide de la commande az networkcloud baremetalmachine run-data-extract
Il existe des situations où un utilisateur doit investiguer et résoudre les problèmes liés à une machine physique (matériel nu) locale. Azure Operator Nexus fournit un ensemble prescrit de commandes d’extraction de données via az networkcloud baremetalmachine run-data-extract
. Ces commandes permettent aux utilisateurs d’obtenir des données de diagnostic à partir d’une machine nue.
La commande produit un fichier de sortie contenant les résultats de l’extraction de données. Par défaut, les données sont envoyées au compte de stockage du Gestionnaire de cluster. Il existe également une méthode en préversion où les utilisateurs peuvent configurer la ressource de cluster avec un compte de stockage et une identité ayant accès au compte de stockage pour recevoir la sortie.
Prérequis
- Cet article suppose que l’interface de ligne de commande Azure et l’extension d’interface de ligne de commande
networkcloud
sont installées. Pour plus d’informations, consultez Comment installer des extensions CLI. - La machine physique (matériel nu) cible est allumée et prête.
- La syntaxe de ces commandes est basée sur la version 0.3.0+ de l’interface CLI
az networkcloud
. - Obtenez le nom du groupe de ressources managées du cluster (cluster_MRG) que vous avez créé pour la ressource de cluster.
Vérifier l’accès au compte de stockage du Gestionnaire de cluster
Remarque
La méthode de sortie du compte de stockage du Gestionnaire de cluster sera déconseillée à l’avenir, une fois l’intégration du cluster aux services approuvés effectuée, et l’option de stockage géré par l’utilisateur entièrement prise en charge.
Si vous utilisez la méthode de stockage du Gestionnaire de cluster, vérifiez que vous avez accès au compte de stockage du Gestionnaire de cluster :
- Dans le portail Azure, accédez au compte de stockage du Gestionnaire de cluster.
- Dans les détails du compte de stockage, sélectionnez Navigateur de stockage à partir du menu de navigation sur le côté gauche.
- Dans les détails du navigateur de stockage, sélectionnez Conteneurs d’objets blob.
- Si vous rencontrez une erreur
403 This request is not authorized to perform this operation.
lors de l’accès au compte de stockage, c’est que les paramètres de pare-feu du compte de stockage doivent être mis à jour de façon à inclure l’adresse IP publique. - Demandez l’accès en créant un ticket de support via le portail sur la ressource Gestionnaire de cluster. Fournissez l’adresse IP publique qui nécessite un accès.
PRÉVERSION : Envoyer la sortie d’une commande à un compte de stockage spécifié par l’utilisateur
Important
Notez que cette méthode de spécification d’un compte de stockage utilisateur pour la sortie d’une commande est en préversion. Cette méthode doit être utilisée uniquement avec les comptes de stockage utilisateur pour lesquels le pare-feu n’est pas activé. Si votre environnement nécessite l’activation du pare-feu du compte de stockage, utilisez la méthode de sortie existante du Gestionnaire de cluster.
Créer et configurer des ressources de stockage
- Créez un compte de stockage, ou identifiez un compte de stockage existant à utiliser. Consultez Créer un compte Stockage Azure.
- Créez un conteneur de stockage d’objets blob dans le compte de stockage. Consultez Créer un conteneur.
- Attribuez le rôle « Contributeur aux données Blob du stockage » aux utilisateurs et aux identités managées qui ont besoin d’accéder à la sortie de l’extraction de données.
- Consultez Attribuer un rôle Azure pour l’accès aux données d’objet blob. Le rôle doit également être attribué à une identité managée affectée par l’utilisateur, ou à la propre identité managée affectée par le système du cluster.
- Pour plus d’informations sur les identités managées, consultez Identités managées pour les ressources Azure.
- Si vous utilisez l’identité affectée par le système du cluster, l’identité affectée par le système doit être ajoutée au cluster pour que l’accès puisse lui être octroyé.
- Quand vous attribuez un rôle à l’identité affectée par le système du cluster, veillez à sélectionner la ressource avec le type « Cluster (Operator Nexus) ».
Configurer le cluster afin d’utiliser une identité managée affectée par l’utilisateur pour l’accès au stockage
Utilisez cette commande pour créer un cluster avec un compte de stockage géré par l’utilisateur et une identité affectée par l’utilisateur. Notez que cet exemple est une commande abrégée qui met simplement en évidence les champs pertinents pour l’ajout du stockage géré par l’utilisateur. Il ne s’agit pas de la commande complète de création 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>"
Utilisez cette commande afin de configurer un cluster existant pour un compte de stockage fourni par l’utilisateur et une identité affectée par l’utilisateur. La commande de mise à jour peut également être utilisée pour changer l’emplacement et l’identité du compte de stockage si nécessaire.
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>"
Configurer le cluster afin d’utiliser une identité managée affectée par le système pour l’accès au stockage
Utilisez cette commande pour créer un cluster avec un compte de stockage géré par l’utilisateur et une identité affectée par le système. Notez que cet exemple est une commande abrégée qui met simplement en évidence les champs pertinents pour l’ajout du stockage géré par l’utilisateur. Il ne s’agit pas de la commande complète de création 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>"
Utilisez cette commande afin de configurer un cluster existant pour un compte de stockage fourni par l’utilisateur, et d’utiliser sa propre identité affectée par le système. La commande de mise à jour peut également être utilisée pour changer l’emplacement du compte de stockage.
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>"
Pour faire passer le cluster d’une identité affectée par l’utilisateur à une identité affectée par le système, vous devez d’abord effacer CommandOutputSettings à l’aide de la commande de la section suivante, puis le définir en utilisant cette commande.
Effacer CommandOutputSettings du cluster
Vous pouvez effacer CommandOutputSettings pour rediriger la sortie de l’extraction de données vers le stockage du Gestionnaire de cluster. Toutefois, cette façon de procéder n’est pas recommandée, car elle est moins sécurisée, et l’option sera supprimée dans une prochaine version.
Toutefois, vous devez effacer CommandOutputSettings si vous passez d’une identité affectée par l’utilisateur à une identité affectée par le système.
Utilisez cette commande pour effacer 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}}'
Voir l’ID de principal de l’identité managée
Vous trouverez l’ID de la ressource d’identité en sélectionnant « Vue JSON » sur la ressource d’identité. L’ID se trouve en haut du panneau qui s’affiche. L’URL du conteneur se trouve sous l’onglet Paramètres -> Propriétés de la ressource de conteneur.
L’interface CLI peut également être utilisée pour voir l’identité et les données d’ID de principal associées au sein du cluster.
Exemple :
az networkcloud cluster show --ids /subscriptions/<Subscription ID>/resourceGroups/<Cluster Resource Group Name>/providers/Microsoft.NetworkCloud/clusters/<Cluster Name>
Exemple d’identité affectée par le système :
"identity": {
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned"
},
Exemple d’identité affectée par l’utilisateur :
"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"
}
}
},
Exécuter une commande run-data-extract
La commande run data extract exécute un ou plusieurs scripts prédéfinis pour extraire des données d’une machine nue.
Avertissement
Microsoft ne fournit ni ne prend en charge les appels d’API Operator Nexus qui nécessitent que le nom d’utilisateur et/ou le mot de passe en clair soient fournis. Notez que les valeurs envoyées sont journalisées et considérées comme des secrets exposés, qui doivent donc être permutés et révoqués. La méthode documentée par Microsoft pour utiliser des secrets en toute sécurité consiste à les stocker dans un coffre Azure Key Vault. Si vous avez des questions ou des préoccupations spécifiques, envoyez une demande via le portail Azure.
Liste actuelle des commandes prises en charge
Collection SupportAssist/TSR pour la résolution des problèmes Dell
Nom de la commande :hardware-support-data-collection
Arguments : type de journaux demandésSysInfo
- Informations systèmeTTYLog
- Données TTYLog de stockageDebug
- Journaux de débogage
Collecter les informations de l’agent Microsoft Defender for Endpoint (MDE)
Nom de la commande :mde-agent-information
Arguments : AucunCollecter les journaux de prise en charge des diagnostics MDE
Nom de la commande :mde-support-diagnostics
Arguments : AucunCollecter l’état du cumul matériel Dell
Nom de la commande :hardware-rollup-status
Arguments : AucunGénérer un rapport CVE de cluster
Nom de la commande :cluster-cve-report
Arguments : AucunCollecter les versions Helm
Nom de la commande :collect-helm-releases
Arguments : AucunCollecter la sortie
systemctl status
Nom de la commande :platform-services-status
Arguments : Aucun
Syntaxe de la commande :
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>"
Spécifiez plusieurs commandes au format json dans l’option --commands
. Chaque command
spécifie la commande et les arguments. Pour une commande avec plusieurs arguments, fournissez-les sous forme de liste au paramètre arguments
. Consultez Syntaxe raccourcie de l’interface Azure CLI pour obtenir des instructions sur la construction de la structure --commands
.
L’exécution de ces commandes peut être longue, c’est pourquoi la recommandation est de définir --limit-time-seconds
sur au moins 600 secondes (10 minutes). L’option Debug
ou l’exécution de plusieurs extraits risquent de prendre plus de 10 minutes.
Dans la réponse, l’opération a lieu de manière asynchrone et retourne un code d’état HTTP de 202. Consultez la section Affichage de la sortie pour plus de détails sur la façon de suivre la complétion des commandes et d’afficher le fichier de sortie.
Collecte de données de support matériel
Cet exemple exécute la commande hardware-support-data-collection
et obtient les journaux SysInfo
et TTYLog
du serveur Dell. Le script exécute une commande racadm supportassist collect
sur la machine physique (matériel nu) désignée. Le fichier tar.gz résultant contient les sorties du fichier de commande d’extraction compressé dans 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
Sortie de 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
Liste d’exemples de fichiers de support matériel collectés
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..]
Collecter les informations de l’agent MDE
Les données sont collectées avec la commande mde-agent-information
et converties au format JSON en /hostfs/tmp/runcommand/mde-agent-information.json
. Le fichier JSON se trouve dans le fichier zip d’extraction de données situé dans le compte de stockage. Le script exécute une séquence de commandes mdatp
sur la machine physique (matériel nu) désignée.
Cet exemple exécute la commande mde-agent-information
sans argument.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
--resource-group "cluster_MRG" \
--subscription "subscription" \
--commands '[{"command":"mde-agent-information"}]' \
--limit-time-seconds 600
Sortie de 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
Exemple d’objet JSON collecté
{
"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
}
}
Collecter les diagnostics de support MDE
Les données collectées de la commande mde-support-diagnostics
utilisent l’outil MDE Client Analyzer pour regrouper les informations des commandes mdatp
et des fichiers journaux appropriés. Le fichier tgz
du compte de stockage contient un fichier zip
nommé mde-support-diagnostics-<hostname>.zip
. Le zip
doit être envoyé avec toutes les demandes de support afin de vous assurer que les équipes de support peuvent utiliser les journaux pour la résolution des problèmes et l’analyse de la cause racine, si nécessaire.
Cet exemple exécute la commande mde-support-diagnostics
sans argument.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
--resource-group "cluster_MRG" \
--subscription "subscription" \
--commands '[{"command":"mde-support-diagnostics"}]' \
--limit-time-seconds 600
Sortie de 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
Une fois que vous avez téléchargé le fichier de résultat d’exécution, vous pouvez décompresser les fichiers de support à des fins d’analyse.
Exemple de liste d’informations collectées par l’outil 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...]
État du cumul matériel
Les données sont collectées avec la commande hardware-rollup-status
et converties au format JSON en /hostfs/tmp/runcommand/rollupStatus.json
. Le fichier JSON se trouve dans le fichier zip d’extraction de données situé dans le compte de stockage. Les données collectées indiquent l’intégrité des sous-systèmes de la machine.
Cet exemple exécute la commande hardware-rollup-status
sans argument.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
--resource-group "clusete_MRG" \
--subscription "subscription" \
--commands '[{"command":"hardware-rollup-status"}]' \
--limit-time-seconds 600
Sortie de 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
Exemple de JSON collecté
{
"@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..]
Générer un rapport CVE de cluster
Les données de vulnérabilité sont collectées avec la commande cluster-cve-report
et converties au format JSON en {year}-{month}-{day}-nexus-cluster-vulnerability-report.json
. Le fichier JSON se trouve dans le fichier zip d’extraction de données situé dans le compte de stockage. Les données collectées incluent les données de vulnérabilité par image conteneur dans le cluster.
Cet exemple exécute la commande cluster-cve-report
sans argument.
Remarque
L’ordinateur cible doit être un nœud de plan de contrôle. Sinon, l’action n’est pas exécutée.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
--resource-group "cluster_MRG" \
--subscription "subscription" \
--commands '[{"command":"cluster-cve-report"}]' \
--limit-time-seconds 600
Sortie de 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
Schéma de rapport 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"]
}
Détails des données CVE
Les données CVE sont actualisées par image conteneur toutes les 24 heures, ou en cas de changement de la ressource Kubernetes référençant l’image.
Collecter les versions Helm
Les données de version Helm sont collectées avec la commande collect-helm-releases
et mises en forme en json pour {year}-{month}-{day}-helm-releases.json
. Le fichier JSON se trouve dans le fichier zip d’extraction de données situé dans le compte de stockage. Les données collectées incluent toutes les informations de publication Helm du cluster, qui se composent des données standard retournées lors de l’exécution de la commande helm list
.
Cet exemple exécute la commande collect-helm-releases
sans argument.
Remarque
L’ordinateur cible doit être un nœud de plan de contrôle. Sinon, l’action n’est pas exécutée.
az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
--resource-group "cluster_MRG" \
--subscription "subscription" \
--commands '[{"command":"collect-helm-releases"}]' \
--limit-time-seconds 600
Sortie de 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
Schéma de version 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"
]
}
Collecter la sortie de l’état Systemctl
L’état du service est collecté avec la commande platform-services-status
. La sortie est au format texte brut et retourne une vue d’ensemble de l’état des services sur l’hôte, ainsi que du systemctl status
pour chaque service trouvé.
Cet exemple exécute la commande platform-services-status
sans argument.
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"
Sortie de 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..]
Visualisation de la sortie
La commande fournit un lien (si vous utilisez le stockage du Gestionnaire de cluster) ou une autre commande (si vous utilisez le stockage fourni par l’utilisateur) pour télécharger la sortie complète. Le fichier tar.gz contient aussi les sorties du fichier de commande d’extraction compressé. Téléchargez le fichier de sortie à partir du blob de stockage dans un répertoire local en spécifiant le chemin du répertoire dans l’argument facultatif --output-directory
.
Avertissement
L’utilisation de l’argument --output-directory
remplace tous les fichiers du répertoire local qui portent le même nom que les fichiers créés.
Remarque
Le compte de stockage peut être verrouillé et entraîner une erreur 403 This request is not authorized to perform this operation.
en raison de restrictions du réseau ou du pare-feu. Consultez les sections relatives au stockage du Gestionnaire de cluster ou au stockage géré par l’utilisateur pour connaître les procédures de vérification de l’accès.