برامج نصية لنموذج تشفير قرص Azure لأجهزة Linux الظاهرية
ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ مجموعات توسعة مرنة
توفر هذه المقالة نموذج من البرامج النصية لإعداد VHDs المشفرة مسبقا والمهام الأخرى.
ملاحظة
تشير جميع البرامج النصية إلى أحدث إصدار غير AAD (دليل Azure النشط) من ADE، باستثناء ما هو مذكور.
نموذج البرامج النصية PowerShell لتشفير قرص Azure
إدراج جميع الأجهزة الظاهرية المشفرة في اشتراكك
يمكنك العثور على جميع الأجهزة الظاهرية المشفرة بواسطة ADE والإصدار الملحق، في جميع مجموعات الموارد الموجودة في اشتراك، باستخدام هذا البرنامج النصي PowerShell.
بدلا من ذلك، ستعرض cmdlets هذه جميع الأجهزة الظاهرية المشفرة بواسطة ADE (ولكن ليس إصدار الملحق):
$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}إدراج جميع مثيلات VMSS المشفرة في اشتراكك
يمكنك العثور على جميع مثيلات VMSS المشفرة بواسطة ADE وإصدار الملحق، في جميع مجموعات الموارد الموجودة في اشتراك، باستخدام هذا البرنامج النصي PowerShell.
سرد جميع بيانات سرية تشفير القرص المستخدمة لتشفير الأجهزة الظاهرية في مخزن مفاتيح
Get-AzKeyVaultSecret -VaultName $KeyVaultName | where {$_.Tags.ContainsKey('DiskEncryptionKeyFileName')} | format-table @{Label="MachineName"; Expression={$_.Tags['MachineName']}}, @{Label="VolumeLetter"; Expression={$_.Tags['VolumeLetter']}}, @{Label="EncryptionKeyURL"; Expression={$_.Id}}
استخدام البرنامج النصي PowerShell للمتطلبات الأساسية لتشفير قرص Azure
إذا كنت معتادا بالفعل على المتطلبات الأساسية لتشفير قرص Azure، فيمكنك استخدام البرنامج النصي PowerShell المتطلبات الأساسية لتشفير قرص Azure. للحصول على مثال على استخدام هذا البرنامج النصي PowerShell، راجع تشفير التشغيل السريع للجهاز الظاهري. يمكنك إزالة التعليقات من مقطع من البرنامج النصي، بدءا من السطر 211، لتشفير كافة الأقراص للأجهزة الظاهرية الموجودة في مجموعة موارد موجودة.
يوضح الجدول التالي المَعْلمات التي يمكن استخدامها في البرنامج النصي PowerShell:
| المعلمة | الوصف | إلزامي؟ |
|---|---|---|
| $resourceGroupName | اسم مجموعة الموارد التي ينتمي إليها KeyVault. سيتم إنشاء مجموعة موارد جديدة بهذا الاسم في حالة عدم وجودها. | صواب |
| $keyVaultName | اسم KeyVault الذي سيتم وضع مفاتيح التشفير فيه. سيتم إنشاء قبو جديد بهذا الاسم إذا لم يكن موجودا. | صواب |
| $location | موقع KeyVault. تأكد من أن KeyVault والأجهزة الظاهرية المراد تشفيرها في نفس الموقع. احصل على قائمة الموقع باستخدامGet-AzLocation. |
صواب |
| subscriptionId | معرف اشتراك Azure المراد استخدامه. يمكنك الحصول على معرف الاشتراك الخاص بك مع Get-AzSubscription. |
صواب |
| $aadAppName | اسم تطبيق Azure AD الذي سيتم استخدامه لنقل بيانات سرية إلى KeyVault. سيتم إنشاء تطبيق جديد بهذا الاسم إذا لم يكن موجودا. إذا كان هذا التطبيق موجودا بالفعل ، فقم بتمرير المَعْلمة aadClientSecret إلى البرنامج النصي. | خطأ |
| $aadClientSecret | سر العميل لتطبيق Azure AD الذي تم إنشاؤه مسبقا. | خطأ |
| $keyEncryptionKeyName | اسم مفتاح تشفير المفتاح الاختياري في KeyVault. سيتم إنشاء مفتاح جديد بهذا الاسم إذا لم يكن موجودا. | خطأ |
تشفير الأجهزة الظاهرية أو فك تشفيرها بدون تطبيق Azure AD
- تمكين تشفير القرص على جهاز ظاهري Linux موجود أو قيد التشغيل
- تعطيل التشفير على جهاز ظاهري يعمل بنظام Linux
- لا يسمح بتعطيل التشفير إلا على وحدات تخزين البيانات الخاصة بالأجهزة الظاهرية لنظام التشغيل Linux.
تشفير الأجهزة الظاهرية أو فك تشفيرها باستخدام تطبيق Azure AD (الإصدار السابق)
تعطيل التشفير على جهاز ظاهري يعمل بنظام Linux
- لا يسمح بتعطيل التشفير إلا على وحدات تخزين البيانات الخاصة بالأجهزة الظاهرية لنظام التشغيل Linux.
إنشاء قرص مدار مشفر جديد من فقاعة VHD/تخزين مشفرة مسبقا
- إنشاء قرص مدار مشفر جديد مزود بـ VHD مشفر مسبقا وإعدادات التشفير المقابلة له
تشفير محرك أقراص نظام التشغيل على جهاز ظاهري يعمل بنظام Linux
المتطلبات الأساسية لتشفير قرص نظام التشغيل
- يجب أن يستخدم الجهاز الظاهري توزيعة متوافقة مع تشفير قرص نظام التشغيل كما هو مدرج في أنظمة التشغيل المدعومة تشفير قرص Azure
- يجب إنشاء الجهاز الظاهري من صورة Marketplace فيAzure Resource Manager.
- الجهاز الظاهري Azure مع 4 غيغابايت على الأقل من ذاكرة الوصول العشوائي (الحجم الموصى به هو 7 غيغابايت).
- (لـ RHEL و CentOS) تعطيل SELinux. لتعطيل SELinux، راجع "4.4.2. تعطيل SELinux" في دليل مستخدم SELinux والمسؤول على الجهاز الظاهري.
- بعد تعطيل SELinux، أعد تشغيل الجهاز الظاهري مرة واحدة على الأقل.
الخطوات
إنشاء جهاز ظاهري باستخدام أحد التوزيعات المحددة مسبقا.
بالنسبة إلى CentOS 7.2، يتم دعم تشفير قرص نظام التشغيل عبر صورة خاصة. لاستخدام هذه الصورة، حدد "7.2n" كرمز SKU عند إنشاء الجهاز الظاهري:
Set-AzVMSourceImage -VM $VirtualMachine -PublisherName "OpenLogic" -Offer "CentOS" -Skus "7.2n" -Version "latest"قم بتكوين الجهاز الظاهري وفقا لاحتياجاتك. إذا كنت ستقوم بتشفير جميع محركات الأقراص (OS + data)، فيجب تحديد محركات أقراص البيانات وتثبيتها من /etc/fstab.
ملاحظة
استخدام UUID = ... لتحديد محركات أقراص البيانات في /etc/fstab بدلا من تحديد اسم جهاز الحظر (على سبيل المثال، /dev/sdb1). أثناء التشفير، يتغير ترتيب محركات الأقراص على الجهاز الظاهري. إذا كان جهازك الظاهري يعتمد على ترتيب محدد من أجهزة الحظر، فسوف يفشل في تركيبها بعد التشفير.
تسجيل الخروج من جلسات SSH.
لتشفير نظام التشغيل، حدد volumeType ك الكل أو OS عند تمكين التشفير.
ملاحظة
يجب قتل جميع عمليات مساحة المستخدم التي لا تعمل ك
systemdخدمات باستخدامSIGKILL. أعد تشغيل الجهاز الظاهري. عند تمكين تشفير قرص نظام التشغيل على جهاز ظاهري قيد التشغيل، خطط لوقت تعطل الجهاز الظاهري.راقب بشكل دوري تقدم التشفير باستخدام الإرشادات الواردة في القسم التالي.
بعد Get-AzVmDiskEncryptionStatus يعرض "VMRestartPending"، أعد تشغيل جهازك الظاهري إما عن طريق تسجيل الدخول إليه أو باستخدام المدخل أو PowerShell أو CLI.
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قبل إعادة التشغيل، نوصي بحفظ تشخيصات التمهيد للجهاز الظاهري.
مراقبة تقدم تشفير نظام التشغيل
يمكنك مراقبة تقدم تشفير نظام التشغيل بثلاث طرق:
استخدم
Get-AzVmDiskEncryptionStatuscmdlet وافحص حقل ProgressMessage:OsVolumeEncrypted : EncryptionInProgress DataVolumesEncrypted : NotMounted OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings ProgressMessage : OS disk encryption startedبعد وصول الجهاز الظاهري إلى "بدء تشفير قرص نظام التشغيل"، يستغرق الأمر حوالي 40 إلى 50 دقيقة على جهاز ظاهري مدعوم بسعة تخزين Premium.
بسبب المشكلة #388 في WALinuxAgent،
OsVolumeEncryptedوDataVolumesEncryptedتظهر كما هو الحالUnknownفي بعض التوزيعات. باستخدام WALinuxAgent الإصدار 2.1.5 والإصدارات الأحدث، يتم إصلاح هذه المشكلة تلقائيا. إذا رأيتUnknownفي الإخراج، فيمكنك التحقق من حالة تشفير القرص باستخدام مستكشف موارد Azure.انتقل إلى مستكشف موارد Azure، ثم قم بتوسيع هذا التدرج الهرمي في لوحة التحديد على اليسار:
|-- subscriptions |-- [Your subscription] |-- resourceGroups |-- [Your resource group] |-- providers |-- Microsoft.Compute |-- virtualMachines |-- [Your virtual machine] |-- InstanceViewفي InstanceView، مرر لأسفل للاطلاع على حالة تشفير محركات الأقراص.

