你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Set-AzVMDiskEncryptionExtension
在 Azure 中正在运行的 IaaS 虚拟机上启用加密。
语法
Set-AzVMDiskEncryptionExtension
[-ResourceGroupName] <String>
[-VMName] <String>
[-DiskEncryptionKeyVaultUrl] <String>
[-DiskEncryptionKeyVaultId] <String>
[[-KeyEncryptionKeyUrl] <String>]
[[-KeyEncryptionKeyVaultId] <String>]
[[-KeyEncryptionAlgorithm] <String>]
[[-VolumeType] <String>]
[[-SequenceVersion] <String>]
[[-TypeHandlerVersion] <String>]
[[-Name] <String>]
[[-Passphrase] <String>]
[-Force]
[-DisableAutoUpgradeMinorVersion]
[-SkipVmBackup]
[-ExtensionType <String>]
[-ExtensionPublisherName <String>]
[-EncryptFormatAll]
[-DefaultProfile <IAzureContextContainer>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AzVMDiskEncryptionExtension
[-ResourceGroupName] <String>
[-VMName] <String>
[-AadClientID] <String>
[-AadClientSecret] <String>
[-DiskEncryptionKeyVaultUrl] <String>
[-DiskEncryptionKeyVaultId] <String>
[[-KeyEncryptionKeyUrl] <String>]
[[-KeyEncryptionKeyVaultId] <String>]
[[-KeyEncryptionAlgorithm] <String>]
[[-VolumeType] <String>]
[[-SequenceVersion] <String>]
[[-TypeHandlerVersion] <String>]
[[-Name] <String>]
[[-Passphrase] <String>]
[-Force]
[-DisableAutoUpgradeMinorVersion]
[-SkipVmBackup]
[-ExtensionType <String>]
[-ExtensionPublisherName <String>]
[-EncryptFormatAll]
[-DefaultProfile <IAzureContextContainer>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AzVMDiskEncryptionExtension
[-ResourceGroupName] <String>
[-VMName] <String>
[-AadClientID] <String>
[-AadClientCertThumbprint] <String>
[-DiskEncryptionKeyVaultUrl] <String>
[-DiskEncryptionKeyVaultId] <String>
[[-KeyEncryptionKeyUrl] <String>]
[[-KeyEncryptionKeyVaultId] <String>]
[[-KeyEncryptionAlgorithm] <String>]
[[-VolumeType] <String>]
[[-SequenceVersion] <String>]
[[-TypeHandlerVersion] <String>]
[[-Name] <String>]
[[-Passphrase] <String>]
[-Force]
[-DisableAutoUpgradeMinorVersion]
[-SkipVmBackup]
[-ExtensionType <String>]
[-ExtensionPublisherName <String>]
[-EncryptFormatAll]
[-DefaultProfile <IAzureContextContainer>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AzVMDiskEncryptionExtension
[-ResourceGroupName] <String>
[-VMName] <String>
[[-KeyEncryptionAlgorithm] <String>]
[[-VolumeType] <String>]
[[-SequenceVersion] <String>]
[[-TypeHandlerVersion] <String>]
[[-Name] <String>]
[[-Passphrase] <String>]
[-Force]
[-DisableAutoUpgradeMinorVersion]
[-SkipVmBackup]
[-ExtensionType <String>]
[-ExtensionPublisherName <String>]
[-EncryptFormatAll]
[-Migrate]
[-DefaultProfile <IAzureContextContainer>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AzVMDiskEncryptionExtension
[-ResourceGroupName] <String>
[-VMName] <String>
[[-KeyEncryptionAlgorithm] <String>]
[[-VolumeType] <String>]
[[-SequenceVersion] <String>]
[[-TypeHandlerVersion] <String>]
[[-Name] <String>]
[[-Passphrase] <String>]
[-Force]
[-DisableAutoUpgradeMinorVersion]
[-SkipVmBackup]
[-ExtensionType <String>]
[-ExtensionPublisherName <String>]
[-EncryptFormatAll]
[-MigrationRecovery]
[-DefaultProfile <IAzureContextContainer>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
说明
Set-AzVMDiskEncryptionExtension cmdlet 在 Azure 中正在运行的基础结构即服务(IaaS)虚拟机上启用加密。 它通过在虚拟机上安装磁盘加密扩展来启用加密。
此 cmdlet 需要用户确认,因为启用加密的步骤之一需要重启虚拟机。
建议在运行此 cmdlet 之前在虚拟机上保存工作。
Linux: 加密 Linux 虚拟机时需要 VolumeType 参数,并且必须设置为 Linux 分发支持的值(“Os”、“Data”或“All”。
Windows: 可以省略 VolumeType 参数,在这种情况下,操作默认为“全部”;如果 Windows 虚拟机存在 VolumeType 参数,则必须将其设置为“全部”或“OS”。
示例
示例 1:启用加密
$RGName = "MyResourceGroup"
$VMName = "MyTestVM"
$VaultName= "MyKeyVault"
$KeyVault = Get-AzKeyVault -VaultName $VaultName -ResourceGroupName $RGName
$DiskEncryptionKeyVaultUrl = $KeyVault.VaultUri
$KeyVaultResourceId = $KeyVault.ResourceId
$VolumeType = "All"
Set-AzVMDiskEncryptionExtension -ResourceGroupName $RGName -VMName $VMName -DiskEncryptionKeyVaultUrl $DiskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -VolumeType $VolumeType
此示例在不指定 AD 凭据的情况下在 VM 上启用加密。
示例 2:使用管道输入启用加密
$params = New-Object PSObject -Property @{
ResourceGroupName = "[resource-group-name]"
VMName = "[vm-name]"
DiskEncryptionKeyVaultId = "/subscriptions/[subscription-id-guid]/resourceGroups/[resource-group-name]/providers/Microsoft.KeyVault/vaults/[keyvault-name]"
DiskEncryptionKeyVaultUrl = "https://[keyvault-name].vault.azure.net"
KeyEncryptionKeyVaultId = "/subscriptions/[subscription-id-guid]/resourceGroups/[resource-group-name]/providers/Microsoft.KeyVault/vaults/[keyvault-name]"
KeyEncryptionKeyUrl = "https://[keyvault-name].vault.azure.net/keys/[kekname]/[kek-unique-id]"
VolumeType = "All"
}
$params | Set-AzVMDiskEncryptionExtension
此示例使用管道输入发送参数,以便在 VM 上启用加密,而无需指定 AD 凭据。
示例 3:使用 Microsoft Entra 客户端 ID 和客户端密码启用加密
$RGName = "MyResourceGroup"
$VMName = "MyTestVM"
$AADClientID = "<clientID of your Azure AD app>"
$AADClientSecret = "<clientSecret of your Azure AD app>"
$VaultName= "MyKeyVault"
$KeyVault = Get-AzKeyVault -VaultName $VaultName -ResourceGroupName $RGName
$DiskEncryptionKeyVaultUrl = $KeyVault.VaultUri
$KeyVaultResourceId = $KeyVault.ResourceId
$VolumeType = "All"
Set-AzVMDiskEncryptionExtension -ResourceGroupName $RGName -VMName $VMName -AadClientID $AADClientID -AadClientSecret $AADClientSecret -DiskEncryptionKeyVaultUrl $DiskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -VolumeType $VolumeType
此示例使用 Microsoft Entra 客户端 ID 和客户端密码在 VM 上启用加密。
示例 4:使用 Microsoft Entra 客户端 ID 和客户端认证指纹启用加密
$RGName = "MyResourceGroup"
$VMName = "MyTestVM"
#The KeyVault must have enabledForDiskEncryption property set on it
$VaultName= "MyKeyVault"
$KeyVault = Get-AzKeyVault -VaultName $VaultName -ResourceGroupName $RGName
$DiskEncryptionKeyVaultUrl = $KeyVault.VaultUri
$KeyVaultResourceId = $KeyVault.ResourceId
$VolumeType = "All"
# create Azure AD application and associate the certificate
$CertPath = "C:\certificates\examplecert.pfx"
$CertPassword = "Password"
$Cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($CertPath, $CertPassword)
$CertValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
$AzureAdApplication = New-AzADApplication -DisplayName "<Your Application Display Name>" -HomePage "<https://YourApplicationHomePage>" -IdentifierUris "<https://YouApplicationUri>" -CertValue $CertValue
$ServicePrincipal = New-AzADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId
$AADClientID = $AzureAdApplication.ApplicationId
$aadClientCertThumbprint= $cert.Thumbprint
#Upload pfx to KeyVault
$KeyVaultSecretName = "MyAADCert"
$FileContentBytes = Get-Content $CertPath -Encoding Byte
$FileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)
$JSONObject = @"
{
"data" : "$filecontentencoded",
"dataType" : "pfx",
"password" : "$CertPassword"
}
"@
$JSONObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($jsonObject)
$JSONEncoded = [System.Convert]::ToBase64String($jsonObjectBytes)
$Secret = ConvertTo-SecureString -String $JSONEncoded -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName $VaultName -Name $KeyVaultSecretName -SecretValue $Secret
Set-AzKeyVaultAccessPolicy -VaultName $VaultName -ResourceGroupName $RGName -EnabledForDeployment
#deploy cert to VM
$CertUrl = (Get-AzKeyVaultSecret -VaultName $VaultName -Name $KeyVaultSecretName).Id
$SourceVaultId = (Get-AzKeyVault -VaultName $VaultName -ResourceGroupName $RGName).ResourceId
$VM = Get-AzVM -ResourceGroupName $RGName -Name $VMName
$VM = Add-AzVMSecret -VM $VM -SourceVaultId $SourceVaultId -CertificateStore "My" -CertificateUrl $CertUrl
Update-AzVM -VM $VM -ResourceGroupName $RGName
#Enable encryption on the virtual machine using Azure AD client ID and client cert thumbprint
Set-AzVMDiskEncryptionExtension -ResourceGroupName $RGName -VMName $VMName -AadClientID $AADClientID -AadClientCertThumbprint $AADClientCertThumbprint -DiskEncryptionKeyVaultUrl $DiskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -VolumeType $VolumeType
此示例使用 Microsoft Entra 客户端 ID 和客户端认证指纹在 VM 上启用加密。
示例 5:使用 Microsoft密钥加密密钥使用 entra 客户端 ID、客户端密码和包装磁盘加密密钥启用加密
$RGName = "MyResourceGroup"
$VMName = "MyTestVM"
$AADClientID = "<clientID of your Azure AD app>"
$AADClientSecret = "<clientSecret of your Azure AD app>"
$VaultName= "MyKeyVault"
$KeyVault = Get-AzKeyVault -VaultName $VaultName -ResourceGroupName $RGName
$DiskEncryptionKeyVaultUrl = $KeyVault.VaultUri
$KeyVaultResourceId = $KeyVault.ResourceId
$VolumeType = "All"
$KEKName = "MyKeyEncryptionKey"
$KEK = Add-AzKeyVaultKey -VaultName $VaultName -Name $KEKName -Destination "Software"
$KeyEncryptionKeyUrl = $KEK.Key.kid
Set-AzVMDiskEncryptionExtension -ResourceGroupName $RGName -VMName $VMName -AadClientID $AADClientID -AadClientSecret $AADClientSecret -DiskEncryptionKeyVaultUrl $DiskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -KeyEncryptionKeyUrl $KeyEncryptionKeyUrl -KeyEncryptionKeyVaultId $KeyVaultResourceId -VolumeType $VolumeType
此示例使用 Microsoft Entra 客户端 ID 和客户端密码在 VM 上启用加密,并使用密钥加密密钥包装磁盘加密密钥。
示例 6:使用 Microsoft Entra 客户端 ID、客户端证书指纹和使用密钥加密密钥包装磁盘加密密钥启用加密
$RGName = "MyResourceGroup"
$VMName = "MyTestVM"
#The KeyVault must have enabledForDiskEncryption property set on it
$VaultName= "MyKeyVault"
$KeyVault = Get-AzKeyVault -VaultName $VaultName -ResourceGroupName $RGName
$DiskEncryptionKeyVaultUrl = $KeyVault.VaultUri
$KeyVaultResourceId = $KeyVault.ResourceId
$KEKName = "MyKeyEncryptionKey"
$KEK = Add-AzKeyVaultKey -VaultName $VaultName -Name $KEKName -Destination "Software"
$KeyEncryptionKeyUrl = $KEK.Key.kid
$VolumeType = "All"
# create Azure AD application and associate the certificate
$CertPath = "C:\certificates\examplecert.pfx"
$CertPassword = "Password"
$Cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($CertPath, $CertPassword)
$CertValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
$AzureAdApplication = New-AzADApplication -DisplayName "<Your Application Display Name>" -HomePage "<https://YourApplicationHomePage>" -IdentifierUris "<https://YouApplicationUri>" -CertValue $CertValue
$ServicePrincipal = New-AzADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId
$AADClientID = $AzureAdApplication.ApplicationId
$AADClientCertThumbprint= $Cert.Thumbprint
#Upload pfx to KeyVault
$KeyVaultSecretName = "MyAADCert"
$FileContentBytes = Get-Content $CertPath -Encoding Byte
$FileContentEncoded = [System.Convert]::ToBase64String($FileContentBytes)
$JSONObject = @"
{
"data" : "$filecontentencoded",
"dataType" : "pfx",
"password" : "$CertPassword"
}
"@
$JSONObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($JSONObject)
$JsonEncoded = [System.Convert]::ToBase64String($JSONObjectBytes)
$Secret = ConvertTo-SecureString -String $JSONEncoded -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName $VaultName-Name $KeyVaultSecretName -SecretValue $Secret
Set-AzKeyVaultAccessPolicy -VaultName $VaultName -ResourceGroupName $RGName -EnabledForDeployment
#deploy cert to VM
$CertUrl = (Get-AzKeyVaultSecret -VaultName $VaultName -Name $KeyVaultSecretName).Id
$SourceVaultId = (Get-AzKeyVault -VaultName $VaultName -ResourceGroupName $RGName).ResourceId
$VM = Get-AzVM -ResourceGroupName $RGName -Name $VMName
$VM = Add-AzVMSecret -VM $VM -SourceVaultId $SourceVaultId -CertificateStore "My" -CertificateUrl $CertUrl
Update-AzVM -VM $VM -ResourceGroupName $RGName
#Enable encryption on the virtual machine using Azure AD client ID and client cert thumbprint
Set-AzVMDiskEncryptionExtension -ResourceGroupName $RGname -VMName $VMName -AadClientID $AADClientID -AadClientCertThumbprint $AADClientCertThumbprint -DiskEncryptionKeyVaultUrl $DiskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -KeyEncryptionKeyUrl $KeyEncryptionKeyUrl -KeyEncryptionKeyVaultId $KeyVaultResourceId -VolumeType $VolumeType
此示例使用 Microsoft Entra 客户端 ID 和客户端证书指纹在 VM 上启用加密,并使用密钥加密密钥包装磁盘加密密钥。
参数
-AadClientCertThumbprint
指定有权将机密写入 KeyVault 的 Microsoft Entra 应用程序客户端证书的指纹。
作为先决条件,必须先将 Microsoft Entra 客户端证书部署到虚拟机的本地计算机 my
证书存储中。
Add-AzVMSecret cmdlet 可用于将证书部署到 Azure 中的虚拟机。
有关详细信息,请参阅 Add-AzVMSecret cmdlet 帮助。
该证书以前必须部署到我的证书存储的虚拟机本地计算机。
类型: | String |
Position: | 3 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-AadClientID
指定有权将机密 写入 KeyVault 的 Microsoft Entra 应用程序的客户端 ID。
类型: | String |
Position: | 2 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-AadClientSecret
指定有权将机密 写入 KeyVault 的 Microsoft Entra 应用程序的客户端机密。
类型: | String |
Position: | 3 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-Confirm
提示你在运行 cmdlet 之前进行确认。
类型: | SwitchParameter |
别名: | cf |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-DefaultProfile
用于与 Azure 通信的凭据、帐户、租户和订阅。
类型: | IAzureContextContainer |
别名: | AzContext, AzureRmContext, AzureCredential |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-DisableAutoUpgradeMinorVersion
指示此 cmdlet 禁用扩展的次要版本的自动升级。
类型: | SwitchParameter |
Position: | 14 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-DiskEncryptionKeyVaultId
指定应将虚拟机加密密钥上传到的 KeyVault 的资源 ID。
类型: | String |
Position: | 5 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-DiskEncryptionKeyVaultUrl
指定 虚拟机加密密钥应上传到的 KeyVault URL。
类型: | String |
Position: | 4 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-EncryptFormatAll
加密格式尚未加密的所有数据驱动器
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-ExtensionPublisherName
扩展发布者名称。 仅指定此参数以替代默认值“Microsoft.Azure.Security”。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-ExtensionType
扩展类型。 指定此参数以替代 Windows VM 的“AzureDiskEncryption”的默认值,并替代 Linux VM 的“AzureDiskEncryptionForLinux”。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Force
强制运行命令而不要求用户确认。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-KeyEncryptionAlgorithm
指定用于包装和解包虚拟机密钥加密密钥的算法。 默认值为 RSA-OAEP。
类型: | String |
接受的值: | RSA-OAEP, RSA1_5 |
Position: | 8 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-KeyEncryptionKeyUrl
指定用于包装和解包虚拟机加密密钥的密钥加密密钥的 URL。 这必须是完整的版本控制 URL。
类型: | String |
Position: | 6 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-KeyEncryptionKeyVaultId
指定 KeyVault 的资源 ID,其中包含用于包装和解包虚拟机加密密钥的密钥加密密钥。 这必须是完整的版本控制 URL。
类型: | String |
Position: | 7 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Migrate
启动将 VM 迁移到最新的Azure 磁盘加密扩展版本(不带 Microsoft Entra 凭据的 ADE)。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-MigrationRecovery
在迁移具有 Microsoft Entra ID 到 ADE 扩展版本的 ADE 扩展版本而不Microsoft Entra ID 的情况下启动迁移恢复。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-Name
指定表示扩展的 Azure 资源管理器 资源的名称。 如果省略 Name 参数,则安装的扩展将在 Windows 虚拟机上命名为 AzureDiskEncryption,Linux 虚拟机上的 AzureDiskEncryptionForLinux。
类型: | String |
别名: | ExtensionName |
Position: | 12 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Passphrase
指定用于加密 Linux 虚拟机的通行短语。 此参数不用于运行 Windows 操作系统的虚拟机。
类型: | String |
Position: | 13 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-ResourceGroupName
指定虚拟机资源组的名称。
类型: | String |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-SequenceVersion
指定虚拟机的加密操作的序列号。 对于在同一虚拟机上执行的每个加密操作,这都是唯一的。 Get-AzVMExtension cmdlet 可用于检索以前使用的序列号。
类型: | String |
Position: | 10 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-SkipVmBackup
跳过 Linux VM 的备份创建
类型: | SwitchParameter |
Position: | 15 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-TypeHandlerVersion
指定加密扩展的版本。
类型: | String |
别名: | HandlerVersion, Version |
Position: | 11 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-VMName
指定虚拟机的名称。
类型: | String |
别名: | ResourceName |
Position: | 1 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-VolumeType
指定要对其执行加密操作的虚拟机卷的类型:OS、Data 或 All。
Linux: 加密 Linux 虚拟机时需要 VolumeType 参数,并且必须设置为 Linux 分发支持的值(“Os”、“Data”或“All”。
Windows: 可以省略 VolumeType 参数,在这种情况下,操作默认为“全部”;如果 Windows 虚拟机存在 VolumeType 参数,则必须将其设置为“全部”或“OS”。
类型: | String |
接受的值: | OS, Data, All |
Position: | 9 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-WhatIf
显示运行该 cmdlet 时会发生什么情况。 cmdlet 未运行。
类型: | SwitchParameter |
别名: | wi |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |