Compartir a través de


Prueba de una imagen de máquina virtual

En este artículo se describe cómo probar una imagen de máquina virtual (VM) para asegurarse de que cumple los requisitos de publicación más recientes de Azure Marketplace.

Implementación de una máquina virtual de Azure

Para implementar una máquina virtual desde Azure Compute Gallery (anteriormente conocido como Shared Image Gallery):

  1. Abra la versión de imagen de Azure Compute Gallery.
  2. Seleccione Crear máquina virtual.
  3. Proporcione un nombre de máquina virtual y seleccione un tamaño de máquina virtual.
  4. Seleccione Revisar + crear. Una vez que pase la validación, seleccione Crear.

Nota:

Para crear una máquina virtual a partir de un archivo vhd, siga las instrucciones que se indican Conectar la herramienta de certificación a una imagen de máquina virtual o en Uso de PowerShell para consumir la API de prueba automática.

Siga estos pasos antes de enviar la oferta de máquina virtual:

Ejecución de validaciones

Hay dos maneras de ejecutar validaciones en la imagen implementada.

Usar Certification Test Tool for Azure Certified

Importante

Para ejecutar la herramienta de prueba de certificación, el servicio de administración remota de Windows debe ejecutarse y configurarse en Windows. Esto permite el acceso al puerto 5986. Para más información, vea Instalación y configuración de Administración remota de Windows.

Descargar y ejecutar Certification Test Tool

Certification Test Tool for Azure Certified se ejecuta en un equipo Windows local, pero prueba una máquina virtual Linux o Windows basada en Azure. Verifica que la imagen de máquina virtual de usuario se puede usar con Microsoft Azure y que se han cumplido las instrucciones y los requisitos relacionados con la preparación del VHD.

  1. Descargue e instale la versión más reciente de Certification Test Tool for Azure Certified.
  2. Abra la herramienta de certificación y seleccione Iniciar nueva prueba.
  3. En la pantalla Información de prueba, escriba un nombre de prueba para la ejecución de pruebas.
  4. Seleccione la plataforma de la máquina virtual, ya sea Windows Server (permita el puerto 5986 para Windows) o Linux (permita el puerto 22 para Linux). La elección de plataforma afecta a las opciones restantes.
  5. Si la máquina virtual usa este servicio de base de datos, seleccione la casilla Prueba de Azure SQL Database.

Conectar la herramienta de certificación a una imagen de máquina virtual

  1. Seleccione el modo de autenticación SSH: Autenticación de contraseña o Autenticación de archivos de clave.

  2. Si usa la autenticación de contraseña, escriba los valores para Nombre DNS de máquina virtual, Nombre de usuario y Contraseña. También puede cambiar el número predeterminado de Puerto SSH.

    Muestra la selección de la información de la prueba de la máquina virtual.

  3. Si usa autenticación con archivo de clave, escriba valores para Nombre DNS de máquina virtual, Nombre de usuario y Ubicación de clave privada. También puede incluir una Frase de contraseña o cambiar el número predeterminado de Puerto SSH.

  4. Escriba el nombre DNS completo de la máquina virtual (por ejemplo, MyVMName.ClOudapp.net).

  5. Escriba el Nombre de usuario y la Contraseña.

    Muestra la selección del nombre de usuario y contraseña de la máquina virtual.

  6. Seleccione Siguiente.

Ejecutar una prueba de certificación

Una vez proporcionados los valores de parámetro para la imagen de máquina virtual en la herramienta de certificación, seleccione Probar conexión para crear una conexión válida a la máquina virtual. Una vez verificada la conexión, seleccione Siguiente para iniciar la prueba. Una vez completada la prueba, los resultados se muestran en una tabla. La columna Estado se muestra (Correcto/Error/Advertencia) para cada prueba. Si se produce un error en alguna de las pruebas, la imagen no está certificada. En ese caso, revise los requisitos y los mensajes de error, realice los cambios sugeridos y vuelva a ejecutar la prueba.

Una vez completada la prueba automatizada, proporcione información adicional sobre la imagen de máquina virtual en las dos pestañas de la pantalla Cuestionario, es decir, Evaluación general y Personalización del kernel, y, después, seleccione Siguiente.

La última pantalla permite proporcionar más información, como datos de acceso SSH para una imagen de máquina virtual Linux y una explicación sobre las evaluaciones con errores, en caso de que busque excepciones.

Por último, seleccione Generar informe para descargar los resultados de las pruebas y los archivos de registro de los casos de prueba ejecutados, junto con las respuestas al cuestionario.

Nota:

algunos publicadores tienen escenarios donde es necesario bloquear las máquinas virtuales, ya que tienen software como firewalls instalados en la máquina virtual. En este caso, descargue la herramienta de prueba certificada aquí y envíe el informe al soporte técnico del Centro de partners.

Uso de PowerShell para consumir la API de prueba automática

En el SO Linux

Llame a la API en PowerShell:

  1. Genere el token de acceso.
  2. Use el comando Invoke-WebRequest para llamar a la API.
  3. El método es Post y el tipo de contenido es JSON, tal como se muestra en la siguiente captura de pantalla y el ejemplo de código.
  4. Especifique los parámetros del cuerpo en formato JSON.

Los siguientes comandos generan un token de acceso:

$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

Muestra un ejemplo de pantalla para generar un token de acceso en PowerShell.

En este ejemplo, se muestra una llamada de PowerShell a la API (permita el puerto 22 durante la creación de la máquina virtual):

$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


Este es un ejemplo de llamada a la API en PowerShell:

Ejemplo de pantalla de una llamada a la API en PowerShell.


Mediante el ejemplo anterior, puede recuperar el archivo JSON y analizarlo para obtener los detalles siguientes:

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


En esta pantalla de ejemplo, que muestra $res.Content, se pueden ver los detalles de los resultados de las pruebas en formato JSON:

Ejemplo de pantalla de una llamada a la API en PowerShell con los detalles de los resultados de la prueba.


Este es un ejemplo de los resultados JSON de las pruebas que se ven en un visor JSON en línea (por ejemplo, Code Beautify o JSON Viewer).

Más resultados de pruebas en un visor JSON en línea.

En el SO Windows

Llame a la API en PowerShell:

  1. Use el comando Invoke-WebRequest para llamar a la API.
  2. El método es Post y el tipo de contenido es JSON, tal como se muestra en la siguiente pantalla de ejemplo y en el ejemplo de código.
  3. Cree los parámetros del cuerpo en formato JSON.

En este ejemplo de código, se muestra una llamada de PowerShell a la API (permita el puerto 5986 durante la creación de la máquina virtual):

$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

Estos ejemplos de pantalla muestran llamadas a la API en PowerShell:

Con la clave SSH:

Llamar a la API en PowerShell con una clave SSH.

Con contraseña:

Llamar a la API en PowerShell con una contraseña.


Mediante el ejemplo anterior, puede recuperar el archivo JSON y analizarlo para obtener los detalles siguientes:

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


En esta pantalla, que muestra $res.Content, se pueden ver los detalles de los resultados de las pruebas en formato JSON:

Detalles de los resultados de la prueba en formato JSON.


Este es un ejemplo de los resultados de las pruebas que se ven en un visor JSON en línea (por ejemplo, Code Beautify o JSON Viewer).

Resultados de pruebas en un visor JSON en línea.

Uso de CURL para consumir la API de prueba automática en el SO Linux

En este ejemplo, se usará curl para realizar una llamada POST API a Microsoft Entra ID y a la máquina virtual autohospedado.

  1. Solicitud de un token de Microsoft Entra para autenticarse en una máquina virtual autohospedada

    Asegúrese de que se sustituyen los valores correctos en la solicitud de 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'
    

    Este es un ejemplo de la respuesta de la solicitud:

    {
        "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. Enviar una solicitud para la máquina virtual de prueba automática

    Asegúrese de que el token de portador y los parámetros se sustituyen por los valores correctos.

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

    Respuesta de ejemplo de la llamada API de máquina virtual de prueba automática:

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

Pasos siguientes