تشغيل خدمات البيانات التي تدعم Azure Arc بأقل الامتيازات

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

إشعار

في هذه المقالة، سيتم استخدام اسم arc مساحة الاسم. إذا اخترت استخدام اسم مختلف، فاستخدم نفس الاسم طوال الوقت. في هذه المقالة، kubectl يتم استخدام الأداة المساعدة CLI كمثال. يمكن استخدام أي أداة أو نظام يستخدم واجهة برمجة تطبيقات Kubernetes على الرغم من ذلك.

نشر وحدة تحكم بيانات Azure Arc

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

نشر مساحة اسم سيتم فيها إنشاء وحدة تحكم البيانات

ستنشئ هذه الخطوة مساحة اسم Kubernetes مخصصة جديدة سيتم فيها نشر وحدة تحكم بيانات Arc. من الضروري تنفيذ هذه الخطوة أولا، لأن الخطوات التالية ستستخدم مساحة الاسم الجديدة هذه كنطاق للأذونات التي يتم منحها.

الأذونات المطلوبة لتنفيذ هذا الإجراء:

  • مساحه الاسم
    • ‏إنشاء
    • تحرير (إذا لزم الأمر لمجموعات OpenShift)

قم بتشغيل أمر مشابه للآتي لإنشاء مساحة اسم مخصصة جديدة سيتم فيها إنشاء وحدة تحكم البيانات.

kubectl create namespace arc

إذا كنت تستخدم OpenShift، فستحتاج إلى تحرير التعليقات openshift.io/sa.scc.supplemental-groups التوضيحية و openshift.io/sa.scc.uid-range على مساحة الاسم باستخدام kubectl edit namespace <name of namespace>. قم بتغيير هذه التعليقات التوضيحية الموجودة لمطابقة معرفات/نطاقات UID وfsGroup المحددة هذه.

openshift.io/sa.scc.supplemental-groups: 1000700001/10000
openshift.io/sa.scc.uid-range: 1000700001/10000

تعيين أذونات لحساب خدمة النشر والمستخدمين/المجموعات

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

الأذونات المطلوبة لتنفيذ هذا الإجراء:

  • حساب الخدمة
    • ‏إنشاء
  • دور
    • ‏إنشاء
  • ربط الدور
    • ‏إنشاء
  • دور نظام المجموعة
    • ‏إنشاء
  • ربط دور نظام المجموعة
    • ‏إنشاء
  • جميع الأذونات الممنوحة لحساب الخدمة (راجع arcdata-deployer.yaml أدناه للحصول على التفاصيل)

احفظ نسخة من arcdata-deployer.yaml، واستبدل العنصر {{NAMESPACE}} النائب في الملف بمساحة الاسم التي تم إنشاؤها في الخطوة السابقة، على سبيل المثال: arc. قم بتشغيل الأمر التالي لإنشاء حساب خدمة التوزيع مع الملف الذي تم تحريره.

kubectl apply --namespace arc -f arcdata-deployer.yaml

منح أذونات للمستخدمين لإنشاء مهمة bootstrapper ووحدة تحكم البيانات

الأذونات المطلوبة لتنفيذ هذا الإجراء:

  • دور
    • ‏إنشاء
  • ربط الدور
    • ‏إنشاء

احفظ نسخة من arcdata-installer.yaml، واستبدل العنصر {{INSTALLER_USERNAME}} النائب في الملف باسم المستخدم لمنح الأذونات، على سبيل المثال: john@contoso.com. أضف مواضيع ربط دور إضافية مثل المستخدمين أو المجموعات الأخرى حسب الحاجة. قم بتشغيل الأمر التالي لإنشاء أذونات المثبت باستخدام الملف الذي تم تحريره.

kubectl apply --namespace arc -f arcdata-installer.yaml

توزيع مهمة bootstrapper

الأذونات المطلوبة لتنفيذ هذا الإجراء:

  • المستخدم الذي تم تعيينه لدور arcdata-installer-role في الخطوة السابقة

قم بتشغيل الأمر التالي لإنشاء مهمة bootstrapper التي ستقوم بتشغيل الخطوات التحضيرية لنشر وحدة تحكم البيانات.

kubectl apply --namespace arc -f https://raw.githubusercontent.com/microsoft/azure_arc/main/arc_data_services/deploy/yaml/bootstrapper.yaml

إنشاء وحدة تحكم بيانات Arc

الآن أنت مستعد لإنشاء وحدة تحكم البيانات نفسها.

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

إنشاء لوحات معلومات المقاييس والسجلات أسماء المستخدمين وكلمات المرور

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

يتم تخزين سر Kubernetes كسلسلة مشفرة base64 - واحدة لاسم المستخدم وواحدة لكلمة المرور.

echo -n '<your string to encode here>' | base64
# echo -n 'example' | base64

اختياريا، يمكنك إنشاء شهادات SSL/TLS للوحات معلومات السجلات والمقاييس. اتبع الإرشادات الموجودة في تحديد شهادات SSL/TLS أثناء نشر أدوات Kubernetes الأصلية.

تحرير تكوين وحدة تحكم البيانات

تحرير تكوين وحدة تحكم البيانات حسب الحاجة:

مطلوب

  • location: قم بتغيير هذا ليكون موقع Azure حيث سيتم تخزين بيانات التعريف حول وحدة تحكم البيانات. راجع قائمة المناطق المتوفرة.
  • logsui-certificate-secret: اسم السر الذي تم إنشاؤه على مجموعة Kubernetes لشهادة واجهة مستخدم السجلات.
  • metricsui-certificate-secret: اسم السر الذي تم إنشاؤه على مجموعة Kubernetes لشهادة واجهة مستخدم المقاييس.

