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>]
Description
Set-AzVMDiskEncryptionExtension Cmdlet 可在 Azure 中執行中的基礎結構即服務 (IaaS) 虛擬機上啟用加密。 它會在虛擬機上安裝磁碟加密擴充功能來啟用加密。
此 Cmdlet 需要使用者確認,因為啟用加密的步驟之一需要重新啟動虛擬機。
建議您在執行此 Cmdlet 之前,先將工作儲存在虛擬機上。
Linux:加密 Linux 虛擬機時,需要 VolumeType 參數,而且必須設定為 Linux 散發套件所支援的值(“Os”、“Data”或 “All”。
Windows:可能會省略 VolumeType 參數,在此情況下,作業預設為 All;如果 Windows 虛擬機器有 VolumeType 參數,則必須將它設定為 All 或 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
此範例會在 VM 上啟用加密,而不指定 AD 認證。
範例 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 用戶端識別碼和用戶端密碼啟用加密
$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 用戶端識別碼和客戶端密碼,在 VM 上啟用加密。
範例 4:使用 Microsoft Entra 用戶端識別碼和客戶端認證指紋啟用加密
$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 用戶端識別碼和用戶端認證指紋,在 VM 上啟用加密。
範例 5:使用 Microsoft Entra 用戶端識別碼、客戶端密碼,以及使用密鑰加密金鑰包裝磁碟加密金鑰來啟用加密
$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 用戶端識別碼和客戶端密碼在 VM 上啟用加密,並使用密鑰加密金鑰包裝磁碟加密金鑰。
範例 6:使用 Microsoft Entra 用戶端識別碼、用戶端憑證指紋,以及使用密鑰加密金鑰包裝磁碟加密金鑰來啟用加密
$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 用戶端識別碼和用戶端憑證指紋,在 VM 上啟用加密,並使用金鑰加密金鑰包裝磁碟加密密鑰。
參數
-AadClientCertThumbprint
指定 Microsoft Entra 應用程式用戶端憑證的指紋,其有權將秘密寫入 KeyVaultmy
證書存儲。
Add-AzVMSecret Cmdlet 可用來將憑證部署至 Azure 中的虛擬機。
如需詳細資訊,請參閱 Add-AzVMSecret Cmdlet 說明。
憑證之前必須部署到虛擬機本機計算機,我的證書存儲。
類型: | String |
Position: | 3 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
-AadClientID
指定具有許可權將秘密寫入 KeyVault之 Microsoft Entra 應用程式的用戶端識別符。
類型: | 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 的資源識別碼。
類型: | String |
Position: | 5 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
-DiskEncryptionKeyVaultUrl
指定應該上傳虛擬機加密密鑰的 KeyVault URL。
類型: | String |
Position: | 4 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
-EncryptFormatAll
Encrypt-Format 尚未加密的所有數據磁碟驅動器
類型: | 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 的資源識別碼,其中包含用來包裝和解除包裝虛擬機加密密鑰的金鑰加密金鑰。 這必須是完整版本設定的 URL。
類型: | String |
Position: | 7 |
預設值: | None |
必要: | False |
接受管線輸入: | True |
接受萬用字元: | False |
-Migrate
起始將 VM 移轉至最新的 Azure 磁碟加密擴充功能版本 (ADE 但不Microsoft Entra 認證)。
類型: | SwitchParameter |
Position: | Named |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
-MigrationRecovery
在移轉具有 Microsoft Entra 識別碼到 ADE 擴充功能版本,而不需Microsoft Entra ID 的 ADE 擴充功能版本期間,起始移轉復原失敗。
類型: | SwitchParameter |
Position: | Named |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
-Name
指定代表延伸模組的 Azure Resource Manager 資源名稱。 如果省略 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、數據或全部。
Linux:加密 Linux 虛擬機時,需要 VolumeType 參數,而且必須設定為 Linux 散發套件所支援的值(“Os”、“Data”或 “All”。
Windows:可能會省略 VolumeType 參數,在此情況下,作業預設為 All;如果 Windows 虛擬機器有 VolumeType 參數,則必須將它設定為 All 或 OS。
類型: | String |
接受的值: | OS, Data, All |
Position: | 9 |
預設值: | None |
必要: | False |
接受管線輸入: | True |
接受萬用字元: | False |
-WhatIf
顯示 Cmdlet 執行時會發生什麼事。 Cmdlet 未執行。
類型: | SwitchParameter |
別名: | wi |
Position: | Named |
預設值: | False |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |