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

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

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

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

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

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

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

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

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

  • مثيل APIM في مستوى خدمة المطور أو Premium. إذا لزم الأمر، أكمل التشغيل السريع التالي: إنشاء مثيل Azure API Management.
  • توفير مورد بوابة على المثيل.
  • تمكين هوية مدارة معينة من قبل النظام على المثيل.
  • صورة حاوية البوابة المستضافة ذاتيا الإصدار 2.2 أو أحدث

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

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

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

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

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

دور خدمة مدقق الوصول إلى تكوين API Management

{
  "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}"
  ]
}

إضافة تعيين المهمة

تعيين دور خدمة مدقق الوصول إلى تكوين API Management

تعيين API Management Configuration API Access Validator Service Role إلى الهوية المدارة لمثيل API Management. للحصول على خطوات مفصلة لتعيين دور، راجع تعيين أدوار Azure باستخدام المدخل.

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

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

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

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

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

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

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

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

توزيع البوابة المستضافة ذاتيًا

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

هام

إذا كنت تتبع إرشادات نشر 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 وتحديد Overview.

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

تلميح

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

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