إحضار المفاتيح الخاصة بك (BYOK) مع أقراص Azure المدارة في خدمة Azure Kubernetes (AKS)

يقوم Azure بتشفير جميع البيانات في قرص مدار في حالة الثبات. بشكل افتراضي، يتم تشفير البيانات باستخدام المفاتيح المُدارة من قِبل Microsoft. للتحكم الإضافي في مفاتيح التشفير، يمكنك توفير مفاتيح مُدارة من قِبل العملاء لاستخدامها للتشفير في الوضع غير النشط لكل من نظام التشغيل وأقراص البيانات لمجموعات AKS.

تعرف على المزيد حول المفاتيح التي يديرها العملاء على Linux و Windows.

المتطلبات الأساسية

  • يجب تمكين حماية المسح والحذف المبدئي لـ Azure Key Vault عند استخدام Key Vault لتشفير الأقراص المُدارة.
  • تحتاج إلى إصدار Azure CLI 2.11.1 أو إصدار أحدث.
  • يتم دعم تشفير قرص البيانات والمفاتيح التي يديرها العميل على إصدارات Kubernetes 1.24 والإصدارات الأحدث.
  • إذا اخترت تدوير (تغيير) المفاتيح بشكل دوري، فشاهد المفاتيح المدارة بواسطة العميل وتشفير القرص المدار من Azure للحصول على مزيد من المعلومات.

القيود

  • يمكن تمكين تشفير قرص نظام التشغيل باستخدام مفاتيح يديرها العميل فقط عند إنشاء نظام مجموعة AKS.

  • العقد الظاهرية غير مدعومة.

  • عند تشفير تجمع عقدة ممكن على قرص نظام التشغيل سريع الزوال باستخدام مفاتيح يديرها العميل، إذا كنت تريد تدوير المفتاح في Azure Key Vault، فأنت بحاجة إلى:

    • تقليص عدد تجمعات العقدة إلى 0
    • تدوير المفتاح
    • توسيع نطاق تجمع العقدة إلى العدد الأصلي.

إنشاء مثيل Azure Key Vault

استخدم مثيل Azure Key Vault لتخزين المفاتيح. يمكنك اختياريًا استخدام مدخل Azure لتكوين المفاتيح المُدارة من قِبل العملاء باستخدام Azure Key Vault

إنشاء مجموعة مواردجديدة، ثم إنشاء مثيل Key Vault جديد وتمكين الحماية من المسح والحذف المبدئي. تأكد من استخدام نفس المنطقة وأسماء مجموعة الموارد لكل أمر.

# Optionally retrieve Azure region short names for use on upcoming commands
az account list-locations
# Create new resource group in a supported Azure region
az group create --location myAzureRegionName --name myResourceGroup

# Create an Azure Key Vault resource in a supported Azure region
az keyvault create --name myKeyVaultName --resource-group myResourceGroup --location myAzureRegionName  --enable-purge-protection true

إنشاء مثيل DiskEncryptionSet

استبدل myKeyVaultName باسم قبو المفاتيح الخاص بك. تحتاج أيضا إلى مفتاح مخزن في Azure Key Vault لإكمال الخطوات التالية. إما تخزين المفتاح الموجود في Key Vault الذي أنشأته في الخطوات السابقة، أو إنشاء مفتاح جديد واستبدال myKeyName باسم المفتاح الخاص بك.

# Retrieve the Key Vault Id and store it in a variable
keyVaultId=$(az keyvault show --name myKeyVaultName --query "[id]" -o tsv)

# Retrieve the Key Vault key URL and store it in a variable
keyVaultKeyUrl=$(az keyvault key show --vault-name myKeyVaultName --name myKeyName --query "[key.kid]" -o tsv)

# Create a DiskEncryptionSet
az disk-encryption-set create --name myDiskEncryptionSetName --location myAzureRegionName --resource-group myResourceGroup --source-vault $keyVaultId --key-url $keyVaultKeyUrl

هام

تأكد من وجود DiskEncryptionSet في نفس منطقة نظام مجموعة AKS وأن هوية نظام مجموعة AKS لديها حق الوصول للقراءة إلى DiskEncryptionSet.

منح DiskEncryptionSet الوصول إلى قبو المفتاح

استخدم DiskEncryptionSet ومجموعات الموارد التي قمت بإنشائها في الخطوات السابقة، وقم بمنح مورد DiskEncryptionSet الوصول إلى Azure Key Vault.

# Retrieve the DiskEncryptionSet value and set a variable
desIdentity=$(az disk-encryption-set show --name myDiskEncryptionSetName --resource-group myResourceGroup --query "[identity.principalId]" -o tsv)

# Update security policy settings
az keyvault set-policy --name myKeyVaultName --resource-group myResourceGroup --object-id $desIdentity --key-permissions wrapkey unwrapkey get

