استخدم موفر Azure Key Vault لبرنامج تشغيل Secrets Store CSI في نظام مجموعة Azure Kubernetes Service (AKS)

يوفر مزود Azure Key Vault لبرنامج تشغيل واجهة تخزين حاوية Secrets Store (CSI) بدمج مخزن مفتاح Azure كمخزن سري مع عنقود Azure Kubernetes Service (AKS) عبر وحدة تخزين CSI.

الميزات

  • تحميل البيانات السرية والمفاتيح والشهادات إلى جراب باستخدام وحدة تخزين CSI.
  • يدعم وحدات التخزين المضمنة ل CSI.
  • يدعم تحميل عدة أسرار تخزين الكائنات كحجم واحد.
  • يدعم قابلية نقل البودات مع تعريف SecretProviderClass الموارد المخصص (CRD).
  • يدعم حاويات Windows.
  • تتم المزامنة مع أسرار Kubernetes.
  • يدعم التشغيل التلقائي للمحتويات المثبتة وأسرار Kubernetes المتزامنة.

القيود

  • الحاوية التي تستخدم أو ConfigMapSecret كحامل subPath حجم لا تتلقى تحديثات تلقائية عند تدوير السر، وهذا حد من قيود كوبيرنيتس. لكي تسري التغييرات، يحتاج التطبيق إلى إعادة تحميل الملف الذي تم تغييره إما عن طريق مراقبة التغييرات في نظام الملفات أو عن طريق إعادة تشغيل الجراب. لمزيد من المعلومات، راجع قيود Secrets Store CSI Driver المعروفة.
  • تقوم الإضافة بإنشاء هوية مدارة تسمى azurekeyvaultsecretsprovider-xxxxx في مجموعة موارد العقدة (MC_) وتعيينها تلقائيا إلى مجموعة مقياس الآلة الافتراضية. يمكنك استخدام هذه الهوية المدارة أو الهوية المدارة الخاصة بك للوصول إلى مخزن المفاتيح. لا يتم دعم منع إنشاء الهوية.

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

الشبكة

الأدوار

إنشاء أو تحديث عنقود AKS

إنشاء عنقود AKS مع مزود Azure Key Vault لدعم برنامج تشغيل CSI في Secrets Store.

  1. أنشئ متغيرات تستخدم في الأوامر لإنشاء عنقود AKS وخزنة المفاتيح.

    export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM")
    export KEYVAULT_NAME=myKeyVault${RANDOM_STRING}
    export RESOURCE_GROUP=myResourceGroup
    export CLUSTER_NAME=myAKSCluster
    export LOCATION=eastus2
    

    يجب أن تكون أسماء خزنة مفاتيح Azure فريدة عالميا، أبجدية رقمية تشمل الشرطات، وتحتوي على 3-24 حرفا. اسم خزنة المفاتيح يربط قيمة المتغير KEYVAULT_NAMEmyKeyVault بسلسلة RANDOM_STRING المتغيرات المكونة من 10 أحرف.

  2. إنشاء مجموعة موارد Azure باستخدام az group create الأمر .

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. إنشاء نظام مجموعة AKS مع موفر Azure Key Vault لإمكانية Secrets Store CSI Driver باستخدام az aks create الأمر مع المعلمة --enable-addons azure-keyvault-secrets-provider .

    ينشئ هذا --enable-addons المعامل هوية مدارة معينة من قبل المستخدم تسمى azurekeyvaultsecretsprovider-xxxx يمكنك استخدامها للمصادقة على خزنة مفاتيحك. يتم تخزين الهوية المدارة في مجموعة موارد العقد (MC_) ويتم تعيينها تلقائيا لمجموعة مقياس الآلة الافتراضية. يمكنك استخدام هذه الهوية المدارة أو الهوية المدارة الخاصة بك للوصول إلى مخزن المفاتيح. لا يتم دعم منع إنشاء الهوية.

    az aks create \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP \
      --enable-addons azure-keyvault-secrets-provider \
      --generate-ssh-keys
    

    نصيحة

    إذا كنت تريد استخدام معرف Microsoft Entra Workload ID، يجب أن az aks create يتضمن الأمر ال و --enable-oidc-issuer--enable-workload-identity المعلمات.

