本文介绍如何使用 Azure Migrate:服务器迁移(无代理复制)将 VMware VM 迁移到使用服务器端加密(SSE)和客户管理的密钥(CMK)加密的 Azure 虚拟机。
使用 Azure Migrate:服务器迁移门户体验,可以使用 无代理复制将 VMware VM 迁移到 Azure。 门户体验支持 DES/CMK。 应在开始复制之前创建 DES,并且必须在开始复制时提供 DES。 不能在迁移时提供。 在本文中,你将了解如何创建和部署 Azure 资源管理器模板 以复制 VMware VM 并将复制的磁盘配置为将 SSE 与 CMK 配合使用。
本文中的示例使用 Azure PowerShell 来执行创建和部署资源管理器模板所需的任务。
详细了解托管磁盘的服务器端加密 (SSE) 和客户管理的密钥 (CMK)。
- 查看有关通过无代理复制将 VMware VM 迁移到的 Azure 的教程,以了解工具要求。
- 按照以下说明 创建 Azure Migrate 项目,并将 Azure Migrate:服务器迁移 工具添加到项目中。
- 按照以下说明 在本地环境中为 VMware 设置 Azure Migrate 设备并完成发现。
VM 发现完成后,Azure Migrate:服务器迁移磁贴上的“发现的服务器”栏将显示通过工具发现的 VMware VM 数量。
在开始复制 VM 之前,需要准备复制基础结构。
在目标区域中创建一个服务总线实例。 本地 Azure Migrate 设备使用服务总线来与 Azure Migrate:服务器迁移服务进行通信,以协调复制和迁移。
创建用于从复制传输操作日志的存储帐户。
创建 Azure Migrate 设备将复制数据上传到的存储帐户。
创建一个密钥保管库,并将这个密钥保管库配置为在步骤 3 和 4 中创建的存储帐户上管理 blob 访问的共享访问签名令牌。
为在步骤 1 中创建的服务总线生成共享访问签名令牌,并为在上一步创建的密钥保管库中的令牌创建机密。
创建 Key Vault 访问策略,为本地 Azure Migrate 设备(使用设备 AAD 应用)和 Azure Migrate:服务器迁移服务访问 Key Vault 提供访问权限。
创建复制策略并配置 Azure Migrate:服务器迁移服务,其中包含在上一步中创建的复制基础结构的详细信息。
必须在目标 Azure 区域中创建复制基础结构以进行迁移,并在要将 VM 迁移到的目标 Azure 订阅中创建。
Azure Migrate:服务器迁移门户体验,通过在项目中首次复制 VM 时自动执行此操作,简化了复制基础结构的准备工作。 在本文中,我们假设已使用门户体验复制一个或多个 VM,并且已创建复制基础结构。 我们将介绍如何发现现有复制基础结构的详细信息,以及如何使用这些详细信息作为资源管理器模板的输入,该模板将用于设置使用 CMK 进行复制。
在 Azure 门户上,请转至“资源组”页上,选择在其中创建 Azure Migrate 项目的资源组。
从左侧菜单中选择“部署”,然后搜索以字符串“Microsoft.MigrateV2.VMwareV2EnableMigrate”开头的部署名称。 将会看到一个列表,其中列出了门户体验在此项目中为 VM 设置复制所创建的资源管理器模板。 我们将下载一个这样的模板,用它作为基础为使用 CMK 进行复制准备模板。
若要下载该模板,请选择与上一步中的字符串模式匹配的任何部署 > 从左侧菜单中选择“模板” 从顶部菜单中选择“下载”。> 在本地保存 template.json 文件。 将在上一步中编辑此模板文件。
磁盘加密集对象将托管磁盘映射到包含 CMK 的密钥保管库,以用于 SSE。 如果要使用 CMK 复制 VM,将要创建磁盘加密集,并将其作为输入传递给复制操作。
按照此处的示例使用 Azure PowerShell 创建磁盘加密集。 请确保在要将 VM 迁移到的目标订阅中创建磁盘加密集,并确保在迁移的目标 Azure 区域中创建磁盘加密集。
磁盘加密集可配置为使用客户管理的密钥对托管磁盘进行加密,或者使用客户管理的密钥和平台密钥进行双重加密。 如果要使用静态双重加密选项,请按此处所述配置磁盘加密集。
在下面显示的示例中,磁盘加密集配置为使用客户管理的密钥。
$Location = "chinanorth2" #Target Azure region for migration
$TargetResourceGroupName = "ContosoMigrationTarget"
$KeyVaultName = "ContosoCMKKV"
$KeyName = "ContosoCMKKey"
$KeyDestination = "Software"
$DiskEncryptionSetName = "ContosoCMKDES"
$KeyVault = New-AzKeyVault -Name $KeyVaultName -ResourceGroupName $TargetResourceGroupName -Location $Location -EnableSoftDelete -EnablePurgeProtection
$Key = Add-AzKeyVaultKey -VaultName $KeyVaultName -Name $KeyName -Destination $KeyDestination
$desConfig = New-AzDiskEncryptionSetConfig -Location $Location -SourceVaultId $KeyVault.ResourceId -KeyUrl $Key.Key.Kid -IdentityType SystemAssigned
$des = New-AzDiskEncryptionSet -Name $DiskEncryptionSetName -ResourceGroupName $TargetResourceGroupName -InputObject $desConfig
Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName -ObjectId $des.Identity.PrincipalId -PermissionsToKeys wrapkey,unwrapkey,get
New-AzRoleAssignment -ResourceName $KeyVaultName -ResourceGroupName $TargetResourceGroupName -ResourceType "Microsoft.KeyVault/vaults" -ObjectId $des.Identity.PrincipalId -RoleDefinitionName "Reader"
在此步骤中,将使用 Azure PowerShell 获取需要迁移的 VM 的详细信息。 这些详细信息将用来为复制构造资源管理器模板。 具体而言,有两个相关属性:
- 已发现的 VM 的计算机资源 ID。
- VM 及其磁盘标识符的磁盘列表。
$ProjectResourceGroup = "ContosoVMwareCMK" #Resource group that the Azure Migrate Project is created in
$ProjectName = "ContosoVMwareCMK" #Name of the Azure Migrate Project
$solution = Get-AzResource -ResourceGroupName $ProjectResourceGroup -ResourceType Microsoft.Migrate/MigrateProjects/solutions -ExpandProperties -ResourceName $ProjectName | where Name -eq "Servers-Discovery-ServerDis
covery"
# Displays one entry for each appliance in the project mapping the appliance to the VMware sites discovered through the appliance.
$solution.Properties.details.extendedDetails.applianceNameToSiteIdMapV2 | ConvertFrom-Json | select ApplianceName, SiteId
ApplianceName SiteId
------------- ------
VMwareApplianc /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.OffAzure/VMwareSites/VMwareApplianca8basite
复制 SiteId 字符串的值,该字符串对应于通过其发现 VM 的 Azure Migrate 设备。 在上面所示的示例中,SiteId 为“/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.OffAzure/VMwareSites/VMwareApplianca8basite”
#Replace value with SiteId from the previous step
$SiteId = "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.OffAzure/VMwareSites/VMwareApplianca8basite"
$SiteName = Get-AzResource -ResourceId $SiteId -ExpandProperties | Select-Object -ExpandProperty Name
$DiscoveredMachines = Get-AzResource -ResourceGroupName $ProjectResourceGroup -ResourceType Microsoft.OffAzure/VMwareSites/machines -ExpandProperties -ResourceName $SiteName
#Get machine details
PS /home/bharathram> $MachineName = "FPL-W19-09" #Replace string with VMware VM name of the machine to migrate
PS /home/bharathram> $machine = $Discoveredmachines | where {$_.Properties.displayName -eq $MachineName}
PS /home/bharathram> $machine.count #Validate that only 1 VM was found matching this name.
为要迁移的计算机复制 ResourceId、名称和磁盘 uuid 值。
PS > $machine.Name
10-150-8-52-b090bef3-b733-5e34-bc8f-eb6f2701432a_50098f99-f949-22ca-642b-724ec6595210
PS > $machine.ResourceId
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.OffAzure/VMwareSites/VMwareApplianca8basite/machines/10-150-8-52-b090bef3-b733-5e34-bc8f-eb6f2701432a_50098f99-f949-22ca-642b-724ec6595210
PS > $machine.Properties.disks | select uuid, label, name, maxSizeInBytes
uuid label name maxSizeInBytes
---- ----- ---- --------------
6000C291-5106-2aac-7a74-4f33c3ddb78c Hard disk 1 scsi0:0 42949672960
6000C293-39a1-bd70-7b24-735f0eeb79c4 Hard disk 2 scsi0:1 53687091200
6000C29e-cbee-4d79-39c7-d00dd0208aa9 Hard disk 3 scsi0:2 53687091200
- 在所选编辑器中打开在“标识复制基础结构组件”步骤中下载的资源管理器模板文件。
- 除了类型为“Microsoft.RecoveryServices/vaults/replicationFabrics/replicationProtectionContainers/replicationMigrationItems”的资源,从模板中删除所有资源定义
- 如果有多个以上类型的资源定义,请删除得只留一个。 从资源定义中删除所有“dependsOn”属性定义。
- 在此步骤结束时,应该有一个类似于以下示例的文件,并且具有相同的属性集。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.RecoveryServices/vaults/replicationFabrics/replicationProtectionContainers/replicationMigrationItems",
"apiVersion": "2018-01-10",
"name": "ContosoMigration7371rsvault/VMware104e4replicationfabric/VMware104e4replicationcontainer/10-150-8-52-b090bef3-b733-5e34-bc8f-eb6f2701432a_500937f3-805e-9414-11b1-f22923456e08",
"properties": {
"policyId": "/Subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ContosoMigration/providers/Microsoft.RecoveryServices/vaults/ContosoMigration7371rsvault/replicationPolicies/migrateVMware104e4sitepolicy",
"providerSpecificDetails": {
"instanceType": "VMwareCbt",
"vmwareMachineId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ContosoMigration/providers/Microsoft.OffAzure/VMwareSites/VMware104e4site/machines/10-150-8-52-b090bef3-b733-5e34-bc8f-eb6f2701432a_500937f3-805e-9414-11b1-f22923456e08",
"targetResourceGroupId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/PayrollRG",
"targetNetworkId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/PayrollRG/providers/Microsoft.Network/virtualNetworks/PayrollNW",
"targetSubnetName": "PayrollSubnet",
"licenseType": "NoLicenseType",
"disksToInclude": [
{
"diskId": "6000C295-dafe-a0eb-906e-d47cb5b05a1d",
"isOSDisk": "true",
"logStorageAccountId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ContosoMigration/providers/Microsoft.Storage/storageAccounts/migratelsa1432469187",
"logStorageAccountSasSecretName": "migratelsa1432469187-cacheSas",
"diskType": "Standard_LRS"
}
],
"dataMoverRunAsAccountId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ContosoMigration/providers/Microsoft.OffAzure/VMwareSites/VMware104e4site/runasaccounts/cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
"snapshotRunAsAccountId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ContosoMigration/providers/Microsoft.OffAzure/VMwareSites/VMware104e4site/runasaccounts/cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
"targetBootDiagnosticsStorageAccountId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ContosoMigration/providers/Microsoft.Storage/storageAccounts/migratelsa1432469187",
"targetVmName": "PayrollWeb04"
}
}
}
]
}
- 编辑资源定义中的“name”属性。 将“name”属性中最后一个“/”后面的字符串替换为“$machine.Name”的值(来自上一步)。
- 将“properties.providerSpecificDetails.vmwareMachineId”属性的值更改为“$machine.ResourceId”的值(来自上一步)。
- 分别将“targetResourceGroupId”、“targetNetworkId”、“targetSubnetName”的值设置为目标资源组 ID、目标虚拟网络资源 ID 和目标子网名称。
- 将“licenseType”的值设置为“WindowsServer”,为这个 VM 应用 Azure 混合权益。 如果此 VM 不符合 Azure 混合权益的条件,请将“licenseType”的值设置为 NoLicenseType。
- 将“targetVmName”属性的值更改为已迁移 VM 所需的 Azure 虚拟机名称。
- 可选择在“targetVmName”属性下面添加一个名为“targetVmSize”的属性。 将“targetVmSize”属性的值更改为已迁移 VM 所需的 Azure 虚拟机大小。
- “disksToInclude”属性是用于复制的磁盘输入列表,每个列表项都代表一个本地磁盘。 在本地虚拟机上创建与磁盘数相同数量的列表项。 将列表项中的“diskId”属性替换为上一步中标识的磁盘的 uuid。 将 VM 的操作系统磁盘的“isOSDisk”值设置为“true”,将所有其他磁盘设置为“false”。 保留“logStorageAccountId”和“logStorageAccountSasSecretName”属性不变。 将“diskType”值设置为 Azure 托管磁盘类型(“Standard_LRS、Premium_LRS、StandardSSD_LRS”)用于磁盘。 对于需要使用 CMK 加密的磁盘,请添加名为“diskEncryptionSetId”的属性,并将值设置为在“创建磁盘加密集”步骤中创建的磁盘加密集 ($des.Id) 的资源 ID
- 保存编辑后的模板文件。 对于上面的示例,编辑后的模板文件如下所示:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.RecoveryServices/vaults/replicationFabrics/replicationProtectionContainers/replicationMigrationItems",
"apiVersion": "2018-01-10",
"name": "ContosoVMwareCMK00ddrsvault/VMwareApplianca8bareplicationfabric/VMwareApplianca8bareplicationcontainer/10-150-8-52-b090bef3-b733-5e34-bc8f-eb6f2701432a_50098f99-f949-22ca-642b-724ec6595210",
"properties": {
"policyId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.RecoveryServices/vaults/ContosoVMwareCMK00ddrsvault/replicationPolicies/migrateVMwareApplianca8basitepolicy",
"providerSpecificDetails": {
"instanceType": "VMwareCbt",
"vmwareMachineId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.OffAzure/VMwareSites/VMwareApplianca8basite/machines/10-150-8-52-b090bef3-b733-5e34-bc8f-eb6f2701432a_50098f99-f949-22ca-642b-724ec6595210",
"targetResourceGroupId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoMigrationTarget",
"targetNetworkId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/cmkRTest/providers/Microsoft.Network/virtualNetworks/cmkvm1_vnet",
"targetSubnetName": "cmkvm1_subnet",
"licenseType": "NoLicenseType",
"disksToInclude": [
{
"diskId": "6000C291-5106-2aac-7a74-4f33c3ddb78c",
"isOSDisk": "true",
"logStorageAccountId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.Storage/storageAccounts/migratelsa1671875959",
"logStorageAccountSasSecretName": "migratelsa1671875959-cacheSas",
"diskEncryptionSetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/CONTOSOMIGRATIONTARGET/providers/Microsoft.Compute/diskEncryptionSets/ContosoCMKDES",
"diskType": "Standard_LRS"
},
{
"diskId": "6000C293-39a1-bd70-7b24-735f0eeb79c4",
"isOSDisk": "false",
"logStorageAccountId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.Storage/storageAccounts/migratelsa1671875959",
"logStorageAccountSasSecretName": "migratelsa1671875959-cacheSas",
"diskEncryptionSetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/CONTOSOMIGRATIONTARGET/providers/Microsoft.Compute/diskEncryptionSets/ContosoCMKDES",
"diskType": "Standard_LRS"
},
{
"diskId": "6000C29e-cbee-4d79-39c7-d00dd0208aa9",
"isOSDisk": "false",
"logStorageAccountId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.Storage/storageAccounts/migratelsa1671875959",
"logStorageAccountSasSecretName": "migratelsa1671875959-cacheSas",
"diskEncryptionSetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/CONTOSOMIGRATIONTARGET/providers/Microsoft.Compute/diskEncryptionSets/ContosoCMKDES",
"diskType": "Standard_LRS"
}
],
"dataMoverRunAsAccountId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.OffAzure/VMwareSites/VMwareApplianca8basite/runasaccounts/cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
"snapshotRunAsAccountId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.OffAzure/VMwareSites/VMwareApplianca8basite/runasaccounts/cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
"targetBootDiagnosticsStorageAccountId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoVMwareCMK/providers/Microsoft.Storage/storageAccounts/migratelsa1671875959",
"performAutoResync": "true",
"targetVmName": "FPL-W19-09"
}
}
}
]
}
现在可以将已编辑的资源管理器模板部署到项目资源组,以便为 VM 设置复制。 了解如何 使用 Azure 资源管理器模板和 Azure PowerShell 部署资源
New-AzResourceGroupDeployment -ResourceGroupName $ProjectResourceGroup -TemplateFile "C:\Users\Administrator\Downloads\template.json"
DeploymentName : template
ResourceGroupName : ContosoVMwareCMK
ProvisioningState : Succeeded
Timestamp : 3/11/2020 8:52:00 PM
Mode : Incremental
TemplateLink :
Parameters :
Outputs :
DeploymentDebugLogLevel :
通过门户体验监视复制状态,并执行测试迁移和迁移。