Azure 仮想マシン (VM) のイメージの認定Azure virtual machine (VM) image certification

この記事では、商業マーケットプレースで仮想マシン (VM) イメージをテストして送信し、Azure Marketplace の最新の公開要件を満たしていることを確認する方法について説明します。This article describes how to test and submit a virtual machine (VM) image in the commercial marketplace to ensure it meets the latest Azure Marketplace publishing requirements.

VM オファーを送信する前に、次の手順を完了します。Complete these steps before submitting your VM offer:

  1. 証明書を作成してデプロイします。Create and deploy certificates.
  2. 一般化されたイメージを使用して Azure VM をデプロイします。Deploy an Azure VM using your generalized image.
  3. 検証を実行します。Run validations.

Azure Key Vault の証明書を作成してデプロイするCreate and deploy certificates for Azure Key Vault

このセクションでは、Azure でホストされる仮想マシンへの Windows リモート管理 (WinRM) 接続を設定するために必要な自己署名証明書を作成してデプロイする方法について説明します。This section describes how to create and deploy the self-signed certificates required to set up Windows Remote Management (WinRM) connectivity to an Azure-hosted virtual machine.

Azure Key Vault の証明書を作成するCreate certificates for Azure Key Vault

このプロセスは 3 つのステップで構成されます。This process consists of three steps:

  1. セキュリティ証明書を作成します。Create the security certificate.
  2. 証明書を格納する Azure Key Vault を作成します。Create the Azure Key Vault to store the certificate.
  3. キー コンテナーに証明書を格納します。Store the certificates to the key vault.

この作業には使用する Azure リソース グループは新しいものでも既存のものでも構いません。You can use either a new or an existing Azure resource group for this work.

セキュリティ証明書を作成するCreate the security certificate

次の Azure PowerShell スクリプトを編集して実行し、ローカル フォルダーに証明書ファイル (.pfx) を作成します。Edit and run the following Azure PowerShell script to create the certificate file (.pfx) in a local folder. 次の表に示すパラメーターの値を置き換えます。Replace the values for the parameters shown in the following table.

パラメーターParameter 説明Description
$certroopath$certroopath .pfx ファイルの保存先となるローカル フォルダー。Local folder to save the .pfx file to.
$location$location Azure の標準的な地理的場所の 1 つ。One of the Azure standard geographic locations.
$vmName$vmName 予定の Azure 仮想マシンの名前。Name of the planned Azure virtual machine.
$certname$certname 証明書の名前。予定の VM の完全修飾ドメイン名と一致する必要があります。Name of the certificate; must match the fully qualified domain name of the planned VM.
$certpassword$certpassword 証明書のパスワード。予定の VM に使用されるパスワードと一致する必要があります。Password for the certificates, must match the password used for the planned VM.
   # Certification creation script

    # pfx certification stored path
    $certroopath = "C:\certLocation"

    # location of the resource group
    $location = "westus"

    # Azure virtual machine name that we are going to create
    $vmName = "testvm000000906"

    # Certification name - should match with FQDN of Windows Azure creating VM
    $certname = "$vmName.$location.cloudapp.azure.com"

    # Certification password - should be match with password of Windows Azure creating VM
    $certpassword = "SecretPassword@123"

    $cert=New-SelfSignedCertificate -DnsName "$certname" -CertStoreLocation cert:\LocalMachine\My
    $pwd = ConvertTo-SecureString -String $certpassword -Force -AsPlainText
    $certwithThumb="cert:\localMachine\my\"+$cert.Thumbprint
    $filepath="$certroopath\$certname.pfx"
    Export-PfxCertificate -cert $certwithThumb -FilePath $filepath -Password $pwd
    Remove-Item -Path $certwithThumb

ヒント

さまざまなパラメーターの値を保持するために、これらの手順の間、同じ Azure PowerShell コンソール セッションが開いて実行されている状態を維持してください。Keep the same Azure PowerShell console session open and running during these steps to retain the values of the various parameters.

警告

このスクリプトを保存する場合、セキュリティ情報 (パスワード) が含まれているため、安全な場所にのみ保存してください。If you save this script, only save it in a secure location because it contains security information (a password).

証明書を格納する Azure キー コンテナーを作成するCreate the Azure key vault to store the certificate