تحقق من الهوية المدارة

استخدم الخطوات التالية للتحقق من إنشاء الهوية المدارة وتعيينها لمجموعة مقياس الآلة الافتراضية في العنقود.

  1. تحقق من إنشاء الهوية المدارة وتعيينها للعنقود باستخدام az aks show الأمر.

    az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query addonProfiles
    
    {
      "azureKeyvaultSecretsProvider": {
        "config": {
          "enableSecretRotation": "false",
          "rotationPollInterval": "2m"
        },
        "enabled": true,
        "identity": {
          "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
          "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
          "resourceId": "/subscriptions/<subscriptionID>/resourcegroups/MC_myResourceGroup_myAKSCluster_eastus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/azurekeyvaultsecretsprovider-myakscluster"
        }
      }
    }
    

    تظهر الخاصية resourceId مجموعة الموارد واسم azurekeyvaultsecretsprovider-myaksclusterالهوية .

  2. تحقق من أن الهوية المدارة معينة لمجموعة مقياس الآلة الافتراضية في مجموعة موارد العقدة.

    NODE_RG=$(az aks show \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP \
      --query nodeResourceGroup --output tsv)
    
    VMSS_NAME=$(az vmss list \
      --resource-group $NODE_RG \
      --query [].name --output tsv)
    
    az vmss show --name $VMSS_NAME --resource-group $NODE_RG --query '[id, identity]'
    

    يظهر الناتج معرف الموارد لمجموعات Microsoft.Compute/virtualMachineScaleSets مقياس الآلات الافتراضية والخاصية userAssignedIdentities التي تحتوي على معرف مورد يؤكد azurekeyvaultsecretsprovider-myakscluster أن الهوية مخصصة لمجموعة مقياس الآلة الافتراضية.

تحقق من موفر Azure Key Vault لتثبيت Secrets Store CSI Driver

  1. احصل على بيانات اعتماد نظام مجموعة AKS باستخدام az aks get-credentials الأمر .

    az aks get-credentials \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP
    
  2. تحقق من انتهاء التثبيت باستخدام kubectl get pods الأمر، الذي يسرد جميع الكبسولات مع التسميات secrets-store-csi-driver و secrets-store-provider-azure /وعلامات في kube-system مساحة الأسماء.

    kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver,secrets-store-provider-azure)' -o wide
    

    تتضمن العلامة o wide العقدة التي يعمل عليها كل وحدة في المخرج.

    يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:

    NAME                                     READY   STATUS    RESTARTS   AGE    NODE
    aks-secrets-store-csi-driver-4vpkj       3/3     Running   2          4m25s  aks-nodepool1-12345678-vmss000002
    aks-secrets-store-csi-driver-ctjq6       3/3     Running   2          4m21s  aks-nodepool1-12345678-vmss000001
    aks-secrets-store-csi-driver-tlvlq       3/3     Running   2          4m24s  aks-nodepool1-12345678-vmss000000
    aks-secrets-store-provider-azure-5p4nb   1/1     Running   0          4m21s  aks-nodepool1-12345678-vmss000000
    aks-secrets-store-provider-azure-6pqmv   1/1     Running   0          4m24s  aks-nodepool1-12345678-vmss000001
    aks-secrets-store-provider-azure-f5qlm   1/1     Running   0          4m25s  aks-nodepool1-12345678-vmss000002
    

قم بإنشاء أو استخدام Azure Key Vault الموجود

إنشاء أو تحديث مخزن مفاتيح مع تمكين التحكم في الوصول استنادا إلى الدور Azure (Azure RBAC) باستخدام az keyvault create الأمر أو az keyvault update الأمر مع العلامة --enable-rbac-authorization .

Azure RBAC مفعل افتراضيا عند إنشاء خزنة مفاتيح جديدة حتى لو لم تتضمن المعاملة --enable-rbac-authorization . المعامل ضروري عند تحديث خزنة مفاتيح موجودة تم تعطيل Azure RBAC.

لمزيد من المعلومات حول نماذج أذونات خزنة المفاتيح وAzure RBAC، راجع توفير الوصول إلى مفاتيح خزنة المفاتيح والشهادات والأسرار مع تحكم وصول قائم على أدوار Azure

  1. تمكين تفويض Azure RBAC لخزنة مفاتيح جديدة أو تحديث خزنة مفاتيح موجودة.

    شغل الأمر az keyvault create لإنشاء خزنة مفاتيح جديدة مع تفعيل Azure RBAC.

    az keyvault create \
      --name $KEYVAULT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --enable-rbac-authorization
    
  2. شغل الأمر az keyvault show للتحقق من أن خزنة المفاتيح مفعلة في Azure RBAC.

    az keyvault show \
      --name $KEYVAULT_NAME \
      --resource-group $RESOURCE_GROUP \
      --query properties.enableRbacAuthorization
    

    يجب أن يكون trueالناتج هو .

  3. أضف تعيين دور لحساب المستخدم الخاص بك إلى نطاق خزنة المفاتيح باستخدام az role assignment create الأمر حتى تتمكن من إضافة سر خزنة المفاتيح في الخطوة التالية.

    تمت إضافة دور ضابط أسرار خزنة المفاتيح مع معرف b86a8fe4-44ce-4948-aee5-eccb2c155cd7 فريد ويمكنك استخدام الاسم أو المعرف الفريد. استخدام معرف الدور الفريد هو ممارسة مثلى لمنع حدوث مشاكل إذا تغير اسم الدور.

    KEYVAULT_ID=$(az keyvault show \
      --name $KEYVAULT_NAME \
      --resource-group $RESOURCE_GROUP \
      --query id -o tsv)
    
    MYID=$(az ad signed-in-user show --query id --output tsv)
    
    az role assignment create \
      --assignee-object-id $MYID \
      --role "b86a8fe4-44ce-4948-aee5-eccb2c155cd7" \
      --scope $KEYVAULT_ID \
      --assignee-principal-type User
    

    قد يستغرق الأمر عدة دقائق حتى يبدأ تفعيل تعيين الدور. يمكنك التحقق من إنشاء تعيين الدور باستخدام الأمر التالي:

    az role assignment list \
      --assignee-object-id $MYID \
      --scope $KEYVAULT_ID \
      --query '[].{Role:roleDefinitionName, Scope:scope}' \
      --output table
    
  4. أنشئ سريا نصيا مسماة ExampleSecret في خزنة المفاتيح باستخدام الأمر az keyvault secret set .

    يمكن لمخزن المفاتيح تخزين المفاتيح والأسرار والشهادات. يستخدم المعامل value المتغير RANDOM_STRING لإنشاء قيمة فريدة للسر.

    az keyvault secret set \
      --vault-name $KEYVAULT_NAME \
      --name ExampleSecret \
      --value MyAKSExampleSecret${RANDOM_STRING}
    
  5. تحقق من إضافة السر إلى خزنة المفاتيح باستخدام az keyvault secret show الأمر.

    az keyvault secret show --vault-name $KEYVAULT_NAME --name ExampleSecret
    

تنظيف الموارد

إذا كنت ذاهبا إلى المقالة التالية وتحتاج إلى هذه الموارد، تجاهل الخطوات التالية. وإلا، إذا انتهيت ولم تكن تخطط للمتابعة إلى المقال التالي، يجب عليك حذف الموارد التي تم إنشاؤها في هذا المقال لتجنب التكاليف غير الضرورية.

  1. قم بإزالة بيانات اعتماد العنقود من ملف .kube/config المحلي.

    KUBE_CONTEXT=$(kubectl config current-context)
    kubectl config delete-context $KUBE_CONTEXT
    
  2. احذف مجموعة الموارد وجميع الموارد داخلها، بما في ذلك الموارد في مجموعة موارد العقدة (MC_) باستخدام az group delete الأمر.

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

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

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