راجع هذه القيم، وحدث للتوزيع الخاص بك:

  • storage..className: فئة التخزين المراد استخدامها لبيانات وحدة تحكم البيانات وملفات السجل. إذا لم تكن متأكدا من فئات التخزين المتوفرة في مجموعة Kubernetes الخاصة بك، يمكنك تشغيل الأمر التالي: kubectl get storageclass. الافتراضي هو الافتراضي الذي يفترض أن هناك فئة تخزين موجودة ويسمى default وليس أن هناك فئة تخزين هي الافتراضية. ملاحظة: هناك إعدادان className ليتم تعيينهما إلى فئة التخزين المطلوبة - أحدهما للبيانات والآخر للسجلات.

  • serviceType: قم بتغيير نوع الخدمة إلى NodePort إذا كنت لا تستخدم LoadBalancer.

  • الأمان ل Azure Red Hat OpenShift أو Red Hat OpenShift Container Platform، استبدل الأمان: الإعدادات بالقيم التالية في ملف yaml لوحدة تحكم البيانات.

    security:
      allowDumps: false
      allowNodeMetricsCollection: false
      allowPodMetricsCollection: false
    

اختياري

الإعدادات التالية اختيارية.

  • name: الاسم الافتراضي لوحدة تحكم البيانات هو arc، ولكن يمكنك تغييره إذا أردت.
  • displayName: قم بتعيين هذا إلى نفس قيمة سمة الاسم في أعلى الملف.
  • registry: سجل حاويات Microsoft هو الافتراضي. إذا كنت تسحب الصور من Microsoft Container Registry وتدفعها إلى سجل حاوية خاص، فأدخل عنوان IP أو اسم DNS للسجل الخاص بك هنا.
  • dockerRegistry: السر الذي يجب استخدامه لسحب الصور من سجل حاوية خاص إذا لزم الأمر.
  • repository: المستودع الافتراضي في سجل حاويات Microsoft هو arcdata. إذا كنت تستخدم سجل حاوية خاصا، فأدخل المسار المجلد/المستودع الذي يحتوي على صور حاوية خدمات البيانات التي تدعم Azure Arc.
  • imageTag: يتم تعيين علامة الإصدار الأحدث الحالية افتراضيا في القالب، ولكن يمكنك تغييرها إذا كنت تريد استخدام إصدار أقدم.
  • logsui-certificate-secret: اسم السر الذي تم إنشاؤه على مجموعة Kubernetes لشهادة واجهة مستخدم السجلات.
  • metricsui-certificate-secret: اسم السر الذي تم إنشاؤه على مجموعة Kubernetes لشهادة واجهة مستخدم المقاييس.

يوضح المثال التالي yaml وحدة تحكم البيانات المكتملة.

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: metricsui-admin-secret
type: Opaque

---

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: logsui-admin-secret
type: Opaque

---

apiVersion: arcdata.microsoft.com/v5
kind: DataController
metadata:
  name: arc-dc
spec:
  credentials:
    dockerRegistry: arc-private-registry # Create a registry secret named 'arc-private-registry' if you are going to pull from a private registry instead of MCR.
    serviceAccount: sa-arc-controller
  docker:
    imagePullPolicy: Always
    imageTag: v1.31.0_2024-07-09
    registry: mcr.microsoft.com
    repository: arcdata
  infrastructure: other # Must be a value in the array [alibaba, aws, azure, gcp, onpremises, other]
  security:
    allowDumps: true # Set this to false if deploying on OpenShift
    allowNodeMetricsCollection: true # Set this to false if deploying on OpenShift
    allowPodMetricsCollection: true # Set this to false if deploying on OpenShift
  services:
  - name: controller
    port: 30080
    serviceType: LoadBalancer # Modify serviceType based on your Kubernetes environment
  settings:
    ElasticSearch:
      vm.max_map_count: "-1"
    azure:
      connectionMode: indirect # Only indirect is supported for Kubernetes-native deployment for now.
      location: eastus # Choose a different Azure location if you want
      resourceGroup: <your resource group>
      subscription: <your subscription GUID>
    controller:
      displayName: arc-dc
      enableBilling: true
      logs.rotation.days: "7"
      logs.rotation.size: "5000"
  storage:
    data:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 15Gi
    logs:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 10Gi

احفظ الملف الذي تم تحريره على الكمبيوتر المحلي وقم بتشغيل الأمر التالي لإنشاء وحدة تحكم البيانات:

kubectl create --namespace arc -f <path to your data controller file>

#Example
kubectl create --namespace arc -f data-controller.yaml

مراقبة حالة الإنشاء

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

kubectl get datacontroller --namespace arc
kubectl get pods --namespace arc

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

kubectl describe pod/<pod name> --namespace arc
kubectl logs <pod name> --namespace arc

#Example:
#kubectl describe pod/control-2g7bl --namespace arc
#kubectl logs control-2g7b1 --namespace arc

لديك العديد من الخيارات الإضافية لإنشاء وحدة تحكم بيانات Azure Arc:

هل تريد تجربة الأشياء فحسب؟ ابدأ بسرعة باستخدام Azure Arc Jumpstart على AKS أو Amazon EKS أو GKE أو في Azure VM.