Migrera till Innovate Summit:
Lär dig hur migrering och modernisering till Azure kan öka företagets prestanda, motståndskraft och säkerhet, så att du kan använda AI fullt ut.Registrera dig nu
Den här webbläsaren stöds inte längre.
Uppgradera till Microsoft Edge och dra nytta av de senaste funktionerna och säkerhetsuppdateringarna, samt teknisk support.
Exempelskript för Azure Disk Encryption för virtuella Linux-datorer
Artikel
Varning
Den här artikeln refererar till CentOS, en Linux-distribution som har statusen End Of Life (EOL). Överväg att använda och planera i enlighet med detta. Mer information finns i CentOS End Of Life-vägledningen.
Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️
Den här artikeln innehåller exempelskript för att förbereda förkrypterade virtuella hårddiskar och andra uppgifter.
Anteckning
Alla skript refererar till den senaste, icke-AAD-versionen av ADE, förutom där det anges.
PowerShell-exempelskript för Azure Disk Encryption
Visa en lista över alla krypterade virtuella datorer i din prenumeration
Du hittar alla ADE-krypterade virtuella datorer och tilläggsversionen i alla resursgrupper som finns i en prenumeration med hjälp av det här PowerShell-skriptet.
Alternativt visar dessa cmdletar alla ADE-krypterade virtuella datorer (men inte tilläggsversionen):
Visa en lista över alla krypterade VMSS-instanser i din prenumeration
Du hittar alla ADE-krypterade VMSS-instanser och tilläggsversionen i alla resursgrupper som finns i en prenumeration med hjälp av det här PowerShell-skriptet.
Visa en lista över alla diskkrypteringshemligheter som används för att kryptera virtuella datorer i ett nyckelvalv
Använda PowerShell-skriptet för förhandskrav för Azure Disk Encryption
Om du redan är bekant med förhandskraven för Azure Disk Encryption kan du använda PowerShell-skriptet för Förhandskrav för Azure Disk Encryption. Ett exempel på hur du använder det här PowerShell-skriptet finns i snabbstarten Kryptera en virtuell dator. Du kan ta bort kommentarerna från ett avsnitt i skriptet, från och med rad 211, för att kryptera alla diskar för befintliga virtuella datorer i en befintlig resursgrupp.
I följande tabell visas vilka parametrar som kan användas i PowerShell-skriptet:
Parameter
Description
Obligatoriskt?
$resourceGroupName
Namnet på resursgruppen som KeyVault tillhör. En ny resursgrupp med det här namnet skapas om den inte finns.
Sant
$keyVaultName
Namnet på den KeyVault där krypteringsnycklar ska placeras. Ett nytt valv med det här namnet skapas om det inte finns något.
Sant
$location
KeyVaults plats. Kontrollera att keyVault och virtuella datorer som ska krypteras finns på samma plats. Hämta en innehållsplatslista med Get-AzLocation.
Sant
$subscriptionId
Identifierare för den Azure-prenumeration som ska användas. Du kan hämta ditt prenumerations-ID med Get-AzSubscription.
Sant
$aadAppName
Namnet på Microsoft Entra-programmet som ska användas för att skriva hemligheter till KeyVault. Om det inte redan finns ett program med det namnet skapas ett nytt. Om den här appen redan finns skickar du parametern aadClientSecret till skriptet.
Falsk
$aadClientSecret
Klienthemlighet för Microsoft Entra-programmet som skapades tidigare.
Falsk
$keyEncryptionKeyName
Namn på valfri nyckelkrypteringsnyckel i KeyVault. En ny nyckel med det här namnet skapas om det inte finns någon.
Falsk
Kryptera eller dekryptera virtuella datorer utan en Microsoft Entra-app
Skapar en ny krypterad hanterad disk med en förkrypterad virtuell hårddisk och motsvarande krypteringsinställningar
Kryptera en OS-enhet på en virtuell Linux-dator som körs
Krav för OS-diskkryptering
Den virtuella datorn måste använda en distribution som är kompatibel med OS-diskkryptering enligt listan i operativsystemet som stöds av Azure Disk Encryption
Den virtuella datorn måste skapas från Marketplace-avbildningen i Azure Resource Manager.
(För RHEL och CentOS) Inaktivera SELinux. Information om hur du inaktiverar SELinux finns i "4.4.2. Inaktivera SELinux" i SELinux-användar- och administratörsguiden på den virtuella datorn.
När du har inaktiverat SELinux startar du om den virtuella datorn minst en gång.
Steg
Skapa en virtuell dator med någon av de distributioner som angavs tidigare.
Konfigurera den virtuella datorn efter dina behov. Om du ska kryptera alla enheter (OS + data) måste dataenheterna anges och monteras från /etc/fstab.
Anteckning
Använd UUID=... för att ange dataenheter i /etc/fstab i stället för att ange blockenhetsnamnet (till exempel /dev/sdb1). Under krypteringen ändras ordningen på enheter på den virtuella datorn. Om den virtuella datorn förlitar sig på en specifik ordning på blockenheter kan den inte montera dem efter krypteringen.
Logga ut från SSH-sessionerna.
Om du vill kryptera operativsystemet anger du volumeType som Alla eller OPERATIVSYSTEM när du aktiverar kryptering.
Anteckning
Alla användarutrymmesprocesser som inte körs som systemd tjänster ska avlivas med en SIGKILL. Starta om den virtuella datorn. När du aktiverar OS-diskkryptering på en virtuell dator som körs planerar du driftstopp för virtuella datorer.
Övervaka krypteringens förlopp regelbundet med hjälp av anvisningarna i nästa avsnitt.
När Get-AzVmDiskEncryptionStatus visar "VMRestartPending" startar du om den virtuella datorn antingen genom att logga in på den eller med hjälp av portalen, PowerShell eller CLI.
OsVolumeEncrypted : VMRestartPending
DataVolumesEncrypted : NotMounted
OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings
ProgressMessage : OS disk successfully encrypted, reboot the VM
Innan du startar om rekommenderar vi att du sparar startdiagnostik för den virtuella datorn.
Förlopp för övervakning av OS-kryptering
Du kan övervaka förloppet för OS-kryptering på tre sätt:
Använd cmdleten Get-AzVmDiskEncryptionStatus och granska fältet ProgressMessage:
OsVolumeEncrypted : EncryptionInProgress
DataVolumesEncrypted : NotMounted
OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings
ProgressMessage : OS disk encryption started
När den virtuella datorn når "OS-diskkryptering har startats" tar det cirka 40 till 50 minuter på en premiumlagringsbaserad virtuell dator.
På grund av problemet #388 i WALinuxAgent OsVolumeEncrypted och DataVolumesEncrypted visas som Unknown i vissa distributioner. Med WALinuxAgent version 2.1.5 och senare åtgärdas det här problemet automatiskt. Om du ser Unknown i utdata kan du verifiera diskkrypteringsstatus med hjälp av Azure Resource Explorer.
Vi rekommenderar att du inte loggar in på den virtuella datorn medan OS-kryptering pågår. Kopiera loggarna endast när de andra två metoderna har misslyckats.
Förbereda en förkrypterad virtuell Linux-hårddisk
Förberedelserna för förkrypterade virtuella hårddiskar kan variera beroende på fördelningen. Exempel på hur du förbereder Ubuntu, openSUSE och CentOS 7 är tillgängliga.
Konfigurera kryptering under distributionsinstallationen genom att göra följande:
Välj Konfigurera krypterade volymer när du partitionerade diskarna.
Skapa en separat startenhet som inte får krypteras. Kryptera rotenheten.
Ange en lösenfras. Det här är lösenfrasen som du laddade upp till nyckelvalvet.
Slutför partitioneringen.
När du startar den virtuella datorn och uppmanas att ange en lösenfras använder du lösenfrasen som du angav i steg 3.
Förbered den virtuella datorn för uppladdning till Azure med hjälp av dessa instruktioner. Kör inte det sista steget (avetablera den virtuella datorn) ännu.
Konfigurera kryptering för att fungera med Azure genom att göra följande:
Skapa en fil under /usr/local/sbin/azure_crypt_key.sh, med innehållet i följande skript. Var uppmärksam på KeyFileName eftersom det är lösenfrasens filnamn som används av Azure.
Bash
#!/bin/sh
MountPoint=/tmp-keydisk-mount
KeyFileName=LinuxPassPhraseFileName
echo"Trying to get the key from disks ..." >&2
mkdir -p $MountPoint
modprobe vfat >/dev/null 2>&1
modprobe ntfs >/dev/null 2>&1
sleep 2
OPENED=0
cd /sys/block
for DEV in sd*; doecho"> Trying device: $DEV ..." >&2
mount -t vfat -r /dev/${DEV}1 $MountPoint >/dev/null||
mount -t ntfs -r /dev/${DEV}1 $MountPoint >/dev/null
if [ -f $MountPoint/$KeyFileName ]; then
cat $MountPoint/$KeyFileName
umount $MountPoint 2>/dev/null
OPENED=1
breakfi
umount $MountPoint 2>/dev/null
doneif [ $OPENED -eq 0 ]; thenecho"FAILED to find suitable passphrase file ..." >&2
echo -n "Try to enter your password: " >&2
read -s -r A </dev/console
echo -n "$A"elseecho"Success loading keyfile!" >&2
fi
Ändra kryptkonfigurationen i /etc/crypttab. Den bör se ut så här:
Redigera /etc/initramfs-tools/modules genom att lägga till rader:
config
vfat
ntfs
nls_cp437
nls_utf8
nls_iso8859-1
Kör update-initramfs -u -k all för att uppdatera initramfs för att börja keyscript gälla.
Nu kan du avetablera den virtuella datorn.
Fortsätt till nästa steg och ladda upp din virtuella hårddisk till Azure.
Utför följande steg för att konfigurera kryptering under distributionsinstallationen:
När du partitioneras diskarna väljer du Kryptera volymgrupp och anger sedan ett lösenord. Det här är lösenordet som du laddar upp till ditt nyckelvalv.
Lägg till följande rad i början av filen /usr/lib/dracut/modules.d/90crypt/parse-crypt.sh:
Bash
DRACUT_SYSTEMD=0
Och ändra alla förekomster av:
Bash
if [ -z "$DRACUT_SYSTEMD" ]; then
till:
Bash
if [ 1 ]; then
Redigera /usr/lib/dracut/modules.d/90crypt/cryptroot-ask.sh och lägg till den i "# Öppna LUKS-enhet":
Bash
MountPoint=/tmp-keydisk-mount
KeyFileName=LinuxPassPhraseFileName
echo"Trying to get the key from disks ..." >&2
mkdir -p $MountPoint >&2
modprobe vfat >/dev/null >&2
modprobe ntfs >/dev/null >&2
for SFS in /dev/sd*; doecho"> Trying device:$SFS..." >&2
mount ${SFS}1 $MountPoint -t vfat -r >&2 ||
mount ${SFS}1 $MountPoint -t ntfs -r >&2
if [ -f $MountPoint/$KeyFileName ]; thenecho"> keyfile got..." >&2
cp $MountPoint/$KeyFileName /tmp-keyfile >&2
luksfile=/tmp-keyfile
umount $MountPoint >&2
breakfidone
Kör /usr/sbin/dracut -f -v för att uppdatera initrd.
Nu kan du avetablera den virtuella datorn och ladda upp din virtuella hårddisk till Azure.
Utför följande steg för att konfigurera kryptering under distributionsinstallationen:
Välj Kryptera mina data när du partitionera diskar.
Kontrollera att Encrypt har valts för rotpartition.
Ange en lösenfras. Det här är lösenfrasen som du laddar upp till ditt nyckelvalv.
När du startar den virtuella datorn och uppmanas att ange en lösenfras använder du lösenfrasen som du angav i steg 3.
Förbered den virtuella datorn för uppladdning till Azure med hjälp av "CentOS 7.0+"-instruktionerna i Förbereda en CentOS-baserad virtuell dator för Azure. Kör inte det sista steget (avetablera den virtuella datorn) ännu.
Nu kan du avetablera den virtuella datorn och ladda upp din virtuella hårddisk till Azure.
Utför följande steg för att konfigurera kryptering så att den fungerar med Azure:
Redigera /etc/dracut.conf och lägg till följande rad:
config
add_drivers+=" vfat ntfs nls_cp437 nls_iso8859-1"
Kommentera ut dessa rader i slutet av filen /usr/lib/dracut/modules.d/90crypt/module-setup.sh:
Ladda upp hemligheten för den förkrypterade virtuella datorn till ditt nyckelvalv
När du krypterar med en Microsoft Entra-app (tidigare version) måste den diskkrypteringshemlighet som du hämtade tidigare laddas upp som en hemlighet i nyckelvalvet. Nyckelvalvet måste ha diskkryptering och behörigheter aktiverade för Microsoft Entra-klienten.
Diskkrypteringshemlighet som inte krypteras med en KEK
Om du vill konfigurera hemligheten i nyckelvalvet använder du Set-AzKeyVaultSecret. Lösenfrasen kodas som en base64-sträng och laddas sedan upp till nyckelvalvet. Kontrollera dessutom att följande taggar har angetts när du skapar hemligheten i nyckelvalvet.
Azure PowerShell
# This is the passphrase that was provided for encryption during the distribution installation$passphrase = "contoso-password"$tags = @{"DiskEncryptionKeyEncryptionAlgorithm" = "RSA-OAEP"; "DiskEncryptionKeyFileName" = "LinuxPassPhraseFileName"}
$secretName = [guid]::NewGuid().ToString()
$secretValue = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($passphrase))
$secureSecretValue = ConvertTo-SecureString$secretValue -AsPlainText -Force$secret = Set-AzKeyVaultSecret -VaultName$KeyVaultName -Name$secretName -SecretValue$secureSecretValue -tags$tags$secretUrl = $secret.Id
Innan du laddar upp hemligheten till nyckelvalvet kan du kryptera den med hjälp av en nyckelkrypteringsnyckel. Använd wrap-API:et för att först kryptera hemligheten med hjälp av nyckelkrypteringsnyckeln. Utdata från den här wrap-åtgärden är en base64 URL-kodad sträng som du sedan kan ladda upp som en hemlighet med hjälp av cmdleten Set-AzKeyVaultSecret .