إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يوفر مزود Azure Key Vault لبرنامج تشغيل واجهة تخزين حاوية Secrets Store (CSI) بدمج مخزن مفتاح Azure كمخزن سري مع عنقود خدمة Azure Kubernetes (AKS) عبر وحدة تخزين CSI.
الميزات
- تحميل البيانات السرية والمفاتيح والشهادات إلى جراب باستخدام وحدة تخزين CSI.
- يدعم وحدات التخزين المضمنة ل CSI.
- يدعم تحميل عدة أسرار تخزين الكائنات كحجم واحد.
- يدعم قابلية نقل البودات مع تعريف
SecretProviderClassالموارد المخصص (CRD). - يدعم حاويات Windows.
- تتم المزامنة مع أسرار Kubernetes.
- يدعم التشغيل التلقائي للمحتويات المثبتة وأسرار Kubernetes المتزامنة.
القيود
- الحاوية التي تستخدم أو
ConfigMapSecretكحاملsubPathحجم لا تتلقى تحديثات تلقائية عند تدوير السر، وهذا حد من قيود كوبيرنيتس. لكي تسري التغييرات، يحتاج التطبيق إلى إعادة تحميل الملف الذي تم تغييره إما عن طريق مراقبة التغييرات في نظام الملفات أو عن طريق إعادة تشغيل الجراب. لمزيد من المعلومات، راجع قيود Secrets Store CSI Driver المعروفة. - تقوم الإضافة بإنشاء هوية مدارة تسمى
azurekeyvaultsecretsprovider-xxxxxفي مجموعة موارد العقدة (MC_) وتعيينها تلقائيا إلى مجموعة مقياس الآلة الافتراضية. يمكنك استخدام هذه الهوية المدارة أو الهوية المدارة الخاصة بك للوصول إلى مخزن المفاتيح. لا يتم دعم منع إنشاء الهوية.
المتطلبات الأساسية
- في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
- تحقق من أن إصدار Azure CLI الخاص بك هو 2.30.0 أو أحدث. إذا كان إصداراً سابقاً، فثبّت أحدث إصدار.
في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
Terraform الذي هو الإصدار 1.6 أو أحدث.
Azure CLI التثبيت وتسجيل الدخول. تثبيت أحدث إصدار.
أذونات لإنشاء موارد AKS و Key Vault.
قم بتعيين اشتراك Azure الخاص بك في Azure CLI بالأمر التالي. استبدل
<subscriptionId>بمعرّف اشتراكك.az account set --subscription <subscriptionId>
الشبكة
- عند استخدام عناقيد معزولة في الشبكة، التوصية هي إعداد نقطة نهاية خاصة للوصول إلى Azure Key Vault.
- إذا كان نظام المجموعة يحتوي على نوع
userDefinedRoutingصادر ويستخدم جهاز جدار حماية يمكنه التحكم في نسبة استخدام الشبكة الصادرة استنادا إلى أسماء المجالات، مثل Azure Firewall، فتأكد من السماح بقواعد الشبكة الصادرة المطلوبة وFQDNs. - إذا كنت تقيد الدخول إلى نظام المجموعة، فتأكد من فتح المنفذين 9808 و8095.
الأدوار
- تستخدم هذه المقالة دور مسؤول أسرار خزنة المفاتيح لمنح حسابك إذنا لإنشاء سر في خزنة المفاتيح.
- في المقالة لتوفير الوصول إلى خزنة مفاتيح Azure، تحتاج الهوية المستخدمة مع
SecretProviderClassمستخدم شهادة خزنة المفاتيح للوصولkeyإلىcertificateومستخدم أسرار خزنة المفاتيح للوصولsecretإلى نوع الكائن.
إنشاء نظام مجموعة AKS
إنشاء عنقود AKS مع مزود Azure Key Vault لدعم برنامج تشغيل CSI في Secrets Store.
أنشئ متغيرات تستخدم في الأوامر لإنشاء عنقود 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 أحرف.إنشاء مجموعة موارد Azure باستخدام
az group createالأمر .az group create --name $RESOURCE_GROUP --location $LOCATIONإنشاء نظام مجموعة 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، يجب أن
az aks createيتضمن الأمر ال و--enable-oidc-issuer--enable-workload-identityالمعلمات.
إنشاء نظام مجموعة AKS
أنشئ ملف main.tf بالتكوين التالي لإنشاء عنقود AKS مع مزود Azure Key Vault لدعم برامج تشغيل CSI في Secrets Store.
أنشئ تكوين Terraform.
terraform { required_version = ">= 1.6.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} } data "azurerm_client_config" "current" {} resource "azurerm_resource_group" "rg" { name = "aks-rg" location = "East US" }أنشئ عنقود AKS.
resource "azurerm_kubernetes_cluster" "aks" { name = "aks-cluster" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name dns_prefix = "akscsi" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" } identity { type = "SystemAssigned" } key_vault_secrets_provider { secret_rotation_enabled = false } }نشر الإعدادات. قم بتشكيل جلسة Bash، وتشغيل الأوامر التالية لنشر الموارد:
terraform init terraform validate terraform plan terraform apply
تحديث نظام مجموعة AKS موجود
قم بتحديث عنقود AKS موجود مع مزود Azure Key Vault لدعم برنامج تشغيل CSI في Secrets Store.
أنشئ متغيرات تستخدم في الأوامر. استبدل القيم حسب الحاجة لتحديث عنقود AKS الحالي أو خزنة المفاتيح.
على سبيل المثال، إذا كنت تستخدم خزنة مفاتيح موجودة، استبدل قيمة المتغير
KEYVAULT_NAMEدون استخدام المتغيرRANDOM_STRING.إذا لم يكن لديك خزنة مفاتيح، يجب أن تكون أسماء خزنة مفاتيح Azure فريدة عالميا، أبجدية رقمية تشمل الشرطات، و3-24 حرفا. اسم خزنة المفاتيح يربط قيمة المتغير
KEYVAULT_NAMEmyKeyVaultبسلسلةRANDOM_STRINGالمتغيرات المكونة من 10 أحرف. يمكنك إنشاء خزنة المفاتيح لاحقا في هذا المقال.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قم بتحديث مجموعة AKS موجودة باستخدام مزود Azure Key Vault لميزة برنامج تشغيل CSI في Secrets Store باستخدام
az aks enable-addonsالأمر وفعل الإضافةazure-keyvault-secrets-provider. تنشئ الوظيفة الإضافية هوية مدارة معينة من قبل المستخدم يمكنك استخدامها للمصادقة على مخزن المفاتيح الخاص بك.az aks enable-addons \ --addons azure-keyvault-secrets-provider \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPبعد تفعيل مزود Azure Key Vault السريري، يقوم AKS بإنشاء هوية مدارة تحمل اسمها
azurekeyvaultsecretsprovider-xxxxيمكنك استخدامها للمصادقة على خزنة المفاتيح الخاصة بك. يتم تخزين الهوية المدارة في مجموعة موارد العقد (MC_) ويتم تعيينها تلقائيا لمجموعة مقياس الآلة الافتراضية. يمكنك استخدام هذه الهوية المدارة أو الهوية المدارة الخاصة بك للوصول إلى مخزن المفاتيح. لا يتم دعم منع إنشاء الهوية.
تحديث نظام مجموعة AKS موجود
أنشئ ملف main.tf مع التكوين التالي لتحديث عنقود AKS موجود مع مزود Azure Key Vault لدعم برنامج تشغيل CSI في Secrets Store.
تحديث ومجموعة AKS الحالية.
resource "azurerm_kubernetes_cluster" "aks" { name = "<existing-cluster>" resource_group_name = "<resource-group>" key_vault_secrets_provider { secret_rotation_enabled = false } }نشر الإعدادات. قم بتشكيل جلسة Bash، وتشغيل الأوامر التالية لنشر التكوين:
Run the following commands to apply the updates: terraform init terraform validate terraform plan terraform apply
تحقق من تثبيت مزود خدمة الخزانة المدارة والهاتف
إذا استخدمت Terraform لإنشاء عنقود جديد أو تحديث عنقود موجود، عليك استبدال المتغيرات كما $CLUSTER_NAME في الأوامر التالية بالقيم التي استخدمتها في تكوين Terraform الخاص بك.
تحقق من الهوية المدارة
استخدم الخطوات التالية للتحقق من إنشاء الهوية المدارة وتعيينها لمجموعة مقياس الآلة الافتراضية في العنقود.
تحقق من إنشاء الهوية المدارة وتعيينها للعنقود باستخدام
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الهوية .تحقق من أن الهوية المدارة مخصصة لمجموعة مقياس الآلة الافتراضية لمجموعة موارد العقدة.
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
احصل على بيانات اعتماد نظام مجموعة AKS باستخدام
az aks get-credentialsالأمر .az aks get-credentials \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPتحقق من انتهاء التثبيت باستخدام
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
إنشاء خزنة مفاتيح جديدة
شغل الأمر az keyvault create لإنشاء خزنة مفاتيح جديدة مع تفعيل Azure RBAC.
az keyvault create \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--enable-rbac-authorization
Azure RBAC مفعل افتراضيا عند إنشاء خزنة مفاتيح جديدة حتى لو لم تتضمن المعاملة --enable-rbac-authorization .
لمزيد من المعلومات حول نماذج الأصوات key vault وRBAC Azure، راجع توفير الوصول إلى مفاتيح Key Vault والشهادات والأسرار من خلال Azure التحكم في الوصول القائم على الأدوار.
تحديث خزنة المفاتيح الحالية
شغل أمر az keyvault update لتحديث خزنة مفاتيح موجودة باستخدام Azure التحكم في الوصول القائم على الأدوار (Azure RBAC). معامل --enable-rbac-authorization ضروري لتمكين Azure RBAC عند تحديث خزنة مفاتيح موجودة تم تعطيل Azure RBAC.
az keyvault update \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--enable-rbac-authorization
لمزيد من المعلومات حول نماذج أذونات خزنة المفاتيح وAzure RBAC، راجع توفير الوصول إلى مفاتيح خزنة المفاتيح والشهادات والأسرار مع تحكم وصول قائم على أدوار Azure
إضافة تعيين الأدوار والسر إلى خزنة المفاتيح
شغل الأمر
az keyvault showللتحقق من أن خزنة المفاتيح مفعلة في Azure RBAC.az keyvault show \ --name $KEYVAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query properties.enableRbacAuthorizationيجب أن يكون
trueالناتج هو .أضف تعيين دور لحساب المستخدم الخاص بك إلى نطاق خزنة المفاتيح باستخدام
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أنشئ سريا نصيا مسماة
ExampleSecretفي خزنة المفاتيح باستخدام الأمرaz keyvault secret set.يمكن لمخزن المفاتيح تخزين المفاتيح والأسرار والشهادات. يستخدم المعامل
valueالمتغيرRANDOM_STRINGلإنشاء قيمة فريدة للسر.az keyvault secret set \ --vault-name $KEYVAULT_NAME \ --name ExampleSecret \ --value MyAKSExampleSecret${RANDOM_STRING}تحقق من إضافة السر إلى خزنة المفاتيح باستخدام أمر [
az keyvault secret show][az-keyvault-secret-show].az keyvault secret show --vault-name $KEYVAULT_NAME --name ExampleSecret
إنشاء خزنة مفاتيح جديدة
قم بتحديث ملف main.tf لإنشاء خزنة مفاتيح جديدة مع تفعيل Azure التحكم في الوصول القائم على الأدوار (Azure RBAC).
أنشئ خزنة مفاتيح جديدة مع تفعيل Azure RBAC.
data "azurerm_client_config" "current" {} resource "random_string" "suffix" { length = 5 special = false upper = false } resource "azurerm_key_vault" "kv" { name = "akskv${random_string.suffix.result}" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name tenant_id = data.azurerm_client_config.current.tenant_id sku_name = "standard" enable_rbac_authorization = true }تعيين دور ضابط Key Vault Secrets.
resource "azurerm_role_assignment" "kv_role" { scope = azurerm_key_vault.kv.id role_definition_name = "Key Vault Secrets Officer" principal_id = data.azurerm_client_config.current.object_id }أنشئ ExampleSecret في خزنة المفاتيح.
resource "azurerm_key_vault_secret" "example" { name = "ExampleSecret" value = "MyAKSExampleSecret" key_vault_id = azurerm_key_vault.kv.id }نشر الإعدادات. قم بتشكيل جلسة Bash، وتشغيل الأوامر التالية لنشر التكوين المحدث:
terraform plan terraform applyتمت إضافة Verify ExampleSecret إلى خزنة المفاتيح باستخدام أمر [
az keyvault secret show][az-keyvault-secret-show]. استبدلها<keyvault-name>باسم خزنة المفاتيح التي أنشأتها في تكوين Terraform الخاص بك.az keyvault secret show \ --vault-name <keyvault-name> \ --name ExampleSecret
تحديث خزنة المفاتيح الحالية
قم بتحديث ملف main.tf الخاص بك لتحديث خزنة مفاتيح موجودة مع تفعيل Azure التحكم في الوصول القائم على الدور (Azure RBAC).
قم بتحديث مخزن المفاتيح الحالي لتمكين Azure RBAC.
resource "azurerm_key_vault" "kv" { name = "<existing-kv>" resource_group_name = "<resource-group>" enable_rbac_authorization = true }تعيين دور وأضف سريا.
resource "azurerm_role_assignment" "kv_role" { scope = azurerm_key_vault.kv.id role_definition_name = "Key Vault Secrets Officer" principal_id = data.azurerm_client_config.current.object_id } resource "azurerm_key_vault_secret" "example" { name = "ExampleSecret" value = "MyAKSExampleSecret" key_vault_id = azurerm_key_vault.kv.id }نشر الإعدادات. قم بتشكيل جلسة Bash، وتشغيل الأوامر التالية لنشر التكوين المحدث:
terraform plan terraform apply
تنظيف الموارد
إذا كنت ذاهبا إلى المقالة التالية وتحتاج إلى هذه الموارد، تجاهل الخطوات التالية. وإلا، إذا انتهيت ولم تكن تخطط للمتابعة إلى المقال التالي، يجب عليك حذف الموارد التي تم إنشاؤها في هذا المقال لتجنب التكاليف غير الضرورية.
قم بإزالة بيانات اعتماد العنقود من ملف .kube/config المحلي.
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTاحذف مجموعة الموارد وجميع الموارد داخلها، بما في ذلك الموارد في مجموعة موارد العقدة (
MC_) باستخدامaz group deleteالأمر.az group delete --name $RESOURCE_GROUP --yes --no-wait
تقوم هذه الأوامر terraform destroy بإزالة جميع الموارد المعرفة في تكوين Terraform الحالي وملف الحالة. شغل هذا الأمر فقط من الدليل العامل المستخدم لهذا المقال.
التحذير
إذا كنت تعمل مع الموارد الحالية أو الإنتاجية، راجع خطة التنفيذ بعناية قبل التشغيل:
terraform plan -destroy
تجنب اللعب terraform destroy ضد البنية التحتية المشتركة أو المستوردة إلا إذا كنت متأكدا من أنها آمنة للإزالة. لمزيد من المعلومات، راجع توثيق Terraform الخاص بأمر تدمير التيرافورم .
قم بإزالة بيانات اعتماد العنقود من ملف .kube/config المحلي.
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTشغل الأمر التالي لإزالة الموارد التي تم إنشاؤها في هذا المقال:
terraform destroy
الخطوات التالية
في هذه المقالة، تعلمت كيفية استخدام موفر Azure Key Vault لبرنامج تشغيل CSI مخزن الأسرار في نظام مجموعة AKS. تحتاج الآن إلى توفير هوية للوصول إلى Azure Key Vault. لمعرفة كيفية إجراء ذلك، تابع إلى المقالة التالية.