انظر إلى تشخيصات التمهيد. يجب أن تكون الرسائل الواردة من ملحق ADE مسبوقة بـ
[AzureDiskEncryption].سجل الدخول إلى الجهاز الظاهري عبر SSH، واحصل على سجل الملحق من:
/var/log/azure/Microsoft.Azure.Security.AzureDiskEncryptionForLinux
نوصي بعدم تسجيل الدخول إلى الجهاز الظاهري أثناء تقدم تشفير نظام التشغيل. انسخ السجلات فقط عند فشل الطريقتين الأخريين.
إعداد لينكس VHD مشفر مسبقا
يمكن أن يختلف التحضير ل VHDs المشفرة مسبقا اعتمادا على التوزيع. تتوفر أمثلة على إعداد Ubuntu 16 و openSUSE 13.2 و CentOS 7.
Ubuntu 16
تكوين التشفير أثناء تثبيت التوزيع عن طريق القيام بالخطوات التالية:
حدد تكوين وحدات التخزين المشفرة عند تقسيم الأقراص.

قم بإنشاء محرك أقراص تمهيد منفصل، والذي يجب عدم تشفيره. تشفير محرك الأقراص الجذر.

قدم عبارة مرور. هذه هي عبارة المرور التي حملتها إلى قبو المفتاح.

إنهاء التقسيم.

عند تمهيد الجهاز الظاهري وتتم مطالبتك بعبارة مرور، استخدم عبارة المرور التي قدمتها في الخطوة 3.

قم بإعداد الجهاز الظاهري للتحميل إلى Azure باستخدام هذه الإرشادات. لا تقم بتشغيل الخطوة الأخيرة (إلغاء توفير الجهاز الظاهري) حتى الآن.
قم بتكوين التشفير للعمل مع Azure عن طريق تنفيذ الخطوات التالية:
قم بإنشاء ملف ضمن /usr/local/sbin/azure_crypt_key.sh، مع المحتوى في البرنامج النصي التالي. انتبه إلى KeyFileName، لأنه اسم ملف عبارة المرور المستخدمة من قبل Azure.
#!/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/. ينبغي أن يبدو مثل هذا:
xxx_crypt uuid=xxxxxxxxxxxxxxxxxxxxx none luks,discard,keyscript=/usr/local/sbin/azure_crypt_key.shإضافة أذونات قابلة للتنفيذ إلى البرنامج النصي:
chmod +x /usr/local/sbin/azure_crypt_key.shتحرير etc/initramfs-tools/modules/عن طريق إلحاق الخطوط:
vfat ntfs nls_cp437 nls_utf8 nls_iso8859-1قم بتشغيل
update-initramfs -u -k allلتحديث initramfs لجعلهkeyscriptساري المفعول.الآن يمكنك إلغاء توفير الجهاز الظاهري.

