Azure Disk Encryption-mintaszkriptek Linux rendszerű virtuális gépekhez
Figyelemfelhívás
Ez a cikk az End Of Life (EOL) állapotú Linux-disztribúcióra, a CentOS-ra hivatkozik. Fontolja meg a használatát, és ennek megfelelően tervezze meg. További információ: CentOS End Of Life útmutató.
A következőkre vonatkozik: ✔️ Linux rendszerű virtuális gépek rugalmas méretezési ✔️ csoportjai
Ez a cikk példaszkripteket tartalmaz az előre titkosított virtuális merevlemezek és egyéb feladatok előkészítéséhez.
Feljegyzés
Minden szkript az ADE legújabb, nem AAD-verziójára hivatkozik, kivéve, ha fel van jegyezve.
Minta PowerShell-szkriptek az Azure Disk Encryptionhez
Az előfizetésben lévő összes titkosított virtuális gép listázása
Ezzel a PowerShell-szkripttel megtalálhatja az összes ADE-titkosított virtuális gépet és a bővítményverziót az előfizetésben található összes erőforráscsoportban.
Alternatív megoldásként ezek a parancsmagok az összes ADE-titkosított virtuális gépet megjelenítik (a bővítményverziót azonban nem):
$osVolEncrypted = {(Get-AzVMDiskEncryptionStatus -ResourceGroupName $_.ResourceGroupName -VMName $_.Name).OsVolumeEncrypted} $dataVolEncrypted= {(Get-AzVMDiskEncryptionStatus -ResourceGroupName $_.ResourceGroupName -VMName $_.Name).DataVolumesEncrypted} Get-AzVm | Format-Table @{Label="MachineName"; Expression={$_.Name}}, @{Label="OsVolumeEncrypted"; Expression=$osVolEncrypted}, @{Label="DataVolumesEncrypted"; Expression=$dataVolEncrypted}
Az előfizetés összes titkosított VMSS-példányának listázása
Ezzel a PowerShell-szkripttel megtalálhatja az összes ADE-titkosított VMSS-példányt és a bővítményverziót az előfizetésben található összes erőforráscsoportban.
A kulcstartóban lévő virtuális gépek titkosításához használt összes lemeztitkosítási titkos kód listázása
Get-AzKeyVaultSecret -VaultName $KeyVaultName | where {$_.Tags.ContainsKey('DiskEncryptionKeyFileName')} | format-table @{Label="MachineName"; Expression={$_.Tags['MachineName']}}, @{Label="VolumeLetter"; Expression={$_.Tags['VolumeLetter']}}, @{Label="EncryptionKeyURL"; Expression={$_.Id}}
Az Azure Disk Encryption előfeltételeinek PowerShell-szkript használata
Ha már ismeri az Azure Disk Encryption előfeltételeit, használhatja az Azure Disk Encryption előfeltételeinek PowerShell-szkriptet. Ennek a PowerShell-szkriptnek a használatára példaként tekintse meg a virtuális gép titkosítása rövid útmutatóját. A szkript egy szakaszából eltávolíthatja a megjegyzéseket a 211. sortól kezdve, ha egy meglévő erőforráscsoportban lévő meglévő virtuális gépek összes lemezét titkosítja.
Az alábbi táblázat azt mutatja be, hogy mely paraméterek használhatók a PowerShell-szkriptben:
Paraméter | Leírás | Kötelező? |
---|---|---|
$resourceGroupName | Annak az erőforráscsoportnak a neve, amelyhez a KeyVault tartozik. Ha nem létezik ilyen nevű erőforráscsoport, létrejön egy új erőforráscsoport. | Igaz |
$keyVaultName | Annak a KeyVaultnak a neve, amelyben a titkosítási kulcsokat el kell helyezni. Ha nem létezik, létrejön egy ilyen nevű új tároló. | Igaz |
$location | A KeyVault helye. Győződjön meg arról, hogy a titkosítandó KeyVault és virtuális gépek ugyanazon a helyen találhatók. A helyek listáját a következővel érheti el: Get-AzLocation . |
Igaz |
$subscriptionId | A használni kívánt Azure-előfizetés azonosítója. Az előfizetés-azonosítóját a következővel érheti el: Get-AzSubscription . |
Igaz |
$aadAppName | Annak a Microsoft Entra-alkalmazásnak a neve, amely titkos kulcsokat fog írni a KeyVaultba. Ha a megadott néven még nem létezik alkalmazás, a rendszer létrehoz egyet a beírt néven. Ha ez az alkalmazás már létezik, adja át az aadClientSecret paramétert a szkriptnek. | Hamis |
$aadClientSecret | A korábban létrehozott Microsoft Entra-alkalmazás ügyfélkódja. | Hamis |
$keyEncryptionKeyName | Az opcionális kulcstitkosítási kulcs neve a KeyVaultban. Ha nem létezik, létrejön egy új kulcs ezzel a névvel. | Hamis |
Virtuális gépek titkosítása vagy visszafejtése Microsoft Entra-alkalmazás nélkül
- Lemeztitkosítás engedélyezése meglévő vagy linuxos virtuális gépen
- Titkosítás letiltása futó Linux rendszerű virtuális gépen
- A titkosítás letiltása csak Linux rendszerű virtuális gépek adatköteteinél engedélyezett.
Virtuális gépek titkosítása vagy visszafejtése Egy Microsoft Entra-alkalmazással (korábbi kiadás)
- Lemeztitkosítás engedélyezése meglévő vagy linuxos virtuális gépen
- Titkosítás letiltása futó Linux rendszerű virtuális gépen
- A titkosítás letiltása csak Linux rendszerű virtuális gépek adatköteteinél engedélyezett.
- Új titkosított felügyelt lemez létrehozása előre titkosított VHD/storage-blobból
- Létrehoz egy új titkosított felügyelt lemezt, amely előre titkosított VHD-t és annak megfelelő titkosítási beállításait biztosítja
Operációsrendszer-meghajtó titkosítása futó Linux rendszerű virtuális gépen
Operációsrendszer-lemeztitkosítás előfeltételei
- A virtuális gépnek operációsrendszer-lemeztitkosítással kompatibilis disztribúciót kell használnia az Azure Disk Encryption által támogatott operációs rendszerekben felsoroltak szerint
- A virtuális gépet az Azure Resource Manager Marketplace-rendszerképéből kell létrehozni.
- Legalább 4 GB RAM-mal rendelkező Azure-beli virtuális gép (ajánlott méret: 7 GB). További információ: Memóriakövetelmények .
- (RHEL és CentOS esetén) Tiltsa le a SELinux parancsot. A SELinux letiltásához lásd: "4.4.2. A SELinux letiltása" a SELinux felhasználói és rendszergazdai útmutatójában a virtuális gépen.
- A SELinux letiltása után indítsa újra a virtuális gépet legalább egyszer.
Lépések
Hozzon létre egy virtuális gépet a korábban megadott disztribúciók egyikével.
Konfigurálja a virtuális gépet az igényeinek megfelelően. Ha az összes (OPERÁCIÓS + adat) meghajtót titkosítja, az adatmeghajtókat meg kell adni, és csatlakoztathatónak kell lennie a /etc/fstab fájlból.
Feljegyzés
Use UUID=... adatmeghajtók megadása a blokkeszköz neve helyett az /etc/fstab fájlban (például /dev/sdb1). A titkosítás során a meghajtók sorrendje megváltozik a virtuális gépen. Ha a virtuális gép a blokkeszközök meghatározott sorrendjére támaszkodik, a titkosítás után nem fogja csatlakoztatni őket.
Jelentkezzen ki az SSH-munkamenetekből.
Az operációs rendszer titkosításához adja meg a volumeType értéket mind vagy operációs rendszerként, amikor engedélyezi a titkosítást.
Feljegyzés
A szolgáltatásként
systemd
nem futó összes felhasználótér-folyamatot le kell ölni egySIGKILL
. Indítsa újra a virtuális gépet. Ha operációsrendszer-lemeztitkosítást engedélyez egy futó virtuális gépen, tervezze meg a virtuális gép állásidejét.A titkosítás előrehaladásának rendszeres monitorozása a következő szakaszban található utasítások használatával.
Miután a Get-AzVmDiskEncryptionStatus megjeleníti a "VMRestartPending" parancsot, indítsa újra a virtuális gépet a bejelentkezéssel, vagy a portál, a PowerShell vagy a parancssori felület használatával.
C:\> Get-AzVmDiskEncryptionStatus -ResourceGroupName $ResourceGroupName -VMName $VMName -ExtensionName $ExtensionName
OsVolumeEncrypted : VMRestartPending DataVolumesEncrypted : NotMounted OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings ProgressMessage : OS disk successfully encrypted, reboot the VM
Az újraindítás előtt javasoljuk, hogy mentse a virtuális gép rendszerindítási diagnosztikáit .
Operációs rendszer titkosítási folyamatának figyelése
Az operációs rendszer titkosításának előrehaladását három módon monitorozhatja:
Használja a
Get-AzVmDiskEncryptionStatus
parancsmagot, és vizsgálja meg a ProgressMessage mezőt:Get-AzVMDiskEncryptionStatus -ResourceGroupName $_.ResourceGroupName -VMName $_.Name
OsVolumeEncrypted : EncryptionInProgress DataVolumesEncrypted : NotMounted OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings ProgressMessage : OS disk encryption started
Miután a virtuális gép elérte az "operációsrendszer-lemez titkosítása elindult", körülbelül 40–50 percet vesz igénybe egy Premium Storage-alapú, támogatott virtuális gépen.
A WALinuxAgent
OsVolumeEncrypted
388-as hibája miatt, ésDataVolumesEncrypted
bizonyos disztribúciókban isUnknown
megjelenik. A WALinuxAgent 2.1.5-ös és újabb verziójával ez a probléma automatikusan ki lett javítva. Ha megjelenikUnknown
a kimenet, az Azure Resource Explorer használatával ellenőrizheti a lemeztitkosítás állapotát.Nyissa meg az Azure Resource Explorert, majd bontsa ki ezt a hierarchiát a bal oldali kijelölési panelen:
|-- subscriptions |-- [Your subscription] |-- resourceGroups |-- [Your resource group] |-- providers |-- Microsoft.Compute |-- virtualMachines |-- [Your virtual machine] |-- InstanceView
Az InstanceView-ban görgessen le a meghajtók titkosítási állapotának megtekintéséhez.
Tekintse meg a rendszerindítási diagnosztikát. Az ADE-bővítmény üzeneteinek előtaggal kell rendelkeznie
[AzureDiskEncryption]
.Jelentkezzen be a virtuális gépre SSH-val, és kérje le a bővítménynaplót a következő forrásból:
/var/log/azure/Microsoft.Azure.Security.AzureDiskEncryptionForLinux
Javasoljuk, hogy ne jelentkezzen be a virtuális gépre, amíg az operációs rendszer titkosítása folyamatban van. Csak akkor másolja ki a naplókat, ha a másik két metódus sikertelen volt.
Előre titkosított Linux VHD előkészítése
Az előre titkosított virtuális merevlemezek előkészítése a disztribúciótól függően változhat. Példák az Ubuntu, az openSUSE és a CentOS 7 előkészítésére.
Konfigurálja a titkosítást a terjesztési telepítés során az alábbi lépések végrehajtásával:
Válassza a Titkosított kötetek konfigurálása a lemezek particionálásakor lehetőséget.
Hozzon létre egy külön rendszerindító meghajtót, amelyet nem szabad titkosítani. Titkosítsa a gyökérmeghajtót.
Adjon meg egy jelszót. Ezt a jelszót töltötte fel a kulcstartóba.
Fejezze be a particionálást.
Amikor elindítja a virtuális gépet, és jelszót kér, használja a 3. lépésben megadott jelszót.
Készítse elő a virtuális gépet az Azure-ba való feltöltéshez az alábbi utasítások használatával. Még ne futtassa az utolsó lépést (a virtuális gép leépítését).
A titkosítás konfigurálása az Azure-ral való együttműködéshez az alábbi lépések végrehajtásával:
Hozzon létre egy fájlt az alábbi
/usr/local/sbin/azure_crypt_key.sh
szkript tartalmával. Ügyeljen a KeyFileName névre, mert ez az Azure által használt jelszófájlnév.#!/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*; do echo "> 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 break fi umount $MountPoint 2>/dev/null done if [ $OPENED -eq 0 ]; then echo "FAILED to find suitable passphrase file ..." >&2 echo -n "Try to enter your password: " >&2 read -s -r A </dev/console echo -n "$A" else echo "Success loading keyfile!" >&2 fi
Módosítsa a titkosítási konfigurációt a /etc/crypttab fájlban. Ennek így kell kinéznie:
xxx_crypt uuid=xxxxxxxxxxxxxxxxxxxxx none luks,discard,keyscript=/usr/local/sbin/azure_crypt_key.sh
Végrehajtható engedélyek hozzáadása a szkripthez:
sudo chmod +x /usr/local/sbin/azure_crypt_key.sh
Szerkesztés
/etc/initramfs-tools/modules
sorok hozzáfűzésével:vfat ntfs nls_cp437 nls_utf8 nls_iso8859-1
Futtassa
update-initramfs -u -k all
az initramfs frissítését akeyscript
hatás érvénybe lépéséhez.Most már megszüntetheti a virtuális gépet.
Folytassa a következő lépésben, és töltse fel a VHD-t az Azure-ba.
Titkosított VHD feltöltése Azure-tárfiókba
A DM-Crypt titkosításának engedélyezése után a helyi titkosított VHD-t fel kell tölteni a tárfiókba.
Add-AzVhd [-Destination] <Uri> [-LocalFilePath] <FileInfo> [[-NumberOfUploaderThreads] <Int32> ] [[-BaseImageUriToPatch] <Uri> ] [[-OverWrite]] [ <CommonParameters>]
Az előre titkosított virtuális gép titkos kódjának feltöltése a kulcstartóba
A Microsoft Entra-alkalmazás (korábbi kiadás) használatával történő titkosításkor a korábban beszerzett lemeztitkosítási titkos kulcsot titkos kódként kell feltölteni a kulcstartóba. A kulcstartónak engedélyeznie kell a lemeztitkosítást és az engedélyeket a Microsoft Entra-ügyfél számára.
$AadClientId = "My-AAD-Client-Id"
$AadClientSecret = "My-AAD-Client-Secret"
$key vault = New-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName -Location $Location
Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName -ServicePrincipalName $AadClientId -PermissionsToKeys all -PermissionsToSecrets all
Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName -EnabledForDiskEncryption
A lemeztitkosítás titkos kódja nem KEK-vel van titkosítva
A kulcstartó titkos kulcsának beállításához használja a Set-AzKeyVaultSecret parancsot. A jelszó base64-sztringként van kódolva, majd feltöltve a kulcstartóba. Emellett győződjön meg arról, hogy a kulcstartóban a titkos kód létrehozásakor az alábbi címkék vannak beállítva.
# 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
$secretUrl
A következő lépésben a KEK használata nélkül csatolhatja az operációsrendszer-lemezt.
Lemeztitkosítási titkos kód titkosítása KEK használatával
Mielőtt feltöltené a titkos kulcsot a kulcstartóba, szükség esetén titkosíthatja egy kulcstitkosítási kulccsal. A wrap API használatával először titkosíthatja a titkos kulcsot a kulcstitkosítási kulccsal. A körbefuttatási művelet kimenete egy base64 URL-kódolású sztring, amelyet ezután titkos kódként tölthet fel a Set-AzKeyVaultSecret
parancsmag használatával.
# This is the passphrase that was provided for encryption during the distribution installation
$passphrase = "contoso-password"
Add-AzKeyVaultKey -VaultName $KeyVaultName -Name "keyencryptionkey" -Destination Software
$KeyEncryptionKey = Get-AzKeyVaultKey -VaultName $KeyVault.OriginalVault.Name -Name "keyencryptionkey"
$apiversion = "2015-06-01"
##############################
# Get Auth URI
##############################
$uri = $KeyVault.VaultUri + "/keys"
$headers = @{}
$response = try { Invoke-RestMethod -Method GET -Uri $uri -Headers $headers } catch { $_.Exception.Response }
$authHeader = $response.Headers["www-authenticate"]
$authUri = [regex]::match($authHeader, 'authorization="(.*?)"').Groups[1].Value
Write-Host "Got Auth URI successfully"
##############################
# Get Auth Token
##############################
$uri = $authUri + "/oauth2/token"
$body = "grant_type=client_credentials"
$body += "&client_id=" + $AadClientId
$body += "&client_secret=" + [Uri]::EscapeDataString($AadClientSecret)
$body += "&resource=" + [Uri]::EscapeDataString("https://vault.azure.net")
$headers = @{}
$response = Invoke-RestMethod -Method POST -Uri $uri -Headers $headers -Body $body
$access_token = $response.access_token
Write-Host "Got Auth Token successfully"
##############################
# Get KEK info
##############################
$uri = $KeyEncryptionKey.Id + "?api-version=" + $apiversion
$headers = @{"Authorization" = "Bearer " + $access_token}
$response = Invoke-RestMethod -Method GET -Uri $uri -Headers $headers
$keyid = $response.key.kid
Write-Host "Got KEK info successfully"
##############################
# Encrypt passphrase using KEK
##############################
$passphraseB64 = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Passphrase))
$uri = $keyid + "/encrypt?api-version=" + $apiversion
$headers = @{"Authorization" = "Bearer " + $access_token; "Content-Type" = "application/json"}
$bodyObj = @{"alg" = "RSA-OAEP"; "value" = $passphraseB64}
$body = $bodyObj | ConvertTo-Json
$response = Invoke-RestMethod -Method POST -Uri $uri -Headers $headers -Body $body
$wrappedSecret = $response.value
Write-Host "Encrypted passphrase successfully"
##############################
# Store secret
##############################
$secretName = [guid]::NewGuid().ToString()
$uri = $KeyVault.VaultUri + "/secrets/" + $secretName + "?api-version=" + $apiversion
$secretAttributes = @{"enabled" = $true}
$secretTags = @{"DiskEncryptionKeyEncryptionAlgorithm" = "RSA-OAEP"; "DiskEncryptionKeyFileName" = "LinuxPassPhraseFileName"}
$headers = @{"Authorization" = "Bearer " + $access_token; "Content-Type" = "application/json"}
$bodyObj = @{"value" = $wrappedSecret; "attributes" = $secretAttributes; "tags" = $secretTags}
$body = $bodyObj | ConvertTo-Json
$response = Invoke-RestMethod -Method PUT -Uri $uri -Headers $headers -Body $body
Write-Host "Stored secret successfully"
$secretUrl = $response.id
Használja $KeyEncryptionKey
és $secretUrl
a következő lépésben csatolja az operációsrendszer-lemezt a KEK használatával.
Titkos URL-cím megadása operációsrendszer-lemez csatolásakor
KEK használata nélkül
Az operációsrendszer-lemez csatolása közben át kell adnia $secretUrl
a lemezt. Az URL-cím a "Lemeztitkosítási titkos kód nem KEK-vel titkosítva" szakaszban jött létre.
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $VhdUri `
-VhdUri $OSDiskUri `
-Linux `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl
KEK használata
Amikor csatlakoztatja az operációsrendszer-lemezt, adja át $KeyEncryptionKey
és $secretUrl
. Az URL-cím a "Lemeztitkosítási titkos kód KEK-vel titkosítva" szakaszban jött létre.
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $CopiedTemplateBlobUri `
-VhdUri $OSDiskUri `
-Linux `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl `
-KeyEncryptionKeyVaultId $KeyVault.ResourceId `
-KeyEncryptionKeyURL $KeyEncryptionKey.Id
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: