مشاركة عبر


استخدام مصادقة Microsoft Entra للبوابة المستضافة ذاتيا

ينطبق على: المطور | قسط

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

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

نظرة عامة على السيناريو

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

لتمكين مصادقة Microsoft Entra، أكمل الخطوات التالية:

  1. إنشاء دورين مخصصين من أجل:
    • السماح لواجهة برمجة تطبيقات التكوين بالوصول إلى معلومات RBAC الخاصة بالعميل
    • منح أذونات لقراءة تكوين البوابة المستضافة ذاتيا
  2. منح RBAC حق الوصول إلى الهوية المدارة لمثيل إدارة واجهة برمجة التطبيقات
  3. قم بإنشاء تطبيق Microsoft Entra وامنحه حق الوصول لقراءة تكوين البوابة
  4. نشر البوابة باستخدام خيارات التكوين الجديدة

المتطلبات

ملاحظات القيود

  • يتم دعم الهوية المدارة المعينة من قبل النظام فقط.

إنشاء أدوار مخصصة

قم بإنشاء الدورين المخصصين التاليين اللذين تم تعيينهما في الخطوات اللاحقة. يمكنك استخدام الأذونات المدرجة في قوالب JSON التالية لإنشاء الأدوار المخصصة باستخدام مدخل Microsoft Azure أو Azure CLI أو Azure PowerShell أو أدوات Azure الأخرى.

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

دور خدمة مدقق الوصول إلى واجهة برمجة تطبيقات تكوين إدارة واجهة برمجة التطبيقات

{
  "Description": "Can access RBAC permissions on the API Management resource to authorize requests in Configuration API.",
  "IsCustom": true,
  "Name": "API Management Configuration API Access Validator Service Role",
  "Permissions": [
    {
      "Actions": [
        "Microsoft.Authorization/*/read"
      ],
      "NotActions": [],
      "DataActions": [],
      "NotDataActions": []
    }
  ],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/{subscriptionID}"
  ]
}

دور قارئ تكوين بوابة إدارة واجهة برمجة التطبيقات

{
  "Description": "Can read self-hosted gateway configuration from Configuration API",
  "IsCustom": true,
  "Name": "API Management Gateway Configuration Reader Role",
  "Permissions": [
    {
      "Actions": [],
      "NotActions": [],
      "DataActions": [
        "Microsoft.ApiManagement/service/gateways/getConfiguration/action"
      ],
      "NotDataActions": []
    }
  ],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/{subscriptionID}"
  ]
}

إضافة تعيينات الأدوار

تعيين دور خدمة مدقق الوصول إلى واجهة برمجة تطبيقات تكوين إدارة واجهة برمجة التطبيقات

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

  • النطاق: مجموعة الموارد أو الاشتراك الذي يتم فيه نشر مثيل إدارة واجهة برمجة التطبيقات
  • الدور: دور خدمة مدقق الوصول إلى واجهة برمجة تطبيقات تكوين إدارة واجهة برمجة التطبيقات
  • تعيين حق الوصول إلى: الهوية المدارة لمثيل إدارة واجهة برمجة التطبيقات

تعيين دور قارئ تكوين بوابة إدارة واجهة برمجة التطبيقات

الخطوة 1: تسجيل تطبيق Microsoft Entra

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

  • إنشاء سر عميل
  • لاحظ قيم التطبيق التالية لاستخدامها في القسم التالي عند نشر البوابة المستضافة ذاتيا: معرف التطبيق (العميل) ومعرف الدليل (المستأجر) وسر العميل

الخطوة 2: تعيين دور خدمة قارئ تكوين بوابة إدارة واجهة برمجة التطبيقات

قم بتعيين دور خدمة قارئ تكوين بوابة إدارة واجهة برمجة التطبيقات إلى التطبيق.

  • النطاق: مثيل إدارة واجهة برمجة التطبيقات (أو مجموعة الموارد أو الاشتراك الذي يتم نشر التطبيق فيه)
  • الدور: دور قارئ تكوين بوابة إدارة واجهة برمجة التطبيقات
  • تعيين حق الوصول إلى: تطبيق Microsoft Entra

نشر البوابة المستضافة ذاتيا

