Testare un'immagine di macchina virtuale
Questo articolo descrive come testare un'immagine di macchina virtuale (VM) per assicurarsi che soddisfi i requisiti di pubblicazione più recenti di Azure Marketplace.
Distribuire una macchina virtuale di Azure
Per distribuire una macchina virtuale dalla raccolta di calcolo di Azure (in precedenza nota come Raccolta immagini condivise) immagine:
- Aprire la versione dell'immagine della raccolta di calcolo di Azure.
- Selezionare Crea macchina virtuale.
- Specificare un nome macchina virtuale e selezionare le dimensioni di una macchina virtuale.
- Selezionare Rivedi e crea. Dopo aver superato la convalida, selezionare Crea.
Nota
Per creare una macchina virtuale da un file vhd, seguire le istruzioni riportate di seguito in Connessione lo strumento di certificazione a un'immagine di macchina virtuale o Usare PowerShell per usare l'API self-test.
Prima di inviare l'offerta di macchina virtuale, completare questi passaggi:
- Distribuire una macchina virtuale di Azure usando l'immagine generalizzata; vedere Creare una macchina virtuale usando una base approvata o creare una macchina virtuale usando la propria immagine.
- Eseguire convalide.
Eseguire convalide
Esistono due modi per eseguire le convalide nell'immagine distribuita.
Usare lo strumento di test della certificazione per Azure Certified
Importante
Per eseguire lo strumento di test di certificazione, il servizio Gestione remota Windows deve essere in esecuzione e configurato in Windows. In questo modo è possibile accedere alla porta 5986. Per informazioni, vedere Installazione e configurazione per Gestione remota Windows.
Scaricare ed eseguire lo strumento di test di certificazione
Lo strumento di test di certificazione per Azure Certified viene eseguito in un computer Windows locale, ma esegue il test di una macchina virtuale Linux o Windows basata su Azure. Lo strumento verifica che l'immagine di macchina virtuale dell'utente possa essere usata con Microsoft Azure e che siano stati soddisfatti i requisiti e le linee guida per la preparazione del disco rigido virtuale.
- Scaricare e installare lo strumento di test di certificazione per Azure Certified.
- Aprire lo strumento di certificazione, quindi selezionare Avvia nuovo test.
- Nella schermata Informazioni test immettere un nome test per l'esecuzione del test.
- Selezionare la piattaforma per la macchina virtuale, Ovvero Windows Server (consentire la porta 5986 per Windows) o Linux (consentire la porta 22 per Linux). La piattaforma scelta determina le opzioni rimanenti.
- Se la macchina virtuale usa questo servizio di database, selezionare la casella di controllo Test for Azure SQL Database (Test per il database SQL di Azure).
Connettere lo strumento di certificazione a un'immagine di macchina virtuale
Selezionare la modalità di autenticazione SSH: Autenticazione password o Autenticazione del file di chiave.
Se si usa l'autenticazione basata su password, immettere i valori per il nome DNS della macchina virtuale, il nome utente e la password. Facoltativamente, è possibile modificare il valore predefinito per la Porta SSH.
Se si usa l'autenticazione basata su file di chiavi, immettere i valori nei campi VM DNS Name (Nome DNS macchina virtuale), User name (Nome utente) e Private key (Chiave privata). È anche possibile specificare un valore per Passphrase o modificare il numero predefinito per il campo Porta SSH.
Immettere il nome DNS completo della macchina virtuale, ad esempio MyVMName.Cloudapp.net.
Immettere Nome utente e Password.
Seleziona Avanti.
Eseguire un test di certificazione
Dopo aver assegnato i valori dei parametri per l'immagine della macchina virtuale nello strumento di certificazione, selezionare Test Connessione ion per creare una connessione valida alla macchina virtuale. Dopo che la connessone è verificata, selezionare Next (Avanti) per avviare il test. Al termine del test, i risultati vengono visualizzati in una tabella. La colonna Stato mostra (Pass/Fail/Warning) per ogni test. Se uno dei test ha esito negativo, l'immagine non è certificata. In questo caso, esaminare i requisiti e i messaggi di errore, apportare le modifiche indicate ed eseguire nuovamente il test.
Al termine del test automatizzato, fornire informazioni aggiuntive sull'immagine della macchina virtuale nelle due schede della schermata Questionario, Valutazione generale e Personalizzazione kernel, quindi selezionare Avanti.
L'ultima schermata consente di fornire altre informazioni, ad esempio informazioni sull'accesso SSH per un'immagine di macchina virtuale Linux, e una spiegazione per eventuali valutazioni non riuscite se si cercano eccezioni.
Selezionare infine Genera report per scaricare i risultati del test e i file di log per i casi di test eseguiti, oltre alle risposte al questionario.
Nota
Alcuni editori hanno scenari in cui le macchine virtuali devono essere bloccate perché dispongono di software, ad esempio firewall installati nella macchina virtuale. In questo caso, scaricare lo strumento di test certificato qui e inviare il report al supporto del Centro per i partner.
Uso di PowerShell per usare l'API self-test
Nel sistema operativo Linux
Chiamare l'API in PowerShell:
- Generare il token di accesso.
- Usare il comando Invoke-WebRequest per chiamare l'API.
- Il metodo è POST e il tipo di contenuto è JSON, come illustrato nella schermata e nell'esempio di codice seguenti.
- Specificare i parametri del corpo in formato JSON.
I comandi seguenti generano un token di accesso:
$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
Questo esempio mostra una chiamata di PowerShell all'API (consentire la porta 22 durante la creazione della macchina virtuale):
$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
Ecco un esempio di chiamata dell'API in PowerShell:
Usando l'esempio precedente, è possibile recuperare il file JSON e analizzarlo in modo da ottenere i dettagli seguenti:
$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)"
}
Questa schermata di esempio, che mostra $res.Content
, mostra i dettagli dei risultati del test in formato JSON:
Di seguito è riportato un esempio di risultati dei test JSON visualizzati in un visualizzatore JSON online, ad esempio Code Beautify o JSON Viewer.
Nel sistema operativo Windows
Chiamare l'API in PowerShell:
- Usare il comando Invoke-WebRequest per chiamare l'API.
- Il metodo è Post e il tipo di contenuto è JSON, come illustrato nell'esempio di codice e nella schermata di esempio seguente.
- Creare i parametri del corpo in formato JSON.
Questo esempio di codice mostra una chiamata di PowerShell all'API (consentire la porta 5986 durante la creazione della macchina virtuale):
$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
Queste schermate di esempio mostrano esempi per chiamare l'API in PowerShell:
Con la chiave SSH:
Con password:
Usando l'esempio precedente, è possibile recuperare il file JSON e analizzarlo in modo da ottenere i dettagli seguenti:
$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)"
}
Questa schermata, che mostra $res.Content
, mostra i dettagli dei risultati del test in formato JSON:
Di seguito è riportato un esempio di risultati dei test visualizzati in un visualizzatore JSON online, ad esempio Code Beautify o JSON Viewer.
Uso di CURL per usare l'API self-test nel sistema operativo Linux
In questo esempio curl verrà usato per effettuare una chiamata API POST all'ID Microsoft Entra e alla macchina virtuale self-host.
Richiedere un token Microsoft Entra per l'autenticazione alla macchina virtuale self-host
Verificare che i valori corretti vengano sostituiti nella richiesta 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'
Di seguito è riportato un esempio della risposta dalla richiesta:
{ "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…" }
Inviare una richiesta per la macchina virtuale self-test
Verificare che il token di connessione e i parametri vengano sostituiti con i valori corretti.
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" }'
Risposta di esempio dalla chiamata api macchina virtuale self-test:
{ "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\"}]}" }
Passaggi successivi
- Accedere al Centro per i partner.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per