以下のテンプレートの内容をローカル コンピューター上のファイルにコピーします。Copy the contents of the template below to a file on your local machine. (下のサンプル スクリプトでは、このリソースは C:\certLocation\keyvault.json です。)In the example script below, this resource is C:\certLocation\keyvault.json).

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "keyVaultName": {
      "type": "string",
      "defaultValue":"isvkv0001",
      "metadata": {
        "description": "Name of the Vault"
      }
    },
    "tenantId": {
      "type": "string",
      "defaultValue":"72f988bf-86f1-41af-91ab-2d7cd011db47",
      "metadata": {
        "description": "Tenant Id of the subscription. Get using Get-AzureSubscription cmdlet or Get Subscription API"
      }
    },
    "objectId": {
      "type": "string",
      "defaultValue":"d55739bf-d5d6-4ce0-be1c-49ade53c4315",
      "metadata": {
        "description": "Object Id of the AD user. Get using Get-AzureADUser or Get-AzureADServicePrincipal cmdlets"
      }
    },
    "keysPermissions": {
      "type": "array",
      "defaultValue": ["all"],
      "metadata": {
        "description": "Permissions to keys in the vault. Valid values are: all, create, import, update, get, list, delete, backup, restore, encrypt, decrypt, wrapkey, unwrapkey, sign, and verify."
      }
    },
    "secretsPermissions": {
      "type": "array",
      "defaultValue": ["all"],
      "metadata": {
        "description": "Permissions to secrets in the vault. Valid values are: all, get, set, list, and delete."
      }
    },
    "skuName": {
      "type": "string",
      "defaultValue": "Standard",
      "allowedValues": [
        "Standard",
        "Premium"
      ],
      "metadata": {
        "description": "SKU for the vault"
      }
    },
    "enableVaultForDeployment": {
      "type": "bool",
      "defaultValue": true,
      "allowedValues": [
        true,
        false
      ],
      "metadata": {
        "description": "Specifies if the vault is enabled for a VM deployment"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.KeyVault/vaults",
      "name": "[parameters('keyVaultName')]",
      "apiVersion": "2015-06-01",
      "location": "[resourceGroup().location]",
      "properties": {
        "enabledForDeployment": "[parameters('enableVaultForDeployment')]",
        "tenantId": "[parameters('tenantId')]",
        "accessPolicies": [
          {
            "tenantId": "[parameters('tenantId')]",
            "objectId": "[parameters('objectId')]",
            "permissions": {
              "keys": "[parameters('keysPermissions')]",
              "secrets": "[parameters('secretsPermissions')]"
            }
          }
        ],
        "sku": {
          "name": "[parameters('skuName')]",
          "family": "A"
        }
      }
    }
  ]
}

次の Azure PowerShell スクリプトを編集して実行し、Azure Key Vault と関連リソース グループを作成します。Edit and run the following Azure PowerShell script to create an Azure Key Vault and the associated resource group. 次の表に示すパラメーターの値を置き換えますReplace the values for the parameters shown in the following table

