Teilen über


Testen eines VM-Images

In diesem Artikel wird beschrieben, wie Sie ein VM-Image testen, um sicherzustellen, dass es die aktuellen Anforderungen für die Veröffentlichung im Azure Marketplace erfüllt.

Bereitstellen einer Azure-VM

So stellen Sie einen virtuellen Computer aus der Azure Compute Gallery (früher als Shared Image Gallery bekannt) bereit:

  1. Öffnen Sie die Azure Compute Gallery-Imageversion.
  2. Wählen Sie Virtuellen Computer Erstellen aus.
  3. Geben Sie einen Namen für die VM an, und wählen Sie eine VM-Größe aus.
  4. Klicken Sie auf Überprüfen + erstellen. Klicken Sie auf Erstellen, sobald die Überprüfung erfolgreich abgeschlossen ist.

Hinweis

Zum Erstellen einer VM aus einer VHD-Datei befolgen Sie die Anweisungen unter Verbinden des Zertifizierungstools mit einem VM-Image oder Nutzen der Selbsttest-API mithilfe von PowerShell.

Führen Sie die folgenden Schritte aus, bevor Sie Ihr VM-Angebot übermitteln:

Durchführen von Überprüfungen

Es gibt zwei Möglichkeiten, Überprüfungen für das bereitgestellte Image auszuführen.

Verwenden des „Certification Test Tool for Azure Certified“

Wichtig

Um das Tool zum Testen der Zertifizierung auszuführen, muss der Windows-Remoteverwaltungsdienst unter Windows konfiguriert sein und ausgeführt werden. Dies ermöglicht den Zugriff auf Port 5986. Informationen dazu finden Sie unter Installation und Konfiguration für die Windows-Remoteverwaltung.

Herunterladen und Ausführen des Tools zum Testen der Zertifizierung

Das Certification Test Tool for Azure Certified wird auf einem lokalen Windows-Computer ausgeführt, aber es wird eine Azure-basierte Windows- oder Linux-VM getestet. Das Tool zertifiziert, ob Ihr VM-Benutzerimage mit Microsoft Azure genutzt werden kann und ob während der Vorbereitung Ihrer virtuellen Festplatte die Richtlinien und Anforderungen erfüllt wurden.

  1. Laden Sie das neueste Certification Test Tool for Azure Certified herunter, und installieren Sie es.
  2. Öffnen Sie das Zertifizierungstool, und wählen Sie dann Neuen Test starten aus.
  3. Geben Sie im Bildschirm "Testinformationen" einen Testnamen für die Testausführung ein.
  4. Wählen Sie die Plattform für Ihre VM aus, entweder Windows Server (Port 5986 für Windows zulassen) oder Linux (Port 22 für Linux zulassen). Die Auswahl der Plattform wirkt sich auf die restlichen Optionen aus.
  5. Aktivieren Sie das Kontrollkästchen Für Azure SQL-Datenbank testen, wenn Ihre VM diesen Datenbankdienst verwendet.

Verbinden des Zertifizierungstools mit einem VM-Image

  1. Wählen Sie den SSH-Authentifizierungsmodus aus: Kennwortauthentifizierung oder Schlüsseldateiauthentifizierung.

  2. Geben Sie bei Verwendung der Authentifizierung per Kennwort Werte für den VM-DNS-Namen, den Benutzernamen und das Kennwort ein. Sie können auch die Standardnummer für den SSH-Port ändern.

    Zeigt die Auswahl von VM-Testinformationen.

  3. Wenn Sie die Authentifizierung per Schlüsseldatei verwenden, geben Sie Werte für den VM-DNS-Namen, den Benutzernamen und den Speicherort des privaten Schlüssels ein. Sie können auch eine Passphrase angeben oder die Standardnummer für den SSH-Port ändern.

  4. Geben Sie den vollqualifizierten VM-DNS-Namen ein (z. B. „MyVMName.Cloudapp.net“).

  5. Geben Sie Benutzername und Kennwort ein.

    Zeigt die Auswahl des VM-Benutzernamens und -Kennworts.

  6. Wählen Sie Weiter aus.

Ausführen eines Zertifizierungstests

Nachdem Sie die Parameterwerte für Ihr VM-Image im Zertifizierungstool angegeben haben, wählen Sie „Verbindung testen“ aus, um eine gültige Verbindung mit Ihrer VM herzustellen. Klicken Sie nach dem Überprüfen der Verbindung auf Weiter, um den Test zu starten. Nach Abschluss des Tests werden die Ergebnisse in einer Tabelle angezeigt. In der Spalte „Status“ wird für jeden Test „Bestanden“, „Fehler“ oder „Warnung“ angezeigt. Wenn eines der Tests fehlschlägt, ist Ihr Bild nicht zertifiziert. Überprüfen Sie in diesem Fall die Anforderungen und Fehlermeldungen, nehmen Sie die vorgeschlagenen Änderungen vor, und führen Sie den Test erneut durch.

Geben Sie nach Abschluss des automatisierten Tests auf dem Bildschirm Fragebogen auf den Registerkarten Allgemeine Bewertung und Kernelanpassung weitere Informationen zu Ihrem VM-Image an, und wählen Sie anschließend Weiter aus.

Im letzten Bildschirm können Sie zusätzliche Informationen angeben, z. B. SSH-Zugriffsinformationen für ein Linux-VM-Image und Erläuterungen für nicht erfolgreiche Bewertungen bei Ausnahmen.

Wählen Sie abschließend Bericht generieren aus, um zusätzlich zu Ihren Antworten im Fragebogen auch die Testergebnisse und Protokolldateien für die ausgeführten Testfälle herunterzuladen.

Hinweis

Einige Herausgeber verfügen über Szenarien, in denen VMs gesperrt werden müssen, da Software wie Firewalls auf der VM installiert ist. Laden Sie in diesem Fall das Certified-Testtool herunter, und übermitteln Sie den Bericht an den Partner Center-Support.

Nutzen der Selbsttest-API mithilfe von PowerShell

Linux-Betriebssystem

Aufrufen der API in PowerShell:

  1. Generieren Sie das Zugriffstoken.
  2. Verwenden Sie den Befehl „Invoke-WebRequest“, um die API aufzurufen.
  3. Die Methode ist Post und der Inhaltstyp JSON, wie im folgenden Codebeispiel und der Bildschirmaufnahme dargestellt.
  4. Geben Sie die Textparameter im JSON-Format an.

Die folgenden Befehle generieren ein Zugriffstoken:

$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

Zeigt ein Bildschirmbeispiel zum Generieren eines Zugriffstokens in PowerShell.

Dieses Beispiel zeigt einen PowerShell-Aufruf der API (Port 22 während der VM-Erstellung zulassen):

$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


Im Folgenden ein Beispiel für das Aufrufen der API in PowerShell:

Bildschirm mit einem Beispiel für das Aufrufen der API in PowerShell


Bei Verwendung des vorherigen Beispiels können Sie den JSON-Code abrufen und analysieren, um die folgenden Details zu erhalten:

$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)"
}


In diesem Beispielbildschirm mit $res.Content sind die Details der Testergebnisse im JSON-Format dargestellt:

Bildschirm mit einem Beispiel für das Aufrufen der API in PowerShell mit Details der Testergebnisse


Hier ein Beispiel für JSON-Testergebnisse, die in einem JSON-Onlineviewer angezeigt werden (z. B. Code Beautify oder JSON Viewer).

Weitere Testergebnisse in einem JSON-Onlineviewer

Windows-Betriebssystem

Aufrufen der API in PowerShell:

  1. Verwenden Sie den Befehl „Invoke-WebRequest“, um die API aufzurufen.
  2. Die Methode lautet „Post“ und der Inhaltstyp JSON, wie im folgenden Codebeispiel und Beispielbildschirm dargestellt.
  3. Erstellen Sie die Body-Parameter im JSON-Format.

Dieses Codebeispiel zeigt einen PowerShell-Aufruf der API (Port 5986 während der VM-Erstellung zulassen):

$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

Die folgenden Beispielbildschirme zeigen Beispiele für das Aufrufen der API in PowerShell:

Mit SSH-Schlüssel:

Aufrufen der API in PowerShell mit einem SSH-Schlüssel

Mit Kennwort:

Aufrufen der API in PowerShell mit einem Kennwort


Bei Verwendung des vorherigen Beispiels können Sie den JSON-Code abrufen und analysieren, um die folgenden Details zu erhalten:

$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)"
}


In diesem Bildschirm mit $res.Content sind die Details der Testergebnisse im JSON-Format dargestellt:

Details der Testergebnisse im JSON-Format


Hier ein Beispiel für Testergebnisse, die in einem JSON-Onlineviewer angezeigt werden (z. B. Code Beautify oder JSON Viewer).

Testergebnisse in einem JSON-Onlineviewer

Nutzen der Selbsttest-API unter dem Linux-Betriebssystem mithilfe von CURL

In diesem Beispiel wird curl verwendet, um einen POST-API-Aufruf an Microsoft Entra ID und die Self-Host-VM auszuführen.

  1. Anfordern eines Microsoft Entra-Tokens zur Authentifizierung bei vm selbst hosten

    Stellen Sie sicher, dass die Werte in der CURL-Anforderung durch die richtigen Werte ersetzt werden.

    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'
    

    Im Folgenden ein Beispiel für die Antwort auf die Anforderung:

    {
        "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…"
    }
    
  2. Übermitteln einer Anforderung für die Selbsttest-VM

    Stellen Sie sicher, dass das Bearertoken und die Parameter durch die richtigen Werte ersetzt werden.

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

    Beispielantwort auf den API-Aufruf der Selbsttest-VM:

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