إنشاء نظام مجموعة AKS جديد وتشفير قرص نظام التشغيل

إما إنشاء مجموعة موارد جديدة، أو تحديد مجموعة موارد موجودة تستضيف مجموعات AKS أخرى، ثم استخدم المفتاح الخاص بك للتشفير إما باستخدام أقراص نظام التشغيل المرفقة بالشبكة أو قرص نظام التشغيل المؤقت. بشكل افتراضي، يستخدم نظام المجموعة قرص نظام التشغيل المؤقت عندما يكون ذلك ممكنا بالتزامن مع حجم الجهاز الظاهري وحجم قرص نظام التشغيل.

قم بتشغيل الأمر التالي لاسترداد قيمة DiskEncryptionSet وتعيين متغير:

diskEncryptionSetId=$(az disk-encryption-set show --name mydiskEncryptionSetName --resource-group myResourceGroup --query "[id]" -o tsv)

إذا كنت ترغب في إنشاء مجموعة موارد جديدة للمجموعة، فقم بتشغيل الأمر التالي:

az group create --name myResourceGroup --location myAzureRegionName

لإنشاء نظام مجموعة عادي باستخدام أقراص نظام التشغيل المرفقة بالشبكة المشفرة باستخدام المفتاح الخاص بك، يمكنك القيام بذلك عن طريق تحديد الوسيطة --node-osdisk-type=Managed .

az aks create --name myAKSCluster --resource-group myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Managed

لإنشاء نظام مجموعة مع قرص نظام التشغيل المؤقت المشفر باستخدام المفتاح الخاص بك، يمكنك القيام بذلك عن طريق تحديد الوسيطة --node-osdisk-type=Ephemeral . تحتاج أيضا إلى تحديد الوسيطة --node-vm-size لأن حجم الجهاز الظاهري الافتراضي صغير جدا ولا يدعم قرص نظام التشغيل المؤقت.

az aks create --name myAKSCluster --resource-group myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Ephemeral --node-vm-size Standard_DS3_v2

عند إضافة تجمعات عقد جديدة إلى نظام المجموعة، يتم استخدام المفتاح المدار من قبل العميل المقدم أثناء عملية الإنشاء لتشفير قرص نظام التشغيل. يوضح المثال التالي كيفية نشر تجمع عقدة جديد مع قرص نظام تشغيل سريع الزوال.

az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RG_NAME --name $NODEPOOL_NAME --node-osdisk-type Ephemeral

تشفير قرص بيانات نظام مجموعة AKS

إذا كنت قد قدمت بالفعل مجموعة تشفير قرص أثناء إنشاء نظام المجموعة، فإن تشفير أقراص البيانات بنفس مجموعة تشفير القرص هو الخيار الافتراضي. لذلك، هذه الخطوة اختيارية. ومع ذلك، إذا كنت ترغب في تشفير أقراص البيانات باستخدام مجموعة تشفير قرص مختلفة، يمكنك اتباع هذه الخطوات.

هام

تأكد من حصولك على بيانات اعتماد AKS المناسبة. ستحتاج الهوية المُدارة إلى وصول مساهم إلى مجموعة الموارد حيث يتم نشر diskencryptionset. وإلا، سوف تحصل على خطأ، ما يشير إلى أن الهوية المُدارة ليس لديها أذونات.

لتعيين هوية نظام مجموعة AKS دور المساهم لمجموعة diskencryptionset، قم بتنفيذ الأوامر التالية:

aksIdentity=$(az aks show --resource-group $RG_NAME --name $CLUSTER_NAME --query "identity.principalId")
az role assignment create --role "Contributor" --assignee $aksIdentity --scope $diskEncryptionSetId

إنشاء ملف يُسمى byok-azure-disk.yaml يحتوي على المعلومات التالية. استبدل myAzureSubscriptionId وmyResourceGroup وmyDiskEncrptionSetName بقيمك، وقم بتطبيق yaml. تأكد من استخدام مجموعة الموارد حيث يتم نشر DiskEncryptionSet.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: byok
provisioner: disk.csi.azure.com # replace with "kubernetes.io/azure-disk" if aks version is less than 1.21
parameters:
  skuname: StandardSSD_LRS
  kind: managed
  diskEncryptionSetID: "/subscriptions/{myAzureSubscriptionId}/resourceGroups/{myResourceGroup}/providers/Microsoft.Compute/diskEncryptionSets/{myDiskEncryptionSetName}"

بعد ذلك، قم بتشغيل الأوامر التالية لتحديث نظام مجموعة AKS:

# Get credentials
az aks get-credentials --name myAksCluster --resource-group myResourceGroup --output table

# Update cluster
kubectl apply -f byok-azure-disk.yaml

الخطوات التالية

مراجعة أفضل الممارسات لأمن نظام مجموعة AKS