انشر البوابة المستضافة ذاتيا إلى Kubernetes، وإضافة إعدادات تسجيل تطبيق Microsoft Entra إلى data عنصر البوابات ConfigMap. في المثال التالي ملف تكوين YAML، يتم تسمية البوابة mygw ويتم تسمية mygw.yamlالملف.

Important

إذا كنت تتبع إرشادات نشر Kubernetes الحالية:

  • تأكد من حذف خطوة تخزين مفتاح المصادقة الافتراضي باستخدام الأمر kubectl create secret generic .
  • استبدل ملف التكوين الأساسي التالي بملف YAML الافتراضي الذي ينشئه مدخل Microsoft Azure لك. يضيف الملف التالي تكوين Microsoft Entra بدلا من التكوين لاستخدام مفتاح المصادقة.
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mygw-env
  labels:
    app: mygw
data:
  config.service.endpoint: "<service-name>.configuration.azure-api.net"
  config.service.auth: azureAdApp 
  config.service.auth.azureAd.authority: "https://login.microsoftonline.com"  
  config.service.auth.azureAd.tenantId: "<Azure AD tenant ID>" 
  config.service.auth.azureAd.clientId: "<Azure AD client ID>" 
  config.service.auth.azureAd.clientSecret: "<Azure AD client secret>"
  gateway.name: <gateway-id>
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mygw
  labels:
    app: mygw
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mygw
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 25%
  template:
    metadata:
      labels:
        app: mygw
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - name: mygw
        image: mcr.microsoft.com/azure-api-management/gateway:v2
        ports:
        - name: http
          containerPort: 8080
        - name: https
          containerPort: 8081
          # Container port used for rate limiting to discover instances
        - name: rate-limit-dc
          protocol: UDP
          containerPort: 4290
          # Container port used for instances to send heartbeats to each other
        - name: dc-heartbeat
          protocol: UDP
          containerPort: 4291
        readinessProbe:
          httpGet:
            path: /status-0123456789abcdef
            port: http
            scheme: HTTP
          initialDelaySeconds: 0
          periodSeconds: 5
          failureThreshold: 3
          successThreshold: 1
        envFrom:
        - configMapRef:
            name: mygw-env
---
apiVersion: v1
kind: Service
metadata:
  name: mygw-live-traffic
  labels:
    app: mygw
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    targetPort: 8080
  - name: https
    port: 443
    targetPort: 8081
  selector:
    app: mygw
---
apiVersion: v1
kind: Service
metadata:
  name: mygw-instance-discovery
  labels:
    app: mygw
  annotations:
    azure.apim.kubernetes.io/notes: "Headless service being used for instance discovery of self-hosted gateway"
spec:
  clusterIP: None
  type: ClusterIP
  ports:
  - name: rate-limit-discovery
    port: 4290
    targetPort: rate-limit-dc
    protocol: UDP
  - name: discovery-heartbeat
    port: 4291
    targetPort: dc-heartbeat
    protocol: UDP
  selector:
    app: mygw

انشر البوابة إلى Kubernetes باستخدام الأمر التالي:

kubectl apply -f mygw.yaml

تأكد من تشغيل البوابة

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

    kubectl get deployments
    

    يجب أن تعود

    NAME             READY   UP-TO-DATE   AVAILABLE   AGE
    <gateway-name>   1/1     1            1           18s
    
  2. قم بتشغيل الأمر التالي للتحقق مما إذا كان قد تم إنشاء الخدمات بنجاح. ستكون عناوين IP ومنافذ الخدمة مختلفة.

    kubectl get services
    

    يجب أن تعود

    NAME                                TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
    <gateway-name>-live-traffic         ClusterIP      None            <none>        4290/UDP,4291/UDP   9m1s
    <gateway-name>-instance-discovery   LoadBalancer   10.99.236.168   <pending>     80:31620/TCP,443:30456/TCP   9m1s
    
  3. ارجع إلى مدخل Microsoft Azure وحدد نظرة عامة.

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

تلميح

  • قم بتشغيل kubectl logs deployment/<gateway-name> الأمر لعرض السجلات من جراب محدد عشوائيا إذا كان هناك أكثر من واحد.
  • قم بالتشغيل kubectl logs -h للحصول على مجموعة كاملة من خيارات الأوامر، مثل كيفية عرض السجلات لجراب أو حاوية معينة.