パラメーターParameter 説明Description
$postfix$postfix デプロイ識別子に付加されるランダムな数値文字列。Random numeric string attached to deployment identifiers.
$rgName$rgName 作成する Azure リソース グループ (RG) の名前。Azure resource group (RG) name to create.
$location$location Azure の標準的な地理的場所の 1 つ。One of the Azure standard geographic locations.
$kvTemplateJson$kvTemplateJson キー コンテナー用の Resource Manager テンプレートを含むファイル (keyvault.json) のパス。Path of file (keyvault.json) containing Resource Manager template for key vault.
$kvname$kvname 新しいキー コンテナーの名前。Name of the new key vault.
    # Creating Key vault in resource group

    # "Random" number for deployment identifiers
    $postfix = "0101048"

    # Resource group name
    $rgName = "TestRG$postfix"

    # Location of Resource Group
    $location = "westus"

    # Key vault template location
    $kvTemplateJson = "C:\certLocation\keyvault.json"

    # Key vault name
    $kvname = "isvkv$postfix"

    # code snippet to get the Azure user object ID
    try
       {
        $accounts = Get-AzureAccount
        $accountNum = 0
        $accounts.Id | %{ ++$accountNum; Write-Host $accountNum $_}
        Write-Host "`nPlease select User, e.g. 1:" -ForegroundColor DarkYellow
        [Int] $accountChoice = Read-Host

        While($accountChoice -lt 1 -or $accountChoice -gt $accounts.Length)
        {
            Write-Host "incorrect input" -ForegroundColor Red
            Write-Host "`nPlease select User, e.g. 1:" -ForegroundColor DarkYellow
            [Int] $accountChoice = Read-Host
        }

        $accountSelected = $accounts[$accountChoice-1]
        echo $accountSelected
        $id = $accountSelected.Id

        Write-Host "User $id Selected"
        $myobjectId=(Get-AzADUser -Mail $id)[0].Id
      }
      catch
      {
      Write-Host $_.Exception.Message
      Break
      }

    # code snippet to get Azure User Tenant Id
      # SELECT Subscriptions
        #**************************************
        try
        {
        $subslist=Get-AzureSubscription
        for($i=1; $i -le $subslist.Length;$i++)
        {
           Write-Host ($i.ToString() +":"+ $subslist[$i-1].SubscriptionName)
        }
        Write-Host "`nPlease pick subscription from above, e.g. 1:" -ForegroundColor DarkYellow
        [int] $selectedsub=Read-Host

        While($selectedsub -lt 1 -or $selectedsub -gt $subslist.Length)
        {
            Write-Host "incorrect input" -ForegroundColor Red
            for($i=1; $i -le $subslist.Length;$i++)
             {
              Write-Host ($i.ToString() +":"+ $subslist[$i-1].SubscriptionName)
             }
            Write-Host "`nPlease pick subscription from above, e.g. 1:" -ForegroundColor DarkYellow
           [int] $selectedsub=Read-Host
        }
        if($selectedsub -ge 1 -and $selectedsub -le $subslist.Length)
        {
        $mysubid=$subslist[$selectedsub-1].SubscriptionId
        $mysubName=$subslist[$selectedsub-1].SubscriptionName
        $mytenantId=$subslist[$selectedsub-1].TenantId
        Write-Host "$mysubName selected"
        }
        }
        catch
        {
        Write-Host $_.Exception.Message
        Break
        }

    # Create a resource group
     Write-Host "Creating Resource Group $rgName"
     Create-ResourceGroup -rgName $rgName -location $location
     Write-Host "-----------------------------------"

    # Create key vault and configure access
    New-AzResourceGroupDeployment -Name "kvdeploy$postfix" -ResourceGroupName $rgName -TemplateFile $kvTemplateJson -keyVaultName $kvname -tenantId $mytenantId -objectId $myobjectId

    Set-AzKeyVaultAccessPolicy -VaultName $kvname -ObjectId $myobjectId -PermissionsToKeys all -PermissionsToSecrets all

キー コンテナーに証明書を格納するStore the certificates to the key vault

次のスクリプトを使用して、.pfx ファイルに含まれる証明書を新しいキー コンテナーに格納します。Store the certificates contained in the .pfx file to the new key vault using this script:

     $fileName =$certroopath+"\$certname"+".pfx"

     $fileContentBytes = get-content $fileName -Encoding Byte
     $fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)

            $jsonObject = @"
    {
    "data": "$filecontentencoded",
    "dataType" :"pfx",
    "password": "$certpassword"
    }
"@
            echo $certpassword
            $jsonObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($jsonObject)
            $jsonEncoded = [System.Convert]::ToBase64String($jsonObjectBytes)
            $secret = ConvertTo-SecureString -String $jsonEncoded -AsPlainText -Force
            $objAzureKeyVaultSecret=Set-AzureKeyVaultSecret -VaultName $kvname -Name "ISVSecret$postfix" -SecretValue $secret
            echo $objAzureKeyVaultSecret.Id

一般化されたイメージを使用して Azure VM をデプロイするDeploy an Azure VM using your generalized image

このセクションでは、一般化された VHD イメージをデプロイして新しい Azure VM リソースを作成する方法について説明します。This section describes how to deploy a generalized VHD image to create a new Azure VM resource. このプロセスでは、指定された Azure Resource Manager テンプレートと Azure PowerShell スクリプトを使用します。For this process, we'll use the supplied Azure Resource Manager template and Azure PowerShell script.

Azure Resource Manager テンプレートを準備するPrepare an Azure Resource Manager template

VHD デプロイ用の次の Azure Resource Manager テンプレートを、VHDtoImage.json という名前のローカル ファイルにコピーします。Copy the following Azure Resource Manager template for VHD deployment to a local file named VHDtoImage.json. 次のスクリプトは、この JSON を使用するためにローカル コンピューター上の場所を要求します。The next script will request the location on the local machine to use this JSON.

{
    "$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "userStorageAccountName": {
            "type": "string"
        },
        "userStorageContainerName": {
            "type": "string",
            "defaultValue": "vhds"
        },
        "dnsNameForPublicIP": {
            "type": "string"
        },
        "adminUserName": {
            "defaultValue": "isv",
            "type": "string"
        },
        "adminPassword": {
            "type": "securestring",
            "defaultValue": "Password@123"
        },
        "osType": {
            "type": "string",
            "defaultValue": "windows",
            "allowedValues": [
                "windows",
                "linux"
            ]
        },
        "subscriptionId": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "vmSize": {
            "type": "string"
        },
        "publicIPAddressName": {
            "type": "string"
        },
        "vmName": {
            "type": "string"
        },
        "virtualNetworkName": {
            "type": "string"
        },
        "nicName": {
            "type": "string"
        },
        "vaultName": {
            "type": "string",
            "metadata": {
                "description": "Name of the KeyVault"
            }
        },
        "vaultResourceGroup": {
            "type": "string",
            "metadata": {
                "description": "Resource Group of the KeyVault"
            }
        },
        "certificateUrl": {
            "type": "string",
            "metadata": {
                "description": "Url of the certificate with version in KeyVault e.g. https://testault.vault.azure.net/secrets/testcert/b621es1db241e56a72d037479xab1r7"
            }
        },
        "vhdUrl": {
            "type": "string",
            "metadata": {
                "description": "VHD Url..."
            }
        }
    },
        "variables": {
            "addressPrefix": "10.0.0.0/16",
            "subnet1Name": "Subnet-1",
            "subnet2Name": "Subnet-2",
            "subnet1Prefix": "10.0.0.0/24",
            "subnet2Prefix": "10.0.1.0/24",
            "publicIPAddressType": "Dynamic",
            "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]",
            "subnet1Ref": "[concat(variables('vnetID'),'/subnets/',variables('subnet1Name'))]",
            "osDiskVhdName": "[concat('http://',parameters('userStorageAccountName'),'.blob.core.windows.net/',parameters('userStorageContainerName'),'/',parameters('vmName'),'osDisk.vhd')]"
        },
        "resources": [
            {
                "apiVersion": "2015-05-01-preview",
                "type": "Microsoft.Network/publicIPAddresses",
                "name": "[parameters('publicIPAddressName')]",
                "location": "[parameters('location')]",
                "properties": {
                    "publicIPAllocationMethod": "[variables('publicIPAddressType')]",
                    "dnsSettings": {
                        "domainNameLabel": "[parameters('dnsNameForPublicIP')]"
                    }
                }
            },
            {
                "apiVersion": "2015-05-01-preview",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('virtualNetworkName')]",
                "location": "[parameters('location')]",
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "[variables('addressPrefix')]"
                        ]
                    },
                    "subnets": [
                        {
                            "name": "[variables('subnet1Name')]",
                            "properties": {
                                "addressPrefix": "[variables('subnet1Prefix')]"
                            }
                        },
                        {
                            "name": "[variables('subnet2Name')]",
                            "properties": {
                                "addressPrefix": "[variables('subnet2Prefix')]"
                            }
                        }
                    ]
                }
            },
            {
                "apiVersion": "2015-05-01-preview",
                "type": "Microsoft.Network/networkInterfaces",
                "name": "[parameters('nicName')]",
                "location": "[parameters('location')]",
                "dependsOn": [
                    "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPAddressName'))]",
                    "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]"
                ],
                "properties": {
                    "ipConfigurations": [
                        {
                            "name": "ipconfig1",
                            "properties": {
                                "privateIPAllocationMethod": "Dynamic",
                                "publicIPAddress": {
                                    "id": "[resourceId('Microsoft.Network/publicIPAddresses',parameters('publicIPAddressName'))]"
                                },
                                "subnet": {
                                    "id": "[variables('subnet1Ref')]"
                                }
                            }
                        }
                    ]
                }
            },
            {
                "apiVersion": "2015-06-15",
                "type": "Microsoft.Compute/virtualMachines",
                "name": "[parameters('vmName')]",
                "location": "[parameters('location')]",
                "dependsOn": [
                    "[concat('Microsoft.Network/networkInterfaces/', parameters('nicName'))]"
                ],
                "properties": {
                    "hardwareProfile": {
                        "vmSize": "[parameters('vmSize')]"
                    },
                    "osProfile": {
                        "computername": "[parameters('vmName')]",
                        "adminUsername": "[parameters('adminUsername')]",
                        "adminPassword": "[parameters('adminPassword')]",
                        "secrets": [
                            {
                                "sourceVault": {
                                    "id": "[resourceId(parameters('vaultResourceGroup'), 'Microsoft.KeyVault/vaults', parameters('vaultName'))]"
                                },
                                "vaultCertificates": [
                                    {
                                        "certificateUrl": "[parameters('certificateUrl')]",
                                        "certificateStore": "My"
                                    }
                                ]
                            }
                        ],
                        "windowsConfiguration": {
                            "provisionVMAgent": "true",
                            "winRM": {
                                "listeners": [
                                    {
                                        "protocol": "http"
                                    },
                                    {
                                        "protocol": "https",
                                        "certificateUrl": "[parameters('certificateUrl')]"
                                    }
                                ]
                            },
                            "enableAutomaticUpdates": "true"
                        }
                    },
                    "storageProfile": {
                        "osDisk": {
                            "name": "[concat(parameters('vmName'),'-osDisk')]",
                            "osType": "[parameters('osType')]",
                            "caching": "ReadWrite",
                            "image": {
                                "uri": "[parameters('vhdUrl')]"
                            },
                            "vhd": {
                                "uri": "[variables('osDiskVhdName')]"
                            },
                            "createOption": "FromImage"
                        }
                    },
                    "networkProfile": {
                        "networkInterfaces": [
                            {
                                "id": "[resourceId('Microsoft.Network/networkInterfaces',parameters('nicName'))]"
                            }
                        ]
                    },
                "diagnosticsProfile": {
                    "bootDiagnostics": {
                        "enabled": true,
                        "storageUri": "[concat('http://', parameters('userStorageAccountName'), '.blob.core.windows.net')]"
                    }
                }
                }
            }
        ]
    }

