تمكين تشفير بيانات KMS في مجموعات خدمة Azure Kubernetes ‏(AKS) (Preview)

توضح لك هذه المقالة كيفية تفعيل تشفير بيانات خدمة إدارة المفاتيح (KMS) لأسرار Kubernetes في خدمة Azure Kubernetes ‏(AKS). تشفير KMS يشفر أسرار Kubernetes المخزنة في etcd باستخدام مفاتيح Azure Key Vault.

يدعم AKS خيارين رئيسيين للإدارة فقط:

  • مفاتيح المنصة المدارة (PMK): تقوم AKS تلقائيا بإنشاء وإدارة مفاتيح التشفير. يوفر هذا الخيار أبسط إعداد مع تدوير تلقائي للمفاتيح.
  • مفاتيح إدارة العميل (CMK): تقوم بإنشاء وإدارة خزنة مفاتيح Azure ومفاتيح التشفير الخاصة بك. يوفر هذا الخيار تحكما كاملا في دورة حياة المفتاح ويلبي متطلبات الامتثال التي تفرض المفاتيح المدارة من قبل العملاء.

لمزيد من المعلومات حول مفاهيم التشفير وخيارات المفاتيح، راجع مفاهيم تشفير البيانات عند السكون ل AKS.

Important

تتوفر ميزات معاينة AKS على أساس الخدمة الذاتية والاشتراك. يتم توفير المعاينات "كما هي" و"كما هي متوفرة"، ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. تتم تغطية معاينات AKS جزئيًا بواسطة دعم العملاء على أساس بذل أفضل الجهود. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:

Prerequisites

  • تتطلب هذه المقالة الإصدار 2.73.0 أو أحدث من واجهة الأزرور. إذا كنت تستخدم Azure Cloud Shell، فإن أحدث إصدار مثبت بالفعل هناك.
  • تحتاج إلى aks-preview إصدار إضافة Azure CLI 19.0.0b13 أو أحدث.
    • إذا لم يكن لديك aks-preview الملحق بالفعل، فقم بتثبيته باستخدام az extension add الأمر .
      az extension add --name aks-preview
      
    • إذا كان لديك aks-preview الملحق بالفعل، فقم بتحديثه للتأكد من أن لديك أحدث إصدار باستخدام az extension update الأمر .
      az extension update --name aks-preview
      
  • kubectl أداة CLI مثبتة.

تسجيل علامة الميزة

لاستخدام تشفير بيانات KMS مع مفاتيح تدار من المنصة، سجل علامة KMSPMKPreview الميزة في اشتراكك.

  1. سجل علم الميزة باستخدام az feature register الأمر.

    az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  2. تحقق من حالة التسجيل باستخدام az feature show الأمر . يستغرق الأمر بضع دقائق حتى تظهر الحالة مُسجل.

    az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  3. عندما تظهر الحالة مسجلة، قم بتحديث تسجيل مزود موارد Microsoft.ContainerService باستخدام az provider register الأمر.

    az provider register --namespace Microsoft.ContainerService
    

قم بتعيين متغيرات البيئة

قم بإعداد متغيرات البيئة لنشرك. استبدل القيم المؤقتة بقيمك الخاصة.

# Set environment variables
export SUBSCRIPTION_ID="<your-subscription-id>"
export RESOURCE_GROUP="<your-resource-group>"
export LOCATION="<your-location>"
export CLUSTER_NAME="<your-cluster-name>"

# Set subscription
az account set --subscription $SUBSCRIPTION_ID

# Create resource group if it doesn't exist
az group create --name $RESOURCE_GROUP --location $LOCATION

تمكين تشفير المفاتيح المدارة على المنصة

مع المفاتيح المدارة على المنصة، تقوم AKS تلقائيا بإنشاء وإدارة خزنة مفاتيح Azure ومفاتيح التشفير. يتم التحكم تلقائيا في تدوير المفاتيح بواسطة المنصة.

أنشئ عنقود AKS جديد باستخدام مفاتيح مدارة على المنصة

أنشئ عنقود AKS جديد مع تشفير KMS باستخدام مفاتيح تدار من المنصة.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --generate-ssh-keys

تمكين المفاتيح المدارة على المنصة على مجموعة موجودة

تمكين تشفير KMS باستخدام مفاتيح مدارة على المنصة على مجموعة AKS موجودة.

ملاحظة

يجب أن يكون العنقود يعمل بإصدار Kubernetes 1.33 أو أحدث.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled

تحقق من تكوين KMS

بعد تفعيل تشفير KMS، تحقق من الإعدادات.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

يشمل الإخراج تكوين KMS:

{
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

تمكين تشفير المفاتيح المدارة من قبل العميل باستخدام خزنة المفاتيح الخاصة

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

أنشئ خزنة مفاتيح ومفتاح مع وصول للخدمات الموثوقة

ملاحظة

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

  1. إنشاء مخزن مفاتيح مع Azure RBAC enabled.

    export KEY_VAULT_NAME="<your-key-vault-name>"
    
    az keyvault create \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-rbac-authorization true \
        --public-network-access Enabled
    
    # Get the key vault resource ID
    export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)
    
  2. خصص لنفسك دور مسؤول العملات الرقمية في خزنة المفاتيح لإنشاء مفتاح.

    az role assignment create \
        --role "Key Vault Crypto Officer" \
        --assignee-object-id $(az ad signed-in-user show --query id -o tsv) \
        --assignee-principal-type "User" \
        --scope $KEY_VAULT_RESOURCE_ID
    
  3. أنشئ مفتاحا في خزنة المفاتيح. تأكد encrypt من decrypt تمكين العمليات الرئيسية.

    export KEY_NAME="<your-key-name>"
    
    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME
    
    # Get the key ID (without version for automatic rotation)
    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv)
    export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
    
  4. فعل جدار الحماية الخاص بمخزن المفاتيح مع تجاوز الخدمات الموثوقة.

    az keyvault update \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --default-action Deny \
        --bypass AzureServices
    

    يمنع المعامل --default-action Deny الوصول إلى الشبكة العامة، ويسمح هذا المعامل --bypass AzureServices لخدمات Azure الموثوقة (بما في ذلك AKS) بالوصول إلى خزنة المفاتيح.

إنشاء هوية مُدارة يعينها المستخدم

  1. أنشئ هوية مدارة معينة من قبل المستخدم للمجموعة.

    export IDENTITY_NAME="<your-identity-name>"
    
    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
    # Get the identity details
    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    
  2. تعيين الأدوار المطلوبة للهوية المدارة.

    # Assign Key Vault Crypto User role for encrypt/decrypt operations
    az role assignment create \
        --role "Key Vault Crypto User" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    
    # Assign Key Vault Contributor role for key management
    az role assignment create \
        --role "Key Vault Contributor" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    

أنشئ عنقود AKS جديد باستخدام مفاتيح يديرها العميل (خاص)

أنشئ عنقود AKS جديد مع تشفير KMS باستخدام مفاتيح يديرها العميل مع خزنة مفاتيح خاصة.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Private \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --generate-ssh-keys

تمكين المفاتيح المدارة من قبل العميل على مجموعة موجودة (خاصة)

تمكين تشفير KMS باستخدام مفاتيح تديرها العملاء باستخدام خزنة مفاتيح خاصة على عنقود AKS موجود.

ملاحظة

يجب أن يكون العنقود يعمل بإصدار Kubernetes 1.33 أو أحدث.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Private \
    --assign-identity $IDENTITY_RESOURCE_ID

تحقق من تكوين KMS

بعد تفعيل تشفير KMS، تحقق من الإعدادات.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

يشمل الإخراج تكوين KMS:

{
    "azureKeyVaultKms": {
        "enabled": true,
        "keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
        "keyVaultNetworkAccess": "Private",
        "keyVaultResourceId": "<key-vault-resource-id>"
    },
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

تمكين تشفير المفاتيح المدارة من قبل العميل باستخدام خزنة المفاتيح العامة

مع المفاتيح التي يديرها العميل، تقوم بإنشاء وإدارة خزنة مفاتيح Azure ومفاتيح التشفير الخاصة بك. يوضح هذا القسم كيفية تكوين المفاتيح التي يديرها العميل مع خزنة المفاتيح العامة.

أنشئ خزنة مفاتيح ومفتاح

  1. إنشاء مخزن مفاتيح مع Azure RBAC enabled.

    export KEY_VAULT_NAME="<your-key-vault-name>"
    
    az keyvault create \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-rbac-authorization true \
        --public-network-access Enabled
    
    # Get the key vault resource ID
    export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)
    
  2. خصص لنفسك دور مسؤول العملات الرقمية في خزنة المفاتيح لإنشاء مفتاح.

    az role assignment create \
        --role "Key Vault Crypto Officer" \
        --assignee-object-id $(az ad signed-in-user show --query id -o tsv) \
        --assignee-principal-type "User" \
        --scope $KEY_VAULT_RESOURCE_ID
    
  3. أنشئ مفتاحا في خزنة المفاتيح. تأكد encrypt من decrypt تمكين العمليات الرئيسية.

    export KEY_NAME="<your-key-name>"
    
    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME
    
    # Get the key ID (without version for automatic rotation)
    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv)
    export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
    

إنشاء هوية مُدارة يعينها المستخدم

  1. أنشئ هوية مدارة معينة من قبل المستخدم للمجموعة.

    export IDENTITY_NAME="<your-identity-name>"
    
    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
    # Get the identity details
    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    
  2. تعيين الأدوار المطلوبة للهوية المدارة.

    # Assign Key Vault Crypto User role for encrypt/decrypt operations
    az role assignment create \
        --role "Key Vault Crypto User" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    
    # Assign Key Vault Contributor role for key management
    az role assignment create \
        --role "Key Vault Contributor" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    

أنشئ عنقود AKS جديد باستخدام مفاتيح يديرها العميل

أنشئ عنقود AKS جديد مع تشفير KMS باستخدام مفاتيح يديرها العميل.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --generate-ssh-keys

تمكين المفاتيح المدارة من قبل العميل على عنقود موجود

تمكين تشفير KMS باستخدام مفاتيح يديرها العميل على مجموعة AKS موجودة.

ملاحظة

يجب أن يكون العنقود يعمل بإصدار Kubernetes 1.33 أو أحدث.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID

تحقق من تكوين KMS

بعد تفعيل تشفير KMS، تحقق من الإعدادات.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

يشمل الإخراج تكوين KMS:

{
    "azureKeyVaultKms": {
        "enabled": true,
        "keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
        "keyVaultNetworkAccess": "Public",
        "keyVaultResourceId": "<key-vault-resource-id>"
    },
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

التنقل بين خيارات إدارة المفاتيح

يمكنك التنقل بين المفاتيح المدارة على المنصة والمفاتيح التي يديرها العملاء.

الانتقال من المفاتيح المدارة على المنصة إلى المفاتيح التي يديرها العميل

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

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID

الانتقال من المفاتيح التي يديرها العميل إلى مفاتيح تدار على المنصة

للانتقال من المفاتيح التي يديرها العملاء إلى المفاتيح المدارة على المنصة:

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --disable-azure-keyvault-kms

دوران المفتاح

مع تشفير بيانات KMS، يتم التعامل مع تدوير المفاتيح بشكل مختلف حسب خيار إدارة المفاتيح لديك:

  • مفاتيح تدار من المنصة: تدوير المفاتيح تلقائي. لا توجد أية إجراءات مطلوبة.
  • مفاتيح يديرها العميل: عند تدوير نسخة المفتاح في Azure Key Vault، تكتشف وحدة تحكم KMS التدوير بشكل دوري (كل 6 ساعات) وتستخدم النسخة الجديدة من المفتاح.

ملاحظة

على عكس تجربة KMS القديمة، مع هذا التطبيق الجديد لا تحتاج إلى إعادة تشفير الأسرار يدويا بعد تدوير المفاتيح. المنصة تتعامل مع هذا تلقائيا.