تابع إلى الخطوة التالية وقم بتحميل VHD الخاص بك إلى Azure.
openSUSE 13.2
لتكوين التشفير أثناء تثبيت التوزيع، قم بالخطوات التالية:
عند تقسيم الأقراص، حدد تشفير مجموعة وحدة التخزين، ثم أدخل كلمة مرور. هذه هي كلمة المرور التي ستقوم بتحميلها إلى قبو المفتاح.

قم بتشغيل الجهاز الظاهري باستخدام كلمة المرور الخاصة بك.

قم بإعداد الجهاز الظاهري للتحميل إلى Azure باتباع الإرشادات الواردة في إعداد جهاز ظاهري SLES أو openSUSE ل Azure. لا تقم بتشغيل الخطوة الأخيرة (إلغاء توفير الجهاز الظاهري) حتى الآن.
لتكوين التشفير للعمل مع Azure، قم بالخطوات التالية:
تحرير الـ etc/ dracut.conf، وإضافة السطر التالي :
add_drivers+=" vfat ntfs nls_cp437 nls_iso8859-1"قم بالتعليق على هذه الأسطر في نهاية الملف /usr/lib/dracut/modules.d/90crypt/module-setup.sh:
# inst_multiple -o \ # $systemdutildir/system-generators/systemd-cryptsetup-generator \ # $systemdutildir/systemd-cryptsetup \ # $systemdsystemunitdir/systemd-ask-password-console.path \ # $systemdsystemunitdir/systemd-ask-password-console.service \ # $systemdsystemunitdir/cryptsetup.target \ # $systemdsystemunitdir/sysinit.target.wants/cryptsetup.target \ # systemd-ask-password systemd-tty-ask-password-agent # inst_script "$moddir"/crypt-run-generator.sh /sbin/crypt-run-generatorإلحاق السطر التالي في بداية الملف /usr/lib/dracut/modules.d/90crypt/parse-crypt.sh:
DRACUT_SYSTEMD=0وتغيير جميع التكرارات:
if [ -z "$DRACUT_SYSTEMD" ]; thenلكي تتمكن من:
if [ 1 ]; thenتحرير /usr/lib/dracut/modules.d/90crypt/cryptroot-ask.sh وإلحاقه بـ "# فتح جهاز LUKS":
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*; do echo "> Trying device:$SFS..." >&2 mount ${SFS}1 $MountPoint -t vfat -r >&2 || mount ${SFS}1 $MountPoint -t ntfs -r >&2 if [ -f $MountPoint/$KeyFileName ]; then echo "> keyfile got..." >&2 cp $MountPoint/$KeyFileName /tmp-keyfile >&2 luksfile=/tmp-keyfile umount $MountPoint >&2 break fi doneتشغيل
/usr/sbin/dracut -f -vلتحديث initrd.يمكنك الآن إلغاء توفير الجهاز الظاهري وتحميل VHD الخاص بك إلى Azure.
CentOS 7 و RHEL 7
لتكوين التشفير أثناء تثبيت التوزيع، قم بالخطوات التالية:
حدد تشفير بياناتي عند تقسيم الأقراص.

تأكد من تحديد تشفير لقسم الجذر.

قدم عبارة مرور. هذه هي عبارة المرور التي ستقوم بتحميلها إلى قبو المفتاح.

عند تمهيد الجهاز الظاهري وتتم مطالبتك بعبارة مرور، استخدم عبارة المرور التي قدمتها في الخطوة 3.

