وكيل تخويل Microsoft Entra
وكيل تخويل Microsoft Entra هو وكيل عكسي، والذي يمكن استخدامه لمصادقة الطلبات باستخدام معرف Microsoft Entra. يمكن استخدام هذا الوكيل لمصادقة الطلبات إلى أي خدمة تدعم مصادقة Microsoft Entra. استخدم هذا الوكيل لمصادقة الطلبات إلى خدمة Azure Monitor المدارة ل Prometheus.
تنبيه
هذه مقالة متوقفة.
لم يعد يتم الاحتفاظ بصورة حاوية الوكيل ومخطط helm أو دعمهما.
المتطلبات الأساسية
- مساحة عمل Azure Monitor. إذا لم يكن لديك مساحة عمل، فبادر بإنشاء مساحة باستخدام مدخل Microsoft Azure.
- Prometheus مثبت على نظام المجموعة الخاص بك.
إشعار
يستخدم مثال الكتابة عن بعد في هذه المقالة كتابة Prometheus عن بعد لكتابة البيانات إلى Azure Monitor. يؤدي إلحاق نظام مجموعة AKS إلى Prometheus تلقائيا إلى تثبيت Prometheus على نظام المجموعة الخاص بك وإرسال البيانات إلى مساحة العمل الخاصة بك.
التوزيع
يمكن نشر الوكيل مع قوالب مخصصة باستخدام صورة الإصدار أو كمخطط helm. يحتوي كلا التوزيعين على نفس المعلمات القابلة للتخصيص. يتم وصف هذه المعلمات في جدول المعلمات .
لمزيد من المعلومات، راجع مشروع وكيل مصادقة Microsoft Entra.
توضح الأمثلة التالية كيفية نشر الوكيل للكتابة عن بعد والاستعلام عن البيانات من Azure Monitor.
إشعار
يوضح هذا المثال كيفية استخدام الوكيل لمصادقة طلبات الكتابة عن بعد إلى خدمة مدارة من Azure Monitor ل Prometheus. يحتوي Prometheus عن بعد على سيارة جانبية مخصصة للكتابة عن بعد وهي الطريقة الموصى بها لتنفيذ الكتابة عن بعد.
قبل نشر الوكيل، ابحث عن الهوية المدارة وقم بتعيين Monitoring Metrics Publisher
دور قاعدة جمع البيانات لمساحة عمل Azure Monitor.
ابحث عن
clientId
للهوية المدارة لمجموعة AKS الخاصة بك. يتم استخدام الهوية المدارة للمصادقة على مساحة عمل Azure Monitor. يتم إنشاء الهوية المدارة عند إنشاء نظام مجموعة AKS.# Get the identity client_id az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile"
يحتوي الإخراج على التنسيق التالي:
{ "kubeletidentity": { "clientId": "abcd1234-1243-abcd-9876-1234abcd5678", "objectId": "12345678-abcd-abcd-abcd-1234567890ab", "resourceId": "/subscriptions/def0123-1243-abcd-9876-1234abcd5678/resourcegroups/MC_rg-proxytest-01_proxytest-01_eastus/providers/Microsoft.ManagedIdentity/userAssignedIdentities/proxytest-01-agentpool" }
ابحث عن معرف قاعدة تجميع البيانات (DCR) لمساحة عمل Azure Monitor.
اسم القاعدة هو نفس اسم مساحة العمل. يتبع اسم مجموعة الموارد لقاعدة جمع البيانات التنسيق:MA_<workspace-name>_<REGION>_managed
، على سبيل المثالMA_amw-proxytest_eastus_managed
. استخدم الأمر التالي للبحث عن معرف قاعدة تجميع البيانات:az monitor data-collection rule show --name <dcr-name> --resource-group <resource-group-name> --query "id"
بدلا من ذلك يمكنك العثور على معرف DCR ونقطة نهاية استيعاب المقاييس باستخدام مدخل Microsoft Azure في صفحة نظرة عامة على مساحة عمل Azure Monitor.
حدد قاعدة تجميع البيانات في علامة التبويب نظرة عامة على مساحة العمل، ثم حدد طريقة عرض JSON لمشاهدة معرف المورد.
Monitoring Metrics Publisher
تعيين الدور إلى الهويةclientId
المدارة بحيث يمكن الكتابة إلى قاعدة تجميع بيانات مساحة عمل Azure Monitor.az role assignment create / --assignee <clientid> / --role "Monitoring Metrics Publisher" / --scope <workspace-dcr-id>
على سبيل المثال:
az role assignment create \ --assignee abcd1234-1243-abcd-9876-1234abcd5678 \ --role "Monitoring Metrics Publisher" \ --scope /subscriptions/ef0123-1243-abcd-9876-1234abcd5678/resourceGroups/MA_amw-proxytest_eastus_managed/providers/Microsoft.Insights/dataCollectionRules/amw-proxytest
استخدم ملف YAML التالي لنشر الوكيل للكتابة عن بعد. تعديل المعلمات التالية:
TARGET_HOST
- المضيف الهدف حيث تريد إعادة توجيه الطلب إليه. لإرسال البيانات إلى مساحة عمل Azure Monitor، استخدم جزء اسم المضيف منMetrics ingestion endpoint
صفحة نظرة عامة على مساحات العمل. على سبيل المثال،http://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
AAD_CLIENT_ID
clientId
- من الهوية المدارة المستخدمة التي تم تعيين الدور لهاMonitoring Metrics Publisher
.AUDIENCE
- لاستيعاب المقاييس إلى مساحة عمل Azure Monitor، قم بتعيينAUDIENCE
إلىhttps://monitor.azure.com/.default
.- قم بإزالة
OTEL_GRPC_ENDPOINT
وOTEL_SERVICE_NAME
إذا كنت لا تستخدم OpenTelemetry.
لمزيد من المعلومات حول المعلمات، راجع جدول المعلمات .
proxy-ingestion.yaml
apiVersion: apps/v1 kind: Deployment metadata: labels: app: azuremonitor-ingestion name: azuremonitor-ingestion namespace: observability spec: replicas: 1 selector: matchLabels: app: azuremonitor-ingestion template: metadata: labels: app: azuremonitor-ingestion name: azuremonitor-ingestion spec: containers: - name: aad-auth-proxy image: mcr.microsoft.com/azuremonitor/auth-proxy/prod/aad-auth-proxy/images/aad-auth-proxy:0.1.0-main-05-24-2023-b911fe1c imagePullPolicy: Always ports: - name: auth-port containerPort: 8081 env: - name: AUDIENCE value: https://monitor.azure.com/.default - name: TARGET_HOST value: http://<workspace-endpoint-hostname> - name: LISTENING_PORT value: "8081" - name: IDENTITY_TYPE value: userAssigned - name: AAD_CLIENT_ID value: <clientId> - name: AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE value: "10" - name: OTEL_GRPC_ENDPOINT value: <YOUR-OTEL-GRPC-ENDPOINT> # "otel-collector.observability.svc.cluster.local:4317" - name: OTEL_SERVICE_NAME value: <YOUE-SERVICE-NAME> livenessProbe: httpGet: path: /health port: auth-port initialDelaySeconds: 5 timeoutSeconds: 5 readinessProbe: httpGet: path: /ready port: auth-port initialDelaySeconds: 5 timeoutSeconds: 5 --- apiVersion: v1 kind: Service metadata: name: azuremonitor-ingestion namespace: observability spec: ports: - port: 80 targetPort: 8081 selector: app: azuremonitor-ingestion
انشر الوكيل باستخدام الأوامر:
# create the namespace if it doesn't already exist kubectl create namespace observability kubectl apply -f proxy-ingestion.yaml -n observability
بدلا من ذلك يمكنك نشر الوكيل باستخدام helm كما يلي:
helm install aad-auth-proxy oci://mcr.microsoft.com/azuremonitor/auth-proxy/prod/aad-auth-proxy/helmchart/aad-auth-proxy \ --version 0.1.0-main-05-24-2023-b911fe1c \ -n observability \ --set targetHost=https://proxy-test-abc123.eastus-1.metrics.ingest.monitor.azure.com \ --set identityType=userAssigned \ --set aadClientId= abcd1234-1243-abcd-9876-1234abcd5678 \ --set audience=https://monitor.azure.com/.default
تكوين عنوان URL للكتابة عن بعد.
يتكون اسم مضيف URL من اسم خدمة الاستيعاب ومساحة الاسم بالتنسيق<ingestion service name>.<namespace>.svc.cluster.local
التالي . في هذا المثال، المضيف هوazuremonitor-ingestion.observability.svc.cluster.local
.
تكوين مسار URL باستخدام المسار منMetrics ingestion endpoint
صفحة نظرة عامة على مساحة عمل Azure Monitor. على سبيل المثال،dataCollectionRules/dcr-abc123d987e654f3210abc1def234567/streams/Microsoft-PrometheusMetrics/api/v1/write?api-version=2021-11-01-preview
prometheus: prometheusSpec: externalLabels: cluster: <cluster name to be used in the workspace> ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write ## remoteWrite: - url: "http://azuremonitor-ingestion.observability.svc.cluster.local/dataCollectionRules/dcr-abc123d987e654f3210abc1def234567/streams/Microsoft-PrometheusMetrics/api/v1/write?api-version=2021-11-01-preview"
تطبيق تكوين الكتابة عن بعد.
إشعار
للحصول على أحدث إصدار من صورة الوكيل، راجع ملاحظات الإصدار
تحقق من أن الوكيل ي استيعاب البيانات
تحقق من أن الوكيل يقوم باستيعاب المقاييس بنجاح عن طريق التحقق من سجلات الجراب، أو عن طريق الاستعلام عن مساحة عمل Azure Monitor.
تحقق من سجلات الجراب عن طريق تشغيل الأوامر التالية:
# Get the azuremonitor-ingestion pod ID
kubectl get pods -A | grep azuremonitor-ingestion
#Using the returned pod ID, get the logs
kubectl logs --namespace observability <pod ID> --tail=10
ينتج عن استيعاب المقاييس بنجاح سجلا StatusCode=200
مشابها للآتي:
time="2023-05-16T08:47:27Z" level=info msg="Successfully sent request, returning response back." ContentLength=0 Request="https://amw-proxytest-05-t16w.eastus-1.metrics.ingest.monitor.azure.com/dataCollectionRules/dcr-688b6ed1f2244e098a88e32dde18b4f6/streams/Microsoft-PrometheusMetrics/api/v1/write?api-version=2021-11-01-preview" StatusCode=200
للاستعلام عن مساحة عمل Azure Monitor، اتبع الخطوات أدناه:
المعلمات
معلمة الصورة | اسم معلمة مخطط Helm | الوصف | القيم المدعومة | إلزامي |
---|---|---|---|---|
TARGET_HOST |
targetHost |
المضيف المستهدف حيث تريد إعادة توجيه الطلب إليه. عند إرسال البيانات إلى مساحة عمل Azure Monitor، استخدم Metrics ingestion endpoint من صفحة نظرة عامة على مساحات العمل. عند قراءة البيانات من مساحة عمل Azure Monitor، استخدم Query endpoint من صفحة نظرة عامة على مساحات العمل |
نعم | |
IDENTITY_TYPE |
identityType |
نوع الهوية المستخدم لمصادقة الطلبات. يدعم هذا الوكيل ثلاثة أنواع من الهويات. | systemassigned ، ، userassigned aadapplication |
نعم |
AAD_CLIENT_ID |
aadClientId |
معرف العميل للهوية المستخدمة. يتم استخدام هذا لنوعي userassigned الهوية و aadapplication . استخدم az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile" لاسترداد معرف العميل |
نعم ل userassigned و aadapplication |
|
AAD_TENANT_ID |
aadTenantId |
معرف المستأجر للهوية المستخدمة. يتم استخدام معرف المستأجر لنوع aadapplication الهوية. |
نعم ل aadapplication |
|
AAD_CLIENT_CERTIFICATE_PATH |
aadClientCertificatePath |
المسار حيث يمكن للوكيل العثور على شهادة aadapplication. يجب أن يكون هذا المسار متاحا عن طريق الوكيل ويجب أن يكون إما شهادة pfx أو pem تحتوي على مفتاح خاص. | بالنسبة إلى aadapplication أنواع الهوية فقط |
|
AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE |
aadTokenRefreshIntervalInMinutes |
يتم تحديث الرمز المميز استنادا إلى النسبة المئوية للوقت حتى انتهاء صلاحية الرمز المميز. القيمة الافتراضية هي 10٪ من الوقت قبل انتهاء الصلاحية. | لا | |
AUDIENCE |
audience |
الجمهور للرمز المميز | لا | |
LISTENING_PORT |
listeningPort |
الوكيل يستمع إلى هذا المنفذ | نعم | |
OTEL_SERVICE_NAME |
otelServiceName |
اسم الخدمة لتتبعات OTEL ومقاييسه. القيمة الافتراضية: aad_auth_proxy | لا | |
OTEL_GRPC_ENDPOINT |
otelGrpcEndpoint |
يدفع الوكيل بيانات تتبع الاستخدام OTEL إلى نقطة النهاية هذه. قيمة افتراضية: http://localhost:4317 | لا |
استكشاف الأخطاء وإصلاحها
لا تبدأ حاوية الوكيل.
قم بتشغيل الأمر التالي لإظهار أي أخطاء لحاوية الوكيل.kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>`
لا يبدأ الوكيل - أخطاء التكوين
يتحقق الوكيل من هوية صالحة لجلب رمز مميز أثناء بدء التشغيل. إذا فشل في استرداد رمز مميز، فسيفشل بدء التشغيل. يتم تسجيل الأخطاء ويمكن عرضها عن طريق تشغيل الأمر التالي:
kubectl --namespace <Namespace> logs <Proxy-Pod-Name>
مثال على الإخراج:
time="2023-05-15T11:24:06Z" level=info msg="Configuration settings loaded:" AAD_CLIENT_CERTIFICATE_PATH= AAD_CLIENT_ID=abc123de-be75-4141-a1e6-abc123987def AAD_TENANT_ID= AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE=10 AUDIENCE="https://prometheus.monitor.azure.com" IDENTITY_TYPE=userassigned LISTENING_PORT=8082 OTEL_GRPC_ENDPOINT= OTEL_SERVICE_NAME=aad_auth_proxy TARGET_HOST=proxytest-01-workspace-orkw.eastus.prometheus.monitor.azure.com 2023-05-15T11:24:06.414Z [ERROR] TokenCredential creation failed:Failed to get access token: ManagedIdentityCredential authentication failed GET http://169.254.169.254/metadata/identity/oauth2/token -------------------------------------------------------------------------------- RESPONSE 400 Bad Request -------------------------------------------------------------------------------- { "error": "invalid_request", "error_description": "Identity not found" } --------------------------------------------------------------------------------