このファイルを編集して、次のパラメーターの値を指定します。Edit this file to provide values for these parameters:

パラメーターParameter 説明Description
ResourceGroupNameResourceGroupName 既存の Azure リソース グループ名。Existing Azure resource group name. 通常は、ご利用のキー コンテナーと同じ RG を使用します。Typically, use the same RG as your key vault.
TemplateFileTemplateFile VHDtoImage.json ファイルの完全なパス名。Full pathname to the file VHDtoImage.json.
userStorageAccountNameuserStorageAccountName ストレージ アカウントの名前。Name of the storage account.
sNameForPublicIPsNameForPublicIP パブリック IP の DNS 名。小文字にする必要があります。DNS name for the public IP; must be lowercase.
subscriptionIdsubscriptionId Azure サブスクリプションの識別子。Azure subscription identifier.
場所Location リソース グループの標準的な Azure 地理的場所。Standard Azure geographic location of the resource group.
vmNamevmName 仮想マシンの名前。Name of the virtual machine.
vaultNamevaultName キー コンテナーの名前。Name of the key vault.
vaultResourceGroupvaultResourceGroup Key Vault のリソース グループ。Resource group of the key vault.
certificateUrlcertificateUrl キー コンテナーに格納されているバージョンを含む、証明書の Web アドレス (URL)。例: https://testault.vault.azure.net/secrets/testcert/b621es1db241e56a72d037479xab1r7Web address (URL) of the certificate, including version stored in the key vault, for example: https://testault.vault.azure.net/secrets/testcert/b621es1db241e56a72d037479xab1r7.
vhdUrlvhdUrl 仮想ハード ディスクの Web アドレス。Web address of the virtual hard disk.
vmSizevmSize 仮想マシン インスタンスのサイズ。Size of the virtual machine instance.
publicIPAddressNamepublicIPAddressName パブリック IP アドレスの名前。Name of the public IP address.
virtualNetworkNamevirtualNetworkName 仮想ネットワークの名前。Name of the virtual network.
nicNamenicName 仮想ネットワーク用のネットワーク インターフェイス カードの名前。Name of the network interface card for the virtual network.
adminUserNameadminUserName 管理者アカウントのユーザー名。Username of the administrator account.
adminPasswordadminPassword 管理者パスワード。Administrator password.

