Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Azure Disk Şifrelemesi 15 Eylül 2028'de kullanımdan kaldırılıyor. Bu tarihe kadar Azure Disk Şifrelemesi'ni kesinti olmadan kullanmaya devam edebilirsiniz. 15 Eylül 2028'de ADE özellikli iş yükleri çalışmaya devam edecek, ancak VM yeniden başlatıldıktan sonra şifrelenmiş disklerin kilidi açılamaz ve hizmet kesintisine neden olur.
Yeni VM'ler için ev sahibi şifrelemesi kullanın veya gizli bilgi işlem yükleri için işletim sistemi disk şifrelemesi ile Gizli VM boyutlarını göz önünde bulundurun. Hizmet kesintisini önlemek için tüm ADE özellikli VM'lerin (yedeklemeler dahil) kullanımdan kaldırma tarihinden önce konakta şifrelemeye geçirilmesi gerekir. Ayrıntılar için bkz. Azure Disk Şifrelemesi'nden konakta şifrelemeye geçiş .
Dikkat
Bu makalede, kullanım süresi sonu (EOL) durumu olan bir Linux dağıtımı olan CentOS'a başvuruda bulunur. Kullanımınızı göz önünde bulundurun ve buna göre planlayın. Daha fazla bilgi için bkz. CentOS kullanım süresi sonu kılavuzu.
Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Esnek ölçek kümeleri
Bu makalede, önceden şifrelenmiş VHD'leri ve diğer görevleri hazırlamak için örnek betikler sağlanır.
Not
Tüm betikler, not edilen durumlar dışında ADE'nin en son, Microsoft Entra ID olmayan sürümüne başvurur.
Azure Disk Şifrelemesi için örnek PowerShell betikleri
Aboneliğinizdeki tüm şifrelenmiş VM'leri listeleme
Bu PowerShell betiğini kullanarak abonelikte bulunan tüm kaynak gruplarında tüm ADE ile şifrelenmiş VM'leri ve uzantı sürümünü bulabilirsiniz.
Alternatif olarak, bu cmdlet'ler tüm ADE ile şifrelenmiş VM'leri (uzantı sürümü değil) gösterir:
$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}Aboneliğinizdeki tüm şifrelenmiş VMSS örneklerini listeleme
Bu PowerShell betiğini kullanarak abonelikte bulunan tüm kaynak gruplarında tüm ADE ile şifrelenmiş VMSS örneklerini ve uzantı sürümünü bulabilirsiniz.
Anahtar kasasında VM'leri şifrelemek için kullanılan tüm disk şifreleme sırlarını listeleyin
Get-AzKeyVaultSecret -VaultName $KeyVaultName | where {$_.Tags.ContainsKey('DiskEncryptionKeyFileName')} | format-table @{Label="MachineName"; Expression={$_.Tags['MachineName']}}, @{Label="VolumeLetter"; Expression={$_.Tags['VolumeLetter']}}, @{Label="EncryptionKeyURL"; Expression={$_.Id}}
Azure Disk Şifrelemesi önkoşulları PowerShell betiğini kullanma
Azure Disk Şifrelemesi önkoşullarını zaten biliyorsanız Azure Disk Şifrelemesi önkoşulları PowerShell betiğini kullanabilirsiniz. Bu PowerShell betiğini kullanma örneği için "VM'i Şifreleme Hızlı Başlatma"ya bakın. Var olan bir kaynak grubundaki mevcut VM'lerin tüm disklerini şifrelemek için betiğin 211. satırından başlayarak bir bölümünden açıklamaları kaldırabilirsiniz.
Aşağıdaki tabloda PowerShell betiğinde kullanabileceğiniz parametreler gösterilmektedir:
| Parametre | Açıklama | Zorunlu mu? |
|---|---|---|
| $resourceGroupName | KeyVault'un ait olduğu kaynak grubunun adı. Betik, bu adda bir kaynak grubu yoksa yeni bir kaynak grubu oluşturur. | Doğru |
| $keyVaultName | Şifreleme anahtarlarının yerleştirildiği KeyVault'un adı. Betik, böyle bir kasa mevcut değilse bu adla yeni bir kasa oluşturur. | Doğru |
| $location | KeyVault konumu. Şifrelenmesi gereken KeyVault ve VM'lerin aynı konumda olduğunu doğrulayın.
Get-AzLocation komutu ile bir konum listesi alın. |
Doğru |
| $subscriptionId | Kullanılacak Azure aboneliğinin tanımlayıcısı. ile Get-AzSubscriptionAbonelik Kimliğinizi alın. |
Doğru |
| $aadAppName | Key Vault’a gizli anahtarlar yazan Microsoft Entra uygulamasının adı. Betik, mevcut değilse bu adla yeni bir uygulama oluşturur. Eğer bu uygulama zaten mevcutsa, betiğe aadClientSecret parametresini geçirin. | Yanlış |
| $aadClientSecret | Daha önce oluşturulan Microsoft Entra uygulamasının istemci parolası. | Yanlış |
| $keyEncryptionKeyName | KeyVault'ta isteğe bağlı anahtar şifreleme anahtarının adı. Betik, böyle bir anahtar yoksa bu adlı yeni bir anahtar oluşturur. | Yanlış |
Microsoft Entra uygulaması olmadan VM'leri şifreleme veya şifresini çözme
- Mevcut veya çalışan bir Linux VM'de disk şifrelemesini etkinleştirme
-
Çalışan bir Linux VM'de şifrelemeyi devre dışı bırakma
- Şifrelemenin devre dışı bırakılmasına yalnızca Linux VM'leri için Veri birimlerinde izin verilir.
Microsoft Entra uygulamasıyla VM'leri şifreleme veya şifresini çözme (önceki sürüm)
- Mevcut veya çalışan bir Linux VM'de disk şifrelemesini etkinleştirme
-
Çalışan bir Linux VM'de şifrelemeyi devre dışı bırakma
- Şifrelemenin devre dışı bırakılmasına yalnızca Linux VM'leri için Veri birimlerinde izin verilir.
-
Önceden şifrelenmiş bir VHD/depolama blobundan yeni bir şifrelenmiş yönetilen disk oluşturma
- Önceden şifrelenmiş bir VHD ve buna karşılık gelen şifreleme ayarları sağlayan yeni bir şifrelenmiş yönetilen disk oluşturur
Çalışan bir Linux VM'sinde işletim sistemi sürücüsünü şifreleme
İşletim sistemi disk şifrelemesi için önkoşullar
- VM, desteklenen Azure Disk Şifrelemesi işletim sistemlerinde listelendiği gibi işletim sistemi disk şifrelemesiyle uyumlu bir dağıtım kullanıyor olmalıdır
- VM, Azure Resource Manager'daki Market görüntüsünden oluşturulmalıdır.
- En az 4 GB RAM'e sahip Azure VM (önerilen boyut 7 GB'tır). Daha fazla bilgi için bkz . Bellek gereksinimleri .
- (RHEL ve CentOS için) SELinux'i devre dışı bırakın. SELinux'yi devre dışı bırakmak için bkz. "4.4.2. VM'deki SELinux Kullanıcı ve Yönetici Kılavuzu'nda SELinux'i devre dışı bırakma".
- SELinux'yi devre dışı bırakdıktan sonra VM'yi en az bir kez yeniden başlatın.
Adımlar
Daha önce belirtilen dağıtımlardan birini kullanarak bir VM oluşturun.
VM'yi gereksinimlerinize göre yapılandırın. Tüm (işletim sistemi + veri) sürücülerini şifreleyecekseniz, veri sürücülerinin /etc/fstab'den belirtilmesi ve takılabilir olması gerekir.
Not
UUID=... kullan blok cihazı adını belirtmek yerine /etc/fstab içindeki veri sürücülerini belirtmek için (örneğin, /dev/sdb1). Şifreleme sırasında, vm'de sürücülerin sırası değişir. VM'niz belirli bir blok cihaz sırasına bağlıysa, şifrelemeden sonra bunları bağlayamaz.
SSH oturumlarından çıkış yapın.
İşletim sistemini şifrelemek için şifrelemeyi etkinleştirdiğinizde volumeType değerini Tümü veya işletim sistemi olarak belirtin.
Not
SIGKILLilesystemdhizmetleri olarak çalışmayan tüm kullanıcı alanı işlemlerini sonlandırın. VM’yi yeniden başlatın. Çalışan bir VM'de işletim sistemi disk şifrelemesini etkinleştirdiğinizde VM kapalı kalma süresini planlayın.Sonraki bölümde yer alan yönergeleri kullanarak şifrelemenin ilerleme durumunu düzenli aralıklarla izleyin.
Get-AzVmDiskEncryptionStatus "VMRestartPending" öğesini gösterdikten sonra, vm'nizde oturum açarak veya portal, PowerShell veya CLI kullanarak vm'nizi yeniden başlatın.
C:\> Get-AzVmDiskEncryptionStatus -ResourceGroupName $ResourceGroupName -VMName $VMName -ExtensionName $ExtensionNameOsVolumeEncrypted : VMRestartPending DataVolumesEncrypted : NotMounted OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings ProgressMessage : OS disk successfully encrypted, reboot the VMYeniden başlatmadan önce VM'nin önyükleme tanılamasını kaydedin.
İşletim sistemi şifreleme ilerleme durumunu izleme
İşletim sistemi şifrelemesi ilerleme durumunu üç şekilde izleyebilirsiniz:
cmdlet'ini
Get-AzVmDiskEncryptionStatuskullanın ve ProgressMessage alanını inceleyin:Get-AzVMDiskEncryptionStatus -ResourceGroupName $_.ResourceGroupName -VMName $_.NameOsVolumeEncrypted : EncryptionInProgress DataVolumesEncrypted : NotMounted OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings ProgressMessage : OS disk encryption startedVM "İşletim sistemi disk şifrelemesi başlatıldı" seçeneğine ulaştıktan sonra Premium depolama destekli bir VM'de yaklaşık 40 ile 50 dakika arası sürer.
WALinuxAgent'taki GitHub sorunu #388 nedeniyle,
OsVolumeEncryptedveDataVolumesEncryptedbazı dağıtımlardaUnknownolarak görünür. WALinuxAgent sürüm 2.1.5 ve üzeri ile bu sorun otomatik olarak düzeltilir. Çıktıda görüyorsanızUnknownAzure Kaynak Gezgini'ni kullanarak disk şifreleme durumunu doğrulayabilirsiniz.Azure Kaynak Gezgini'ne gidin ve soldaki seçim panelinde bu hiyerarşiyi genişletin:
|-- subscriptions |-- [Your subscription] |-- resourceGroups |-- [Your resource group] |-- providers |-- Microsoft.Compute |-- virtualMachines |-- [Your virtual machine] |-- InstanceViewInstanceView'da sürücülerinizin şifreleme durumunu görmek için ekranı aşağı kaydırın.
Önyükleme tanılamalarına bakın. ADE uzantısından gelen iletiler ön ekinde
[AzureDiskEncryption]olmalıdır.SSH aracılığıyla VM'de oturum açın ve uzantı günlüğünü şu kaynaktan alın:
/var/log/azure/Microsoft.Azure.Security.AzureDiskEncryptionForLinux
İşletim sistemi şifrelemesi devam ederken VM'de oturum açmayın. Günlükleri yalnızca diğer iki yöntem başarısız olduğunda kopyalayın.
Önceden şifrelenmiş bir Linux VHD hazırla
Önceden şifrelenmiş VHD'ler için hazırlık, dağıtıma bağlı olarak değişebilir. Ubuntu, openSUSE ve CentOS 7'yi hazırlama örnekleri mevcuttur.
Aşağıdaki adımları uygulayarak dağıtım yüklemesi sırasında şifrelemeyi yapılandırın:
Diskleri bölümlerken Şifrelenmiş birimleri yapılandır'ı seçin.
Şifrelenmemesi gereken ayrı bir önyükleme sürücüsü oluşturun. Kök sürücünüzü şifreleyin.
Parolayı belirtin. Bu parolayı anahtar kasasına yüklemişsiniz.
Bölümleme işlemini tamamlayın.
VM'yi önyüklerken parola istendiğinde, 3. adımda sağladığınız parolayı kullanın.
Bu yönergeleri kullanarak VM'yi Azure'a yüklemeye hazırlayın. Son adımı (VM'nin sağlamasını kaldırma) henüz çalıştırmayın.
Aşağıdaki adımları uygulayarak şifrelemeyi Azure ile çalışacak şekilde yapılandırın:
altında
/usr/local/sbin/azure_crypt_key.sh, içeriği aşağıdaki betikte olacak şekilde bir dosya oluşturun. Azure tarafından kullanılan parola dosya adı olduğundan KeyFileName'e dikkat edin.#!/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/etc/crypttab içindeki şifreleme yapılandırmasını değiştirin. Şu şekilde görünmelidir:
xxx_crypt uuid=xxxxxxxxxxxxxxxxxxxxx none luks,discard,keyscript=/usr/local/sbin/azure_crypt_key.shBetike yürütülebilir izinler ekleyin:
sudo chmod +x /usr/local/sbin/azure_crypt_key.shDüzenlemek için
/etc/initramfs-tools/modulesöğesine satır ekleyin:vfat ntfs nls_cp437 nls_utf8 nls_iso8859-1Initramfs'ı güncelleştirmek için
update-initramfs -u -k allkomutunu çalıştırın, böylecekeyscriptetkili olur.Artık sanal makinenin (VM) sağlamasını kaldırabilirsiniz.
Sonraki adıma geçin ve VHD'nizi Azure'a yükleyin.
Şifrelenmiş VHD'yi bir Azure depolama hesabına yükleme
DM-Crypt şifrelemesi etkinleştirildikten sonra yerel şifrelenmiş VHD'nin depolama hesabınıza yüklenmesi gerekir.
Add-AzVhd [-Destination] <Uri> [-LocalFilePath] <FileInfo> [[-NumberOfUploaderThreads] <Int32> ] [[-BaseImageUriToPatch] <Uri> ] [[-OverWrite]] [ <CommonParameters>]
Önceden şifrelenmiş VM'nin sırrını anahtar kasanıza yükleyin
Microsoft Entra uygulaması (önceki sürüm) kullanılarak şifreleme yaparken, daha önce edindiğiniz disk şifreleme sırrının anahtar kasanıza sır olarak yüklenmesi gerekir. Anahtar kasasının, Microsoft Entra istemciniz için disk şifrelemesi ve izinlerinin etkinleştirilmesi gerekir.
$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
KEK ile şifrelenmemiş disk şifreleme sırrı
Anahtar kasanızda gizli bilgiyi ayarlamak için Set-AzKeyVaultSecret komutunu kullanın. Parola bir base64 dizesi olarak kodlanır ve ardından anahtar kasasına yüklenir. Ayrıca, anahtar kasasında gizliyi oluştururken aşağıdaki etiketlerin ayarlandığından emin olun.
# 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
Sonraki adımda, KEK kullanmadan işletim sistemi diskini eklemek için $secretUrl öğesini kullanın.
KEK ile şifrelenen disk şifreleme anahtarı
Gizli anahtarı anahtar kasasına yüklemeden önce, isteğe bağlı olarak bir anahtar şifreleme anahtarı (KEK) kullanarak şifreleyebilirsiniz. Gizliyi şifrelemek için anahtar şifreleme anahtarını kullanarak sarma API'sini kullanın. Bu wrap işleminin çıktısı, base64 URL ile kodlanmış bir dizedir ve ardından bunu Set-AzKeyVaultSecret cmdlet'ini kullanarak gizli bilgi olarak karşıya yükleyebilirsiniz.
# 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 by 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
$KeyEncryptionKey ve $secretUrl öğelerini, bir sonraki adımda KEK kullanarak İşletim Sistemi diskini eklemek için kullanın.
İşletim sistemi diski eklerken gizli url belirtme
KEK kullanmadan
İşletim sistemi diskini eklerken iletmeniz gerekir $secretUrl. URL, "KEK ile şifrelenmemiş disk şifreleme parolası" bölümünde oluşturulur.
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $VhdUri `
-VhdUri $OSDiskUri `
-Linux `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl
KEK kullanma
İşletim sistemi diskini eklediğinizde, $KeyEncryptionKey ve $secretUrl geçirin. URL, "KEK ile şifrelenmiş disk şifreleme gizli anahtarı" bölümünde oluşturulur.
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $CopiedTemplateBlobUri `
-VhdUri $OSDiskUri `
-Linux `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl `
-KeyEncryptionKeyVaultId $KeyVault.ResourceId `
-KeyEncryptionKeyURL $KeyEncryptionKey.Id