Testowanie obrazu maszyny wirtualnej
W tym artykule opisano sposób testowania obrazu maszyny wirtualnej, aby upewnić się, że spełnia ona najnowsze wymagania dotyczące publikowania w witrynie Azure Marketplace.
Wdrażanie maszyny wirtualnej platformy Azure
Aby wdrożyć maszynę wirtualną z galerii obliczeń platformy Azure (wcześniej znanej jako galeria obrazów udostępnionych):
- Otwórz wersję obrazu galerii obliczeniowej platformy Azure.
- Wybierz pozycję Utwórz maszynę wirtualną.
- Podaj nazwę maszyny wirtualnej i wybierz pozycję Rozmiar maszyny wirtualnej.
- Wybierz pozycję Przejrzyj i utwórz. Po zakończeniu walidacji wybierz pozycję Utwórz.
Uwaga
Aby utworzyć maszynę wirtualną na podstawie pliku wirtualnego dysku twardego, wykonaj poniższe instrukcje w sekcji Łączenie narzędzia certyfikacji z obrazem maszyny wirtualnej lub Używanie programu PowerShell do korzystania z interfejsu API samodzielnego testowania.
Przed przesłaniem oferty maszyny wirtualnej wykonaj następujące kroki:
- Wdrażanie maszyny wirtualnej platformy Azure przy użyciu uogólnionego obrazu; Zobacz Tworzenie maszyny wirtualnej przy użyciu zatwierdzonej bazy lub tworzenie maszyny wirtualnej przy użyciu własnego obrazu.
- Uruchom walidacje.
Uruchamianie walidacji
Istnieją dwa sposoby uruchamiania walidacji na wdrożonym obrazie.
Korzystanie z narzędzia do testowania certyfikacji dla platformy Azure Certified
Ważne
Aby uruchomić narzędzie do testowania certyfikacji, usługa zdalnego zarządzania systemem Windows musi być uruchomiona i skonfigurowana w systemie Windows. Umożliwia to dostęp do portu 5986. Aby uzyskać informacje, zobacz Instalacja i konfiguracja zarządzania zdalnego systemu Windows.
Pobieranie i uruchamianie narzędzia do testowania certyfikacji
Narzędzie do testowania certyfikacji dla platformy Azure certyfikowane działa na lokalnym komputerze z systemem Windows, ale testuje maszynę wirtualną z systemem Windows lub Linux opartą na platformie Azure. Potwierdza to, że obraz maszyny wirtualnej użytkownika może być używany z platformą Microsoft Azure oraz że zostały spełnione wskazówki i wymagania dotyczące przygotowywania dysku VHD.
- Pobierz i zainstaluj najnowsze narzędzie do testowania certyfikacji dla platformy Azure Certified.
- Otwórz narzędzie certyfikacji, a następnie wybierz pozycję Rozpocznij nowy test.
- Na ekranie Informacje o teście wprowadź nazwę testu dla przebiegu testu.
- Wybierz platformę dla maszyny wirtualnej— Windows Server (zezwalaj na port 5986 dla systemu Windows) lub Linux (zezwalaj na port 22 dla systemu Linux). Wybór platformy wpływa na pozostałe opcje.
- Jeśli maszyna wirtualna korzysta z tej usługi bazy danych, zaznacz pole wyboru Test dla usługi Azure SQL Database .
Łączenie narzędzia certyfikacji z obrazem maszyny wirtualnej
Wybierz tryb uwierzytelniania SSH: uwierzytelnianie haseł lub uwierzytelnianie pliku klucza.
W przypadku korzystania z uwierzytelniania opartego na hasłach wprowadź wartości nazwy DNS maszyny wirtualnej, nazwy użytkownika i hasła. Można również zmienić domyślny numer portu SSH.
W przypadku korzystania z uwierzytelniania opartego na plikach wprowadź wartości dla nazwy DNS maszyny wirtualnej, nazwy użytkownika i lokalizacji klucza prywatnego. Możesz również dołączyć hasło lub zmienić domyślny numer portu SSH.
Wprowadź w pełni kwalifikowaną nazwę DNS maszyny wirtualnej (na przykład MyVMName.Cloudapp.net).
Wprowadź nazwę użytkownika i hasło.
Wybierz Dalej.
Uruchamianie testu certyfikacji
Po podaniu wartości parametrów obrazu maszyny wirtualnej w narzędziu certyfikacji wybierz pozycję Testuj połączenie, aby utworzyć prawidłowe połączenie z maszyną wirtualną. Po zweryfikowaniu połączenia wybierz przycisk Dalej , aby rozpocząć test. Po zakończeniu testu wyniki są wyświetlane w tabeli. W kolumnie Stan jest wyświetlana wartość (Pass/Fail/Warning) dla każdego testu. Jeśli którykolwiek z testów nie powiedzie się, obraz nie jest certyfikowany. W takim przypadku przejrzyj wymagania i komunikaty o błędach, wprowadź sugerowane zmiany i ponownie uruchom test.
Po zakończeniu testu automatycznego podaj dodatkowe informacje o obrazie maszyny wirtualnej na dwóch kartach ekranu Kwestionariusz, Ogólne oceny i Dostosowywanie jądra, a następnie wybierz przycisk Dalej.
Ostatni ekran umożliwia podanie dodatkowych informacji, takich jak informacje o dostępie do protokołu SSH dla obrazu maszyny wirtualnej z systemem Linux oraz wyjaśnienie ewentualnych niepowodzeń ocen, jeśli szukasz wyjątków.
Na koniec wybierz pozycję Generuj raport, aby pobrać wyniki testu i pliki dziennika dla wykonanych przypadków testowych wraz z odpowiedziami na kwestionariusz.
Uwaga
Niewielu wydawców ma scenariusze, w których maszyny wirtualne muszą być zablokowane, ponieważ mają oprogramowanie, takie jak zapory zainstalowane na maszynie wirtualnej. W takim przypadku pobierz narzędzie Certified Test Tool tutaj i prześlij raport w pomocy technicznej Centrum partnerskiego.
Używanie programu PowerShell do korzystania z interfejsu API samodzielnego testowania
W systemie operacyjnym Linux
Wywołaj interfejs API w programie PowerShell:
- Wygeneruj token dostępu.
- Wywołaj interfejs API za pomocą polecenia Invoke-WebRequest.
- Metoda to Post, a typ zawartości to JSON, jak pokazano w poniższym przykładzie kodu i przechwytywaniu ekranu.
- Określ parametry treści w formacie JSON.
Następujące polecenia generują token dostępu:
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/x-www-form-urlencoded")
$body = "grant_type=client_credentials&client_id=$clientId&client_secret=$clientSecret&resource=https%3A%2F%2Fmanagement.core.windows.net"
$response = Invoke-RestMethod "https://login.microsoftonline.com/$tenantId/oauth2/token" -Method 'POST' -Headers $headers -Body $body
$accessToken = $response.access_token
W tym przykładzie pokazano wywołanie programu PowerShell do interfejsu API (zezwalaj na port 22 podczas tworzenia maszyny wirtualnej):
$accesstoken = "token"
$headers = @{ "Authorization" = "Bearer $accesstoken" }
$DNSName = "<Machine DNS Name>"
$UserName = "<User ID>"
$Password = "<Password>"
$OS = "Linux"
$PortNo = "22"
$CompanyName = "ABCD"
$AppId = "<Application ID>"
$TenantId = "<Tenant ID>"
$body = @{
"DNSName" = $DNSName
"UserName" = $UserName
"Password" = $Password
"OS" = $OS
"PortNo" = $PortNo
"CompanyName" = $CompanyName
"AppId" = $AppId
"TenantId" = $TenantId
} | ConvertTo-Json
$body
$uri = "https://isvapp.azurewebsites.net/selftest-vm"
$res = (Invoke-WebRequest -Method "Post" -Uri $uri -Body $body -ContentType "application/json" -Headers $headers).Content
Oto przykład wywoływania interfejsu API w programie PowerShell:
Korzystając z poprzedniego przykładu, możesz pobrać kod JSON i przeanalizować go, aby uzyskać następujące szczegóły:
$resVar = $res | ConvertFrom-Json
$actualresult = $resVar.Response | ConvertFrom-Json
Write-Host "OSName: $($actualresult.OSName)"
Write-Host "OSVersion: $($actualresult.OSVersion)"
Write-Host "Overall Test Result: $($actualresult.TestResult)"
For ($i = 0; $i -lt $actualresult.Tests.Length; $i++) {
Write-Host "TestID: $($actualresult.Tests[$i].TestID)"
Write-Host "TestCaseName: $($actualresult.Tests[$i].TestCaseName)"
Write-Host "Description: $($actualresult.Tests[$i].Description)"
Write-Host "Result: $($actualresult.Tests[$i].Result)"
Write-Host "ActualValue: $($actualresult.Tests[$i].ActualValue)"
}
Ten przykładowy ekran, który pokazuje $res.Content
, pokazuje szczegóły wyników testu w formacie JSON:
Oto przykład wyników testów JSON wyświetlanych w przeglądarce JSON online (takiej jak Code Beautify lub JSON Viewer).
W systemie operacyjnym Windows
Wywołaj interfejs API w programie PowerShell:
- Wywołaj interfejs API za pomocą polecenia Invoke-WebRequest.
- Metoda to Post, a typ zawartości to JSON, jak pokazano w poniższym przykładzie kodu i przykładowym ekranie.
- Utwórz parametry treści w formacie JSON.
Ten przykładowy kod przedstawia wywołanie programu PowerShell do interfejsu API (zezwalaj na port 5986 podczas tworzenia maszyny wirtualnej):
$accesstoken = "Get token for your Client AAD App"
$headers = @{ "Authorization" = "Bearer $accesstoken" }
$Body = @{
"DNSName" = "XXXX.westus.cloudapp.azure.com"
"UserName" = "XXX"
"Password" = "XXX@123456"
"OS" = "Windows"
"PortNo" = "5986"
"CompanyName" = "ABCD"
"AppId" = "XXXX-XXXX-XXXX"
"TenantId" = "XXXX-XXXX-XXXX"
} | ConvertTo-Json
$res = Invoke-WebRequest -Method "Post" -Uri $uri -Body $Body -ContentType "application/json" –Headers $headers;
$Content = $res | ConvertFrom-Json
Te przykładowe ekrany przedstawiają przykłady wywoływania interfejsu API w programie PowerShell:
Za pomocą klucza SSH:
Z hasłem:
Korzystając z poprzedniego przykładu, możesz pobrać kod JSON i przeanalizować go, aby uzyskać następujące szczegóły:
$resVar = $res | ConvertFrom-Json
$actualresult = $resVar.Response | ConvertFrom-Json
Write-Host "OSName: $($actualresult.OSName)"
Write-Host "OSVersion: $($actualresult.OSVersion)"
Write-Host "Overall Test Result: $($actualresult.TestResult)"
For ($i = 0; $i -lt $actualresult.Tests.Length; $i++) {
Write-Host "TestID: $($actualresult.Tests[$i].TestID)"
Write-Host "TestCaseName: $($actualresult.Tests[$i].TestCaseName)"
Write-Host "Description: $($actualresult.Tests[$i].Description)"
Write-Host "Result: $($actualresult.Tests[$i].Result)"
Write-Host "ActualValue: $($actualresult.Tests[$i].ActualValue)"
}
Ten ekran, który pokazuje $res.Content
, pokazuje szczegóły wyników testu w formacie JSON:
Oto przykład wyników testów wyświetlanych w przeglądarce JSON online (np . Code Beautify lub JSON Viewer).
Używanie narzędzia CURL do korzystania z interfejsu API samodzielnego testowania w systemie operacyjnym Linux
W tym przykładzie narzędzie curl będzie używane do tworzenia wywołania interfejsu API POST do identyfikatora Entra firmy Microsoft i maszyny wirtualnej self-host.
Żądanie tokenu firmy Microsoft Entra w celu uwierzytelnienia na maszynie wirtualnej z własnym hostem
Upewnij się, że prawidłowe wartości są zastępowane w żądaniu curl.
curl --location --request POST 'https://login.microsoftonline.com/{TENANT_ID}/oauth2/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'client_id={CLIENT_ID} ' \ --data-urlencode 'client_secret={CLIENT_SECRET}' \ --data-urlencode 'resource=https://management.core.windows.net'
Oto przykład odpowiedzi z żądania:
{ "token_type": "Bearer", "expires_in": "86399", "ext_expires_in": "86399", "expires_on": "1599663998", "not_before": "1599577298", "resource": "https://management.core.windows.net", "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJS…" }
Przesyłanie żądania dla samoobsługowej maszyny wirtualnej
Upewnij się, że token elementu nośnego i parametry są zastępowane prawidłowymi wartościami.
curl --location --request POST 'https://isvapp.azurewebsites.net/selftest-vm' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJS…' \ --data-raw '{ "DNSName": "avvm1.eastus.cloudapp.azure.com", "UserName": "azureuser", "Password": "SECURE_PASSWORD_FOR_THE_SSH_INTO_VM", "OS": "Linux", "PortNo": "22", "CompanyName": "COMPANY_NAME", "AppId": "CLIENT_ID_SAME_AS_USED_FOR_AAD_TOKEN ", "TenantId": "TENANT_ID_SAME_AS_USED_FOR_AAD_TOKEN" }'
Przykładowa odpowiedź wywołania interfejsu API maszyny wirtualnej samodzielnego testowania:
{ "TrackingId": "9bffc887-dd1d-40dd-a8a2-34cee4f4c4c3", "Response": "{\"SchemaVersion\":1,\"AppCertificationCategory\":\"Microsoft Single VM Certification\",\"ProviderID\":\"050DE427-2A99-46D4-817C-5354D3BF2AE8\",\"OSName\":\"Ubuntu 18.04\",\"OSDistro\":\"Ubuntu 18.04.5 LTS\",\"KernelVersion\":\"5.4.0-1023-azure\",\"KernelFullVersion\":\"Linux version 5.4.0-1023-azure (buildd@lgw01-amd64-053) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #23~18.04.1-Ubuntu SMP Thu Aug 20 14:46:48 UTC 2020\\n\",\"OSVersion\":\"18.04\",\"CreatedDate\":\"09/08/2020 01:13:47\",\"TestResult\":\"Pass\",\"APIVersion\":\"1.5\",\"Tests\":[{\"TestID\":\"48\",\"TestCaseName\":\"Bash History\",\"Description\":\"Bash history files should be cleared before creating the VM image.\",\"Result\":\"Passed\",\"ActualValue\":\"No file Exist\",\"RequiredValue\":\"1024\"},{\"TestID\":\"39\",\"TestCaseName\":\"Linux Agent Version\",\"Description\":\"Azure Linux Agent Version 2.2.41 and above should be installed.\",\"Result\":\"Passed\",\"ActualValue\":\"2.2.49\",\"RequiredValue\":\"2.2.41\"},{\"TestID\":\"40\",\"TestCaseName\":\"Required Kernel Parameters\",\"Description\":\"Verifies the following kernel parameters are set console=ttyS0, earlyprintk=ttyS0, rootdelay=300\",\"Result\":\"Warning\",\"ActualValue\":\"Missing Parameter: rootdelay=300\\r\\nMatched Parameter: console=ttyS0,earlyprintk=ttyS0\",\"RequiredValue\":\"console=ttyS0#earlyprintk=ttyS0#rootdelay=300\"},{\"TestID\":\"41\",\"TestCaseName\":\"Swap Partition on OS Disk\",\"Description\":\"Verifies that no Swap partitions are created on the OS disk.\",\"Result\":\"Passed\",\"ActualValue\":\"No. of Swap Partitions: 0\",\"RequiredValue\":\"swap\"},{\"TestID\":\"42\",\"TestCaseName\":\"Root Partition on OS Disk\",\"Description\":\"It is recommended that a single root partition is created for the OS disk.\",\"Result\":\"Passed\",\"ActualValue\":\"Root Partition: 1\",\"RequiredValue\":\"1\"},{\"TestID\":\"44\",\"TestCaseName\":\"OpenSSL Version\",\"Description\":\"OpenSSL Version should be >=0.9.8.\",\"Result\":\"Passed\",\"ActualValue\":\"1.1.1\",\"RequiredValue\":\"0.9.8\"},{\"TestID\":\"45\",\"TestCaseName\":\"Python Version\",\"Description\":\"Python version 2.6+ is highly recommended. \",\"Result\":\"Passed\",\"ActualValue\":\"2.7.17\",\"RequiredValue\":\"2.6\"},{\"TestID\":\"46\",\"TestCaseName\":\"Client Alive Interval\",\"Description\":\"It is recommended to set ClientAliveInterval to 180. On the application need, it can be set between 30 to 235. \\nIf you are enabling the SSH for your end users this value must be set as explained.\",\"Result\":\"Warning\",\"ActualValue\":\"120\",\"RequiredValue\":\"ClientAliveInterval 180\"},{\"TestID\":\"49\",\"TestCaseName\":\"OS Architecture\",\"Description\":\"Only 64-bit operating system should be supported.\",\"Result\":\"Passed\",\"ActualValue\":\"x86_64\\n\",\"RequiredValue\":\"x86_64,amd64\"},{\"TestID\":\"50\",\"TestCaseName\":\"Security threats\",\"Description\":\"Identifies OS with recent high profile vulnerability that might need patching. Ignore warning if system was patched as appropriate.\",\"Result\":\"Passed\",\"ActualValue\":\"Ubuntu 18.04\",\"RequiredValue\":\"OS impacted by GHOSTS\"},{\"TestID\":\"51\",\"TestCaseName\":\"Auto Update\",\"Description\":\"Identifies if Linux Agent Auto Update is enabled or not.\",\"Result\":\"Passed\",\"ActualValue\":\"# AutoUpdate.Enabled=y\\n\",\"RequiredValue\":\"Yes\"},{\"TestID\":\"52\",\"TestCaseName\":\"SACK Vulnerability patch verification\",\"Description\":\"Checks if the running Kernel Version has SACK vulnerability patch.\",\"Result\":\"Passed\",\"ActualValue\":\"Ubuntu 18.04.5 LTS,Linux version 5.4.0-1023-azure (buildd@lgw01-amd64-053) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #23~18.04.1-Ubuntu SMP Thu Aug 20 14:46:48 UTC 2020\",\"RequiredValue\":\"Yes\"}]}" }
Powiązana zawartość
- Zaloguj się do Centrum partnerskiego.