Azure VM をデプロイするDeploy an Azure VM

次のスクリプトをコピーして編集し、変数 $storageaccount$vhdUrl の値を指定します。Copy and edit the following script to provide values for the $storageaccount and $vhdUrl variables. それを実行して、汎用化された既存の VHD から Azure VM リソースを作成します。Execute it to create an Azure VM resource from your existing generalized VHD.


# storage account of existing generalized VHD

$storageaccount = "testwinrm11815"

# generalized VHD URL

$vhdUrl = "https://testwinrm11815.blob.core.windows.net/vhds/testvm1234562016651857.vhd"

echo "New-AzResourceGroupDeployment -Name "dplisvvm$postfix" -ResourceGroupName "$rgName" -TemplateFile "C:\certLocation\VHDtoImage.json" -userStorageAccountName "$storageaccount" -dnsNameForPublicIP "$vmName" -subscriptionId "$mysubid" -location "$location" -vmName "$vmName" -vaultName "$kvname" -vaultResourceGroup "$rgName" -certificateUrl $objAzureKeyVaultSecret.Id  -vhdUrl "$vhdUrl" -vmSize "Standard\_A2" -publicIPAddressName "myPublicIP1" -virtualNetworkName "myVNET1" -nicName "myNIC1" -adminUserName "isv" -adminPassword $pwd"

# deploying VM with existing VHD

New-AzResourceGroupDeployment -Name"dplisvvm$postfix" -ResourceGroupName"$rgName" -TemplateFile"C:\certLocation\VHDtoImage.json" -userStorageAccountName"$storageaccount" -dnsNameForPublicIP"$vmName" -subscriptionId"$mysubid" -location"$location" -vmName"$vmName" -vaultName"$kvname" -vaultResourceGroup"$rgName" -certificateUrl$objAzureKeyVaultSecret.Id  -vhdUrl"$vhdUrl" -vmSize"Standard\_A2" -publicIPAddressName"myPublicIP1" -virtualNetworkName"myVNET1" -nicName"myNIC1" -adminUserName"isv" -adminPassword$pwd

検証を実行するRun validations

デプロイされたイメージに対して検証を実行するには、次の 2 つの方法があります。There are two ways to run validations on the deployed image:

  • Azure 認定用の認定テスト ツールを使用するUse Certification Test Tool for Azure Certified
  • 自己テスト API を使用するUse the self-test API

認定テスト ツールをダウンロードして実行するDownload and run the certification test tool

Azure 認定用の認定テスト ツールはローカルの Windows マシン上で動作しますが、そのテスト対象は Azure ベースの Windows と Linux VM です。The Certification Test Tool for Azure Certified runs on a local Windows machine but tests an Azure-based Windows or Linux VM. これにより、ユーザーの VM イメージが Microsoft Azure で使用できることと、VHD を準備するにあたってのガイダンスと要件が満たされていることが認定されます。It certifies that your user VM image can be used with Microsoft Azure and that the guidance and requirements around preparing your VHD have been met. ツールの出力は、互換性レポートです。これをパートナー センター ポータルにアップロードして、VM 認定を要求します。The output of the tool is a compatibility report that you will upload to the Partner Center portal to request VM certification.

  1. 次のリンクから、Azure 認定用の認定テスト ツールの最新版をダウンロードしてインストールします。Download and install the most recent Certification Test Tool for Azure Certified.
  2. 認定ツールを開き、 [Start New Test](新規テストの開始) を選択します。Open the certification tool, then select Start New Test.
  3. [テスト情報] 画面で、実行するテストの名前を入力します。From the Test Information screen, enter a Test Name for the test run.
  4. VM のプラットフォームとして、Windows Server または Linux を選択します。Select the Platform for your VM, either Windows Server or Linux. ここでのプラットフォームの選択は、以降のオプションに影響します。Your platform choice affects the remaining options.
  5. 該当するデータベース サービスを VM で使用している場合、 [Test for Azure SQL Database](Azure SQL Database のテスト) チェック ボックスをオンにします。If your VM is using this database service, select the Test for Azure SQL Database check box.