قم بإعداد الجهاز الظاهري للتحميل إلى Azure باستخدام إرشادات "CentOS 7.0+" في إعداد جهاز ظاهري يستند إلى CentOS لـ Azure. لا تقم بتشغيل الخطوة الأخيرة (إلغاء توفير الجهاز الظاهري) حتى الآن.
يمكنك الآن إلغاء توفير الجهاز الظاهري وتحميل VHD الخاص بك إلى Azure.
لتكوين التشفير للعمل مع Azure، قم بالخطوات التالية:
تحرير الـ etc/ dracut.conf، وإضافة السطر التالي :
add_drivers+=" vfat ntfs nls_cp437 nls_iso8859-1"قم بالتعليق على هذه الأسطر في نهاية الملف /usr/lib/dracut/modules.d/90crypt/module-setup.sh:
# inst_multiple -o \ # $systemdutildir/system-generators/systemd-cryptsetup-generator \ # $systemdutildir/systemd-cryptsetup \ # $systemdsystemunitdir/systemd-ask-password-console.path \ # $systemdsystemunitdir/systemd-ask-password-console.service \ # $systemdsystemunitdir/cryptsetup.target \ # $systemdsystemunitdir/sysinit.target.wants/cryptsetup.target \ # systemd-ask-password systemd-tty-ask-password-agent # inst_script "$moddir"/crypt-run-generator.sh /sbin/crypt-run-generatorإلحاق السطر التالي في بداية الملف /usr/lib/dracut/modules.d/90crypt/parse-crypt.sh:
DRACUT_SYSTEMD=0وتغيير جميع التكرارات:
if [ -z "$DRACUT_SYSTEMD" ]; thenإلى
if [ 1 ]; thenقم بتحرير /usr/lib/dracut/modules.d/90crypt/cryptroot-ask.sh وإلحاق ما يلي بعد "# فتح جهاز LUKS":
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*; do echo "> Trying device:$SFS..." >&2 mount ${SFS}1 $MountPoint -t vfat -r >&2 || mount ${SFS}1 $MountPoint -t ntfs -r >&2 if [ -f $MountPoint/$KeyFileName ]; then echo "> keyfile got..." >&2 cp $MountPoint/$KeyFileName /tmp-keyfile >&2 luksfile=/tmp-keyfile umount $MountPoint >&2 break fi doneقم بتشغيل "usr/sbin/dracut -f -v/" لتحديث initrd.

Upload VHD مشفر إلى حساب تخزين Azure
بعد تمكين تشفير DM-Crypt، يجب تحميل VHD المشفر المحلي إلى حساب التخزين الخاص بك.
Add-AzVhd [-Destination] <Uri> [-LocalFilePath] <FileInfo> [[-NumberOfUploaderThreads] <Int32> ] [[-BaseImageUriToPatch] <Uri> ] [[-OverWrite]] [ <CommonParameters>]
تحميل بيانات سرية الجهاز الظاهري المشفر مسبقا إلى قبو المفاتيح الخاص بك
عند التشفير باستخدام تطبيق Azure AD (الإصدار السابق)، يجب تحميل بيانات سرية تشفير القرص الذي حصلت عليه مسبقا كبيان سري في قبو المفتاح. يحتاج قبو المفتاح إلى تمكين تشفير القرص والأذونات لعميل Azure AD الخاص بك.
$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
لإعداد البيانات السرية في قبو المفتاح، استخدم Set-AzKeyVaultSecret. يتم ترميز عبارة المرور كسلسلة base64 ثم يتم تحميلها إلى قبو المفتاح. بالإضافة إلى ذلك، تأكد من تعيين العلامات التالية عند إنشاء البيانات السرية في قبو المفتاح.
# 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الخطوة التالية لتوصيل قرص نظام التشغيل دون استخدام KEK.
البيانات السرية لتشفير القرص المشفر باستخدام KEK
قبل تحميل البيانات السرية إلى قبو المفتاح، يمكنك تشفيره اختياريا باستخدام مفتاح تشفير مفتاح. استخدم واجهة برمجة تطبيقات الالتفاف لتشفير البيانات السرية أولا باستخدام مفتاح تشفير المفتاح. إخراج عملية الالتفاف هذه عبارة عن سلسلة مشفرة لعنوان URL base64، والتي يمكنك بعد ذلك تحميلها كبيانات سرية باستخدام Set-AzKeyVaultSecret cmdlet.
# 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
استخدم $KeyEncryptionKey و $secretUrl في الخطوة التالية لإرفاق قرص نظام التشغيل باستخدام KEK.
تحديد عنوان URL سري عند إرفاق قرص نظام تشغيل
دون استخدام KEK
أثناء توصيل قرص نظام التشغيل، تحتاج إلى تمرير $secretUrl. تم إنشاء عنوان URL في قسم "بيانات سرية تشفير القرص غير مشفر باستخدام KEK".
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $VhdUri `
-VhdUri $OSDiskUri `
-Linux `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl
استخدام KEK
عند إرفاق قرص نظام التشغيل، قم بتمرير $KeyEncryptionKey و $secretUrl. تم إنشاء عنوان URL في قسم "بيانات سرية تشفير القرص المشفر باستخدام KEK".
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $CopiedTemplateBlobUri `
-VhdUri $OSDiskUri `
-Linux `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl `
-KeyEncryptionKeyVaultId $KeyVault.ResourceId `
-KeyEncryptionKeyURL $KeyEncryptionKey.Id