استخدام ملحق Azure Key Vault Secrets Provider لإحضار البيانات السرية في أنظمة مجموعات Kubernetes الممكنة في Azure Arc
يسمح مزود Azure Key Vault For Secrets Store CSI Driver بدمج Azure Key Vault كمخزن أسرار مع مجموعة Kubernetes عبر وحدة تخزين CSI. لأنظمة مجموعات Kubernetes الممكنة في Azure Arc، يمكنك تثبيت ملحق Azure Key Vault Secrets Provider لإحضار البيانات السرية.
تتضمن قدرات ملحق Azure Key Vault Secrets Provider ما يلي:
- إدخال البيانات السرية/المفاتيح/الشهادات إلى حاويات التطبيق ذات وحدات تخزين مشتركة باستخدام وحدة تخزين مضمنة CSI
- يدعم قابلية جراب مع SECRETProviderClass CRD
- يدعم حاويات Linux وWindows
- يدعم المزامنة مع البيانات السرية في Kubernetes
- يدعم التدوير التلقائي للبيانات السرية
- يتم توزيع مكونات الملحق في مناطق التوفر، ما يجعلها متكررة في المنطقة
المتطلبات الأساسية
- نظام مجموعة مع توزيع Kubernetes مدعوم تم توصيله بالفعل ب Azure Arc. يتم حاليا دعم توزيعات Kubernetes التالية لهذا السيناريو:
- واجهة برمجة تطبيقات نظام المجموعة في Azure
- مجموعات Azure Kubernetes Service (AKS) على Azure Stack HCI
- AKS ممكن بواسطة Azure Arc
- محرك Google Kubernetes
- توزيع OpenShift Kubernetes
- توزيع Canonical Kubernetes
- خدمة Elastic Kubernetes
- خطوط شبكة Tanzu Kubernetes
- Azure Red Hat OpenShift
- تأكد من استيفاء المتطلبات الأساسية العامة لملحقات نظام المجموعة. يجب عليك استخدام الإصدار 0.4.0 أو الأحدث من ملحق Azure CLI
k8s-extension
.
تثبيت ملحق Azure Key Vault Secrets Provider على نظام مجموعة Kubernetes الممكن في Arc
يمكنك تثبيت ملحق Azure Key Vault Secrets Provider على نظام المجموعة المتصل في مدخل Microsoft Azure، أو باستخدام Azure CLI، أو عن طريق نشر قالب ARM.
يمكن توزيع مثيل واحد فقط من الملحق على كل نظام مجموعة Kubernetes ممكن في Azure Arc.
تلميح
إذا كان نظام المجموعة خلف خادم وكيل صادر، فتأكد من توصيله ب Azure Arc باستخدام خيار تكوين الوكيل قبل تثبيت الملحق.
مدخل Azure
في مدخل Azure، انتقل إلى Kubernetes - Azure Arc وحدد نظام المجموعة الخاص بك.
حدد الملحقات (ضمن الإعدادات)، ثم حدد + إضافة.
من قائمة الملحقات المتوفرة، حدد Azure Key Vault Secrets Provider لتوزيع أحدث إصدار من الملحق.
اتبع المطالبات لتوزيع الملحق. إذا لزم الأمر، قم بتخصيص التثبيت عن طريق تغيير الخيارات الافتراضية في علامة التبويب Configuration .
Azure CLI
تعيين متغيرات البيئة:
export CLUSTER_NAME=<arc-cluster-name> export RESOURCE_GROUP=<resource-group-name>
ثبّت Secrets Store CSI Driver وملحق Azure Key Vault Secrets Provider عن طريق تشغيل الأمر التالي:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider
يجب أن تشاهد إخراجا مشابها لهذا المثال. قد يستغرق الأمر عدة دقائق قبل نشر مخطط Helm لموفر الأسرار إلى نظام المجموعة.
{
"aksAssignedIdentity": null,
"autoUpgradeMinorVersion": true,
"configurationProtectedSettings": {},
"configurationSettings": {},
"customLocationSettings": null,
"errorInfo": null,
"extensionType": "microsoft.azurekeyvaultsecretsprovider",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/akvsecretsprovider",
"identity": {
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": null,
"type": "SystemAssigned"
},
"location": null,
"name": "akvsecretsprovider",
"packageUri": null,
"provisioningState": "Succeeded",
"releaseTrain": "Stable",
"resourceGroup": "$RESOURCE_GROUP",
"scope": {
"cluster": {
"releaseNamespace": "kube-system"
},
"namespace": null
},
"statuses": [],
"systemData": {
"createdAt": "2022-05-12T18:35:56.552889+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2022-05-12T18:35:56.552889+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/extensions",
"version": "1.1.3"
}
قالب ARM
أنشئ ملف .json بالتنسيق التالي. تأكد من تحديث قيمة <اسم-نظام مجموعة> للإشارة إلى نظام المجموعة الخاص بك.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "ConnectedClusterName": { "defaultValue": "<cluster-name>", "type": "String", "metadata": { "description": "The Connected Cluster name." } }, "ExtensionInstanceName": { "defaultValue": "akvsecretsprovider", "type": "String", "metadata": { "description": "The extension instance name." } }, "ExtensionVersion": { "defaultValue": "", "type": "String", "metadata": { "description": "The version of the extension type." } }, "ExtensionType": { "defaultValue": "Microsoft.AzureKeyVaultSecretsProvider", "type": "String", "metadata": { "description": "The extension type." } }, "ReleaseTrain": { "defaultValue": "stable", "type": "String", "metadata": { "description": "The release train." } } }, "functions": [], "resources": [ { "type": "Microsoft.KubernetesConfiguration/extensions", "apiVersion": "2021-09-01", "name": "[parameters('ExtensionInstanceName')]", "identity": { "type": "SystemAssigned" }, "properties": { "extensionType": "[parameters('ExtensionType')]", "releaseTrain": "[parameters('ReleaseTrain')]", "version": "[parameters('ExtensionVersion')]" }, "scope": "[concat('Microsoft.Kubernetes/connectedClusters/', parameters('ConnectedClusterName'))]" } ] }
الآن قم بتعيين متغيرات البيئة باستخدام أمر Azure CLI التالي:
export TEMPLATE_FILE_NAME=<template-file-path> export DEPLOYMENT_NAME=<desired-deployment-name>
وأخيرًا، قم بتشغيل أمر Azure CLI هذا لتثبيت ملحق Azure Key Vault Secrets Provider:
az deployment group create --name $DEPLOYMENT_NAME --resource-group $RESOURCE_GROUP --template-file $TEMPLATE_FILE_NAME
يجب أن تكون الآن قادرًا على عرض موارد موفر البيانات السرية واستخدام الملحق في نظام المجموعة الخاص بك.
التحقق من صحة تثبيت الملحق
لتأكيد التثبيت الناجح لملحق Azure Key Vault Secrets Provider، قم بتشغيل الأمر التالي.
az k8s-extension show --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
يجب أن تشاهد إخراجا مشابها لهذا المثال.
{
"aksAssignedIdentity": null,
"autoUpgradeMinorVersion": true,
"configurationProtectedSettings": {},
"configurationSettings": {},
"customLocationSettings": null,
"errorInfo": null,
"extensionType": "microsoft.azurekeyvaultsecretsprovider",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/akvsecretsprovider",
"identity": {
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": null,
"type": "SystemAssigned"
},
"location": null,
"name": "akvsecretsprovider",
"packageUri": null,
"provisioningState": "Succeeded",
"releaseTrain": "Stable",
"resourceGroup": "$RESOURCE_GROUP",
"scope": {
"cluster": {
"releaseNamespace": "kube-system"
},
"namespace": null
},
"statuses": [],
"systemData": {
"createdAt": "2022-05-12T18:35:56.552889+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2022-05-12T18:35:56.552889+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/extensions",
"version": "1.1.3"
}
إنشاء Azure Key Vault أو تحديده
بعد ذلك، حدد Azure Key Vault لاستخدامه مع نظام المجموعة المتصل. إذا لم يكن لديك واحد بالفعل، فقم بإنشاء Key Vault جديد باستخدام الأوامر التالية. ضع في اعتبارك أن اسم مخزن المفاتيح الخاص بك يجب أن يكون فريدا عالميا.
عيّن متغيرات البيئة التالية:
export AKV_RESOURCE_GROUP=<resource-group-name>
export AZUREKEYVAULT_NAME=<AKV-name>
export AZUREKEYVAULT_LOCATION=<AKV-location>
أولاً، قم بتشغيل الأمر التالي:
az keyvault create -n $AZUREKEYVAULT_NAME -g $AKV_RESOURCE_GROUP -l $AZUREKEYVAULT_LOCATION
يمكن لـ Azure Key Vault تخزين المفاتيح والأسرار والشهادات. على سبيل المثال، يمكنك تعيين بيانات سرية لنص عادي يسمى DemoSecret
باستخدام الأمر التالي:
az keyvault secret set --vault-name $AZUREKEYVAULT_NAME -n DemoSecret --value MyExampleSecret
قبل الانتقال إلى القسم التالي، لاحظ الخصائص التالية:
- اسم عنصر البيانات السرية في Key Vault
- نوع الكائن (السري أو المفتاح أو الشهادة)
- اسم مورد Key Vault
- معرف مستأجر Azure للاشتراك الذي ينتمي إليه Key Vault
توفير الهوية للوصول إلى Azure Key Vault
حاليًا، يمكن الوصول إلى Secrets Store CSI Driver على أنظمة المجموعات الممكنة في Arc من خلال كيان الخدمة. اتبع هذه الخطوات لتوفير هوية يمكنها الوصول إلى Key Vault الخاص بك.
اتبع الخطوات لإنشاء كيان خدمة في Azure. لاحظ معرف العميل وسر العميل الذي تم إنشاؤه في هذه الخطوة.
بعد ذلك، تأكد من أن Azure Key Vault لديه إذن GET لكيان الخدمة الذي تم إنشاؤه.
استخدم معرف العميل وسر العميل من الخطوة الأولى لإنشاء سر Kubernetes على نظام المجموعة المتصل:
kubectl create secret generic secrets-store-creds --from-literal clientid="<client-id>" --from-literal clientsecret="<client-secret>"
تسمية البيانات السرية التي تم إنشاؤها:
kubectl label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
SecretProviderClass
أنشئ باستخدام YAML التالي، واملأ القيم الخاصة بك لاسم مخزن المفاتيح ومعرف المستأجر والعناصر لاستردادها من مثيل AKV الخاص بك:# This is a SecretProviderClass example using service principal to access Keyvault apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: akvprovider-demo spec: provider: azure parameters: usePodIdentity: "false" keyvaultName: <key-vault-name> cloudName: # Defaults to AzurePublicCloud objects: | array: - | objectName: DemoSecret objectType: secret # object types: secret, key or cert objectVersion: "" # [OPTIONAL] object versions, default to latest if empty tenantId: <tenant-Id> # The tenant ID of the Azure Key Vault instance
للاستخدام مع السحب الوطنية، قم بالتغيير
cloudName
إلىAzureUSGovernmentCloud
ل Azure Government، أو إلىAzureChinaCloud
Microsoft Azure المشغل بواسطة 21Vianet.قم بتطبيق SecretProviderClass على مجموعتك:
kubectl apply -f secretproviderclass.yaml
قم بإنشاء كبينة باستخدام YAML التالي، مع ملء اسم هويتك:
# This is a sample pod definition for using SecretProviderClass and service principal to access Keyvault kind: Pod apiVersion: v1 metadata: name: busybox-secrets-store-inline spec: containers: - name: busybox image: k8s.gcr.io/e2e-test-images/busybox:1.29 command: - "/bin/sleep" - "10000" volumeMounts: - name: secrets-store-inline mountPath: "/mnt/secrets-store" readOnly: true volumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "akvprovider-demo" nodePublishSecretRef: name: secrets-store-creds
طبق الكبينة على مجموعتك:
kubectl apply -f pod.yaml
التحقق من صحة الأسرار
بعد بدء تشغيل جراب، يتوفر المحتوى المحمل في مسار وحدة التخزين المحدد في YAML النشر الخاص بك.
## show secrets held in secrets-store
kubectl exec busybox-secrets-store-inline -- ls /mnt/secrets-store/
## print a test secret 'DemoSecret' held in secrets-store
kubectl exec busybox-secrets-store-inline -- cat /mnt/secrets-store/DemoSecret
خيارات تكوين إضافية
يدعم ملحق Azure Key Vault Secrets Provider تكوينات مخطط Helm.
يتم استخدام إعدادات التكوين التالية بشكل متكرر مع ملحق موفر أسرار Azure Key Vault:
إعداد التكوين | Default | الوصف |
---|---|---|
enableSecretRotation | true | النوع المنطقي. إذا true ، يقوم بشكل دوري بتحديث إدخال حاويات التطبيق ذات وحدات التخزين المشتركة والبيانات السرية في Kubernetes بأحدث محتوى من مخزن البيانات السرية الخارجي |
rotationPollInterval | 2 م | إذا كان enableSecretRotation هو true ، يحدد هذا الإعداد مدة الفاصل الزمني للاستقصاء عن الاستدارة السرية. يمكن تعديل هذه المدة استنادًا إلى عدد المرات التي يجب فيها إعادة مزامنة المحتويات التي تم إدخالها لجميع حاويات التطبيق ذات وحدات التخزين المشتركة والبيانات السرية Kubernetes إلى أحدث إصدار. |
syncSecret.enabled | true | إدخال منطقي. في بعض الحالات، قد تحتاج إلى إنشاء Kubernetes Secret لعكس المحتوى المحمل. إذا سمح true وSecretProviderClass للحقل secretObjects بتعريف الحالة المرغوبة للعناصر المتزامنة للبيانات السرية في Kubernetes. |
يمكن تحديد هذه الإعدادات عند تثبيت الملحق باستخدام الأمر az k8s-extension create
:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider --configuration-settings secrets-store-csi-driver.enableSecretRotation=true secrets-store-csi-driver.rotationPollInterval=3m secrets-store-csi-driver.syncSecret.enabled=true
يمكنك أيضا تغيير هذه الإعدادات بعد التثبيت باستخدام az k8s-extension update
الأمر :
az k8s-extension update --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --name akvsecretsprovider --configuration-settings secrets-store-csi-driver.enableSecretRotation=true secrets-store-csi-driver.rotationPollInterval=3m secrets-store-csi-driver.syncSecret.enabled=true
يمكنك استخدام إعدادات التكوين الأخرى حسب الحاجة للتوزيع. على سبيل المثال، لتغيير دليل جذر kubelet أثناء إنشاء نظام مجموعة، قم بتعديل az k8s-extension create
الأمر:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider --configuration-settings linux.kubeletRootDir=/path/to/kubelet secrets-store-csi-driver.linux.kubeletRootDir=/path/to/kubelet
إلغاء تثبيت ملحق Azure Key Vault Secrets Provider
لإلغاء تثبيت الملحقات، قم بتشغيل الأمر التالي:
az k8s-extension delete --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
إشعار
لا يؤدي إلغاء تثبيت الملحق إلى حذف تعريفات الموارد المخصصة (CRDs) التي تم إنشاؤها عند تثبيت الملحق.
للتأكد من حذف مثيل الملحق، قم بتشغيل الأمر التالي:
az k8s-extension list --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
إذا تمت إزالة الملحق بنجاح، فلن ترى ملحق Azure Key Vault Secrets Provider مدرجا في الإخراج. إذا لم يكن لديك أي ملحقات أخرى مثبتة على نظام المجموعة، فسترى صفيفًا فارغًا.
إذا لم تعد بحاجة إليها، فتأكد من حذف سر Kubernetes المقترن بكيان الخدمة عن طريق تشغيل الأمر التالي:
kubectl delete secret secrets-store-creds
التسوية واستكشاف الأخطاء وإصلاحها
مصمم ملحق Azure Key Vault Secrets Provider للإصلاح الذاتي. إذا حاول شخص ما تغيير مكون ملحق تم نشره عند تثبيت الملحق أو حذفه، يتم تسوية هذا المكون مع حالته الأصلية. الاستثناءات الوحيدة هي لتعريفات الموارد المخصصة (CRDs). إذا تم حذف CRDs، فلن يتم تسويتها. لاستعادة CRDs المحذوفة استخدم الأمر az k8s-extension create
مرة أخرى مع اسم مثيل الملحق الموجود.
لمزيد من المعلومات حول حل المشكلات الشائعة، راجع إرشادات استكشاف أخطاء المصدر المفتوح وإصلاحها لـ Azure Key Vault provider لـ Secrets Store CSI driver وSecrets Store CSI Driver.
الخطوات التالية
- هل تريد التجربة؟ ابدأ بسرعة باستخدام سيناريو Azure Arc Jumpstart باستخدام واجهة برمجة تطبيقات نظام المجموعة.
- تعرف على المزيد حول Azure Key Vault.