VM イメージに認定ツールを接続するConnect the certification tool to a VM image

このツールは、Windows ベースの VM には Azure PowerShell で接続し、Linux VM には SSH.Net で接続します。The tool connects to Windows-based VMs with Azure PowerShell and connects to Linux VMs through SSH.Net.

Linux VM イメージに認定ツールを接続するConnect the certification tool to a Linux VM image

  1. [SSH Authentication](SSH 認証) モードを選択します:パスワード認証またはキー ファイル認証。Select the SSH Authentication mode: Password Authentication or Key File Authentication.

  2. パスワード ベースの認証を使用する場合は、 [VM DNS Name](VM の DNS 名)[User name](ユーザー名)[Password](パスワード) の値を入力します。If using password-­based authentication, enter values for the VM DNS Name, User name, and Password. 既定の SSH ポート番号を変更することもできます。You can also change the default SSH Port number.

    Azure 認定テスト ツール、Linux VM イメージのパスワード認証

  3. キー ファイル ベースの認証を使用する場合は、VM の DNS 名ユーザー名秘密キーの場所の値を入力します。If using key file-based authentication, enter values for the VM DNS Name, User name, and Private key location. パスフレーズを含めたり、既定の SSH ポート番号を変更したりすることもできます。You can also include a Passphrase or change the default SSH Port number.

Windows ベースの VM イメージへの認定ツールの接続Connect the certification tool to a Windows-based VM image

  1. 完全修飾 VM DNS 名 (MyVMName.Cloudapp.net など) を入力します。Enter the fully qualified VM DNS name (for example, MyVMName.Cloudapp.net).

  2. ユーザー名パスワードの値を入力します。Enter values for the User Name and Password.

    Azure 認定テスト ツール、Windows ベースの VM イメージのパスワード認証

認定テストを実行するRun a certification test

認定ツールで VM イメージのパラメーター値を入力したら、 [Test Connection](接続のテスト) を選択して、VM への有効な接続を作成します。After you've given the parameter values for your VM image in the certification tool, select Test Connection to create a valid connection to your VM. 接続の確認後、 [次へ] をクリックしてテストを開始します。After a connection is verified, select Next to start the test. テストが完了すると、テスト結果が表に表示されます。When the test is complete, the test results are shown in a table. [Status](状態) 列に、各テストについて Pass(合格)/Fail(不合格)/Warning(警告) が表示されます。The Status column shows (Pass/Fail/Warning) for each test. いずれかのテストが失敗した場合、イメージは認定 "されません"。If any of the tests fail, your image is not certified. その場合は、要件と失敗のメッセージを確認して、提案された変更を行い、テストを再実行します。In this case, review the requirements and failure messages, make the suggested changes, and run the test again.

自動テストが完了したら、 [Questionnaire](アンケート) 画面の 2 つのタブ ( [General Assessment](全般的な評価)[Kernel Customization](カーネルのカスタマイズ) ) で VM イメージに関する追加情報を入力し、 [Next](次へ) を選択します。After the automated test completes, provide additional information about your VM image on the two tabs of the Questionnaire screen, General Assessment and Kernel Customization, and then select Next.

最後の画面では、Linux VM イメージの SSH アクセス情報など、詳細情報を入力できるほか、例外を希望する場合は、 不合格となった評価の説明を入力できます。The last screen lets you provide more information, such as SSH access information for a Linux VM image, and an explanation for any failed assessments if you're looking for exceptions.

最後に [Generate Report](レポートの生成) を選択して、実行されたテスト ケースのテスト結果とログ ファイルを、アンケートに対する自分の回答と合わせてダウンロードします。Finally, select Generate Report to download the test results and log files for the executed test cases along with your answers to the questionnaire. VHD と同じコンテナーに結果を保存します。Save the results in the same container as your VHDs.

次のステップNext step