استخدام مصادقة Microsoft Entra للبوابة المستضافة ذاتيا
ينطبق على: المطور | بريميوم
تحتاج بوابة Azure API Management المستضافة ذاتيا إلى الاتصال بمثيل APIM المستند إلى السحابة المرتبط بها لإعداد التقارير عن الحالة والتحقق من تحديثات التكوين وتطبيقها وإرسال المقاييس والأحداث.
بالإضافة إلى استخدام رمز مميز للوصول إلى البوابة (مفتاح المصادقة) للاتصال بمثيل APIM المستند إلى السحابة، يمكنك تمكين البوابة المستضافة ذاتيا للمصادقة على مثيل السحابة المقترن بها باستخدام تطبيق Microsoft Entra. باستخدام مصادقة Microsoft Entra، يمكنك تكوين أوقات انتهاء صلاحية أطول للبيانات السرية واستخدام الخطوات القياسية لإدارة الأسرار وتدويرها في Active Directory.
نظرة عامة على السيناريو
يمكن لواجهة برمجة تطبيقات تكوين البوابة المستضافة ذاتيا التحقق من Azure RBAC لتحديد من لديه أذونات لقراءة تكوين البوابة. بعد إنشاء تطبيق Microsoft Entra بهذه الأذونات، يمكن للبوابة المستضافة ذاتيا المصادقة على مثيل APIM باستخدام التطبيق.
لتمكين مصادقة Microsoft Entra، أكمل الخطوات التالية:
- إنشاء دورين مخصصين ل:
- السماح لواجهة برمجة تطبيقات التكوين بالوصول إلى معلومات التحكم في الوصول استنادا إلى الدور الخاصة بالعميل
- منح أذونات لقراءة تكوين البوابة المستضافة ذاتيا
- منح الوصول إلى التحكم في الوصول استنادا إلى الدور إلى الهوية المدارة لمثيل APIM
- إنشاء تطبيق Microsoft Entra ومنحه حق الوصول لقراءة تكوين البوابة
- نشر البوابة مع خيارات التكوين الجديدة
المتطلبات الأساسية
- مثيل 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
تأكد من تشغيل البوابة
قم بتشغيل الأمر التالي للتحقق من نجاح النشر. قد يستغرق الأمر بعض الوقت لإنشاء جميع الكائنات وتهيئة القرون.
kubectl get deployments
يجب أن يعود
NAME READY UP-TO-DATE AVAILABLE AGE <gateway-name> 1/1 1 1 18s
قم بتشغيل الأمر التالي للتحقق مما إذا تم إنشاء الخدمات بنجاح. ستكون عناوين 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
قم بالعودة إلى مدخل Microsoft Azure وتحديد Overview.
تأكد من أن Status تعرض علامة اختيار خضراء، متبوعة بعدد العقدة الذي يطابق عدد النسخ المتماثلة المحدد في ملف YAML. تعني هذه الحالة أن جرابات البوابة المستضافة ذاتيا المنشورة تتواصل بنجاح مع خدمة APIM ويكون لها "رسالة كشف أخطاء الاتصال" العادية.
تلميح
- قم بتشغيل الأمر
kubectl logs deployment/<gateway-name>
لعرض سجلات من حزمة محددة عشوائيًا إذا كان هناك أكثر من واحدة. - قم بتشغيل
kubectl logs -h
لمجموعة كاملة من خيارات الأمر، مثل كيفية عرض سجلات لحزمة معينة أو حاوية.
الخطوات التالية
- تعرف على المزيد حول نظرة عامة على البوابة المستضافة ذاتيا لإدارة واجهة برمجة التطبيقات.
- تعرف على المزيد حول إرشادات تشغيل البوابة المستضافة ذاتيا على Kubernetes في الإنتاج.
- تعرف على كيفية نشر البوابة المستضافة ذاتيًا لإدارة واجهة برمجة التطبيقات إلى مجموعات Kubernetes الممكّنة بواسطة Azure Arc.