Udostępnij za pośrednictwem


Rozwiązywanie problemów z maszyną bez systemu operacyjnego przy użyciu az networkcloud baremetalmachine run-data-extract polecenia

Mogą wystąpić sytuacje, w których użytkownik musi zbadać i rozwiązać problemy z lokalną maszyną bez systemu operacyjnego. Operator platformy Azure Nexus udostępnia określony zestaw poleceń wyodrębniania danych za pośrednictwem polecenia az networkcloud baremetalmachine run-data-extract. Te polecenia umożliwiają użytkownikom pobieranie danych diagnostycznych z komputera bez systemu operacyjnego.

Polecenie generuje plik wyjściowy zawierający wyniki wyodrębniania danych. Domyślnie dane są wysyłane do konta magazynu Menedżera klastra. Dostępna jest również metoda w wersji zapoznawczej, w której użytkownicy mogą skonfigurować zasób klastra przy użyciu konta magazynu i tożsamości, która ma dostęp do konta magazynu w celu odbierania danych wyjściowych.

Wymagania wstępne

  • W tym artykule założono, że zainstalowano interfejs wiersza polecenia platformy Azure i rozszerzenie interfejsu networkcloud wiersza polecenia. Aby uzyskać więcej informacji, zobacz How to Install CLI Extensions (Jak zainstalować rozszerzenia interfejsu wiersza polecenia).
  • Docelowa maszyna bez systemu operacyjnego jest włączona i gotowa.
  • Składnia tych poleceń jest oparta na wersji 0.3.0+ interfejsu az networkcloud wiersza polecenia.
  • Pobierz nazwę zarządzanej grupy zasobów klastra (cluster_MRG) utworzoną dla zasobu klastra.

Wysyłanie danych wyjściowych polecenia do określonego konta magazynu przez użytkownika

Tworzenie i konfigurowanie zasobów magazynu

  1. Utwórz konto magazynu lub zidentyfikuj istniejące konto magazynu, którego chcesz użyć. Zobacz Tworzenie konta usługi Azure Storage.
  2. Utwórz kontener magazynu obiektów blob na koncie magazynu. Zobacz Tworzenie kontenera.
  3. Przypisz rolę "Współautor danych obiektu blob usługi Storage" do użytkowników i tożsamości zarządzanych, które wymagają dostępu do danych wyjściowych funkcji run-data-extract.
    1. Zobacz Przypisywanie roli platformy Azure w celu uzyskania dostępu do danych obiektów blob. Rola musi być również przypisana do tożsamości zarządzanej przypisanej przez użytkownika lub tożsamości zarządzanej przypisanej przez system klastra.
    2. Aby uzyskać więcej informacji na temat tożsamości zarządzanych, zobacz Tożsamości zarządzane dla zasobów platformy Azure.
    3. W przypadku korzystania z tożsamości przypisanej przez system klastra należy dodać tożsamość przypisaną przez system do klastra, aby można było uzyskać do niego dostęp.
    4. Podczas przypisywania roli do tożsamości przypisanej przez system klastra upewnij się, że wybrano zasób o typie "Cluster (Operator Nexus).

Konfigurowanie klastra pod kątem używania tożsamości zarządzanej przypisanej przez użytkownika na potrzeby dostępu do magazynu

Użyj tego polecenia, aby utworzyć klaster z kontem magazynu zarządzanego przez użytkownika i tożsamością przypisaną przez użytkownika. Należy pamiętać, że ten przykład to skrócone polecenie, które wyróżnia tylko pola istotne dla dodawania magazynu zarządzanego przez użytkownika. Nie jest to pełne polecenie tworzenia klastra.

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>"

Użyj tego polecenia, aby skonfigurować istniejący klaster dla podanego przez użytkownika konta magazynu i tożsamości przypisanej przez użytkownika. Polecenie aktualizacji może również służyć do zmiany lokalizacji konta magazynu i tożsamości w razie potrzeby.

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>"

Konfigurowanie klastra pod kątem używania przypisanej przez system tożsamości zarządzanej na potrzeby dostępu do magazynu

Użyj tego polecenia, aby utworzyć klaster z kontem magazynu zarządzanego przez użytkownika i tożsamością przypisaną przez system. Należy pamiętać, że ten przykład to skrócone polecenie, które wyróżnia tylko pola istotne dla dodawania magazynu zarządzanego przez użytkownika. Nie jest to pełne polecenie tworzenia klastra.

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>"

Użyj tego polecenia, aby skonfigurować istniejący klaster dla konta magazynu dostarczonego przez użytkownika i użyć własnej tożsamości przypisanej przez system. Polecenie aktualizacji może również służyć do zmiany lokalizacji konta magazynu.

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>"

Aby zmienić klaster z tożsamości przypisanej przez użytkownika na tożsamość przypisaną przez system, należy najpierw wyczyścić polecenie przy użyciu polecenia w następnej sekcji, a następnie ustawić przy użyciu tego polecenia.

Wyczyść polecenieOutputSettings klastra

PoleceniaOutputSettings można wyczyścić, kierując dane wyjściowe run-data-extract z powrotem do magazynu menedżera klastra. Nie jest to jednak zalecane, ponieważ jest mniej bezpieczne, a opcja zostanie usunięta w przyszłej wersji.

Należy jednak wyczyścić polecenie CommandOutputSettings w przypadku przejścia z tożsamości przypisanej przez użytkownika do tożsamości przypisanej przez system.

Użyj tego polecenia, aby wyczyścić polecenie 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}}'

Wyświetlanie identyfikatora podmiotu zabezpieczeń tożsamości zarządzanej

Identyfikator zasobu tożsamości można znaleźć, wybierając pozycję "Widok JSON" w zasobie tożsamości; identyfikator znajduje się w górnej części wyświetlonego panelu. Adres URL kontenera można znaleźć na karcie Ustawienia —> właściwości zasobu kontenera.

Interfejs wiersza polecenia może również służyć do wyświetlania tożsamości i skojarzonych danych identyfikatora podmiotu zabezpieczeń w klastrze.

Przykład:

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

Przykład tożsamości przypisanej przez system:

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

Przykład tożsamości przypisanej przez użytkownika:

    "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"
            }
        }
    },

PRZESTARZAŁA METODA: Weryfikowanie dostępu do konta magazynu Menedżera klastra

Ważne

Konto magazynu Menedżera klastra jest przeznaczone do usunięcia w kwietniu 2025 r. najpóźniej. Jeśli używasz tej metody dzisiaj dla danych wyjściowych polecenia, rozważ przekonwertowanie na przy użyciu podanego przez użytkownika konta magazynu.

Jeśli używasz metody magazynu Menedżera klastra, sprawdź, czy masz dostęp do konta magazynu menedżera klastra:

  1. W witrynie Azure Portal przejdź do konta magazynu menedżera klastra.
  2. W obszarze Szczegóły konta magazynu wybierz pozycję Przeglądarka magazynu z menu nawigacji po lewej stronie.
  3. W obszarze Szczegóły przeglądarki usługi Storage wybierz pozycję Kontenery obiektów blob.
  4. Jeśli wystąpi błąd 403 This request is not authorized to perform this operation. podczas uzyskiwania dostępu do konta magazynu, ustawienia zapory konta magazynu muszą zostać zaktualizowane, aby uwzględnić publiczny adres IP.
  5. Zażądaj dostępu, tworząc bilet pomocy technicznej za pośrednictwem portalu w zasobie Menedżera klastra. Podaj publiczny adres IP, który wymaga dostępu.

Wykonywanie polecenia run-data-extract

Uruchomienie polecenia wyodrębniania danych wykonuje co najmniej jeden wstępnie zdefiniowany skrypt w celu wyodrębnienia danych z maszyny bez systemu operacyjnego.

Ostrzeżenie

Firma Microsoft nie udostępnia ani nie obsługuje żadnych wywołań interfejsu API Nexus operatora, które oczekują podania nazwy użytkownika i/lub hasła w postaci zwykłego tekstu. Zwróć uwagę, że wszystkie wysyłane wartości są rejestrowane i są uznawane za uwidocznione wpisy tajne, które powinny zostać obrócone i odwołane. Udokumentowana przez firmę Microsoft metoda bezpiecznego używania wpisów tajnych polega na przechowywaniu ich w usłudze Azure Key Vault. Jeśli masz konkretne pytania lub wątpliwości, prześlij żądanie za pośrednictwem witryny Azure Portal.

Bieżąca lista obsługiwanych poleceń to

Składnia polecenia to:

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>"

Określ wiele poleceń przy użyciu formatu json w --commands opcji. Każdy command określa polecenia i argumenty. W przypadku polecenia z wieloma argumentami podaj jako listę parametru arguments . Aby uzyskać instrukcje dotyczące konstruowania struktury, zobacz Skrót interfejsu wiersza polecenia platformy --commands Azure.

Te polecenia mogą być długotrwałe, dlatego zalecane jest ustawienie --limit-time-seconds co najmniej 600 sekund (10 minut). Opcja Debug lub uruchamianie wielu wyodrębnień może potrwać dłużej niż 10 minut.

W odpowiedzi operacja wykonuje asynchronicznie i zwraca kod stanu HTTP 202. Zobacz sekcję Wyświetlanie danych wyjściowych , aby uzyskać szczegółowe informacje na temat śledzenia uzupełniania poleceń i wyświetlania pliku wyjściowego.

Zbieranie danych pomocy technicznej sprzętu

W tym przykładzie hardware-support-data-collection jest wykonywane polecenie i pobieranie SysInfo i TTYLog dzienniki z serwera Dell. Skrypt wykonuje racadm supportassist collect polecenie na wyznaczonej maszynie bez systemu operacyjnego. Wynikowy plik tar.gz zawiera spakowane dane wyjściowe wyodrębniania pliku polecenia w pliku 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 Wyjście

====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

Przykładowa lista zebranych plików pomocy technicznej sprzętu

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..]

Zbieranie informacji o agencie MDE

Dane są zbierane za pomocą mde-agent-information polecenia i sformatowane jako JSON na /hostfs/tmp/runcommand/mde-agent-information.json. Plik JSON znajduje się w pliku zip wyodrębniania danych znajdującym się na koncie magazynu. Skrypt wykonuje sekwencję mdatp poleceń na wyznaczonej maszynie bez systemu operacyjnego.

W tym przykładzie wykonywane jest mde-agent-information polecenie bez argumentów.

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 Wyjście

====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

Przykładowy obiekt JSON zebrany

{
  "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
    }
}

Zbieranie diagnostyki pomocy technicznej rozwiązania MDE

Dane zebrane z mde-support-diagnostics polecenia używają narzędzia ANALIZATORa klienta MDE do tworzenia pakietów informacji z mdatp poleceń i odpowiednich plików dziennika. Plik konta tgz magazynu zawiera zip plik o nazwie mde-support-diagnostics-<hostname>.zip. Element zip powinien zostać wysłany wraz z wszelkimi żądaniami pomocy technicznej, aby upewnić się, że zespoły pomocnicze mogą używać dzienników do rozwiązywania problemów i analizy głównej przyczyny, jeśli jest to konieczne.

W tym przykładzie wykonywane jest mde-support-diagnostics polecenie bez argumentów.

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 Wyjście

====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

Po pobraniu pliku wyniku wykonania pliki pomocy technicznej można rozpakować na potrzeby analizy.

Przykładowa lista informacji zebranych przez analizator klienta 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...]

Stan zestawienia sprzętu

Dane są zbierane za pomocą hardware-rollup-status polecenia i sformatowane jako JSON na /hostfs/tmp/runcommand/rollupStatus.json. Plik JSON znajduje się w pliku zip wyodrębniania danych znajdującym się na koncie magazynu. Zebrane dane pokazują kondycję podsystemów maszyny.

W tym przykładzie wykonywane jest hardware-rollup-status polecenie bez argumentów.

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 Wyjście

====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

Przykładowy zebrany kod JSON

{
	"@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..]

Generowanie raportu CVE klastra

Dane luk w zabezpieczeniach są zbierane za pomocą cluster-cve-report polecenia i sformatowane jako dane JSON do {year}-{month}-{day}-nexus-cluster-vulnerability-report.json. Plik JSON znajduje się w pliku zip wyodrębniania danych znajdującym się na koncie magazynu. Zebrane dane obejmują dane luk w zabezpieczeniach na obraz kontenera w klastrze.

W tym przykładzie wykonywane jest cluster-cve-report polecenie bez argumentów.

Uwaga

Maszyna docelowa musi być węzłem płaszczyzny sterowania lub akcja nie jest wykonywana.

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 Wyjście

====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

SCHEMAT RAPORTU 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"]
}

Szczegóły danych CVE

Dane CVE są odświeżane na obraz kontenera co 24 godziny lub gdy nastąpi zmiana zasobu Kubernetes odwołującego się do obrazu.

Zbieranie wydań programu Helm

Dane wydania programu Helm są zbierane za pomocą collect-helm-releases polecenia i sformatowane jako json na {year}-{month}-{day}-helm-releases.json. Plik JSON znajduje się w pliku zip wyodrębniania danych znajdującym się na koncie magazynu. Zebrane dane zawierają wszystkie informacje o wersji narzędzia Helm z klastra, które składają się ze standardowych danych zwracanych podczas uruchamiania polecenia helm list.

W tym przykładzie wykonywane jest collect-helm-releases polecenie bez argumentów.

Uwaga

Maszyna docelowa musi być węzłem płaszczyzny sterowania lub akcja nie jest wykonywana.

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 Wyjście

====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

Schemat wydania programu 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"
  ]
}

Zbieranie danych wyjściowych stanu systemctl

Stan usługi jest zbierany za platform-services-status pomocą polecenia . Dane wyjściowe są w formacie zwykłego tekstu i zwracają przegląd stanu usług na hoście i systemctl status dla każdej znalezionej usługi.

W tym przykładzie wykonywane jest platform-services-status polecenie bez argumentów.

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 Wyjście

====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..]

Wyświetlanie danych wyjściowych

Polecenie udostępnia link (w przypadku korzystania z magazynu menedżera klastra) lub inne polecenie (jeśli używasz magazynu udostępnionego przez użytkownika) w celu pobrania pełnych danych wyjściowych. Plik tar.gz zawiera również spakowane dane wyjściowe wyodrębniania pliku polecenia. Pobierz plik wyjściowy z obiektu blob magazynu do katalogu lokalnego, określając ścieżkę katalogu w opcjonalnym argumencie --output-directory.

Ostrzeżenie

Użycie argumentu --output-directory zastępuje wszystkie pliki w katalogu lokalnym, które mają taką samą nazwę jak tworzone nowe pliki.

Uwaga

Konto magazynu może być zablokowane 403 This request is not authorized to perform this operation. z powodu ograniczeń sieciowych lub zapory. Aby sprawdzić dostęp, zapoznaj się z sekcjami magazynu menedżera klastra lub magazynem zarządzanym przez użytkownika.