وكيل تخويل 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.

  1. ابحث عن 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"
      }
    
  2. ابحث عن معرف قاعدة تجميع البيانات (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"
    
  3. بدلا من ذلك يمكنك العثور على معرف DCR ونقطة نهاية استيعاب المقاييس باستخدام مدخل Microsoft Azure في صفحة نظرة عامة على مساحة عمل Azure Monitor.

    حدد قاعدة تجميع البيانات في علامة التبويب نظرة عامة على مساحة العمل، ثم حدد طريقة عرض JSON لمشاهدة معرف المورد.

    لقطة شاشة تعرض صفحة النظرة العامة لمساحة عمل Azure Monitor.

  4. 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
    
  5. استخدم ملف YAML التالي لنشر الوكيل للكتابة عن بعد. تعديل المعلمات التالية:

    • TARGET_HOST - المضيف الهدف حيث تريد إعادة توجيه الطلب إليه. لإرسال البيانات إلى مساحة عمل Azure Monitor، استخدم جزء اسم المضيف من Metrics ingestion endpoint صفحة نظرة عامة على مساحات العمل. على سبيل المثال، http://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
    • AAD_CLIENT_IDclientId- من الهوية المدارة المستخدمة التي تم تعيين الدور لها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
    
  6. انشر الوكيل باستخدام الأوامر:

    # create the namespace if it doesn't already exist
    kubectl create namespace observability 
    
    kubectl apply -f proxy-ingestion.yaml -n observability
    
  7. بدلا من ذلك يمكنك نشر الوكيل باستخدام 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
    
  8. تكوين عنوان 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" 
    
  9. تطبيق تكوين الكتابة عن بعد.

إشعار

للحصول على أحدث إصدار من صورة الوكيل، راجع ملاحظات الإصدار

تحقق من أن الوكيل ي استيعاب البيانات

تحقق من أن الوكيل يقوم باستيعاب المقاييس بنجاح عن طريق التحقق من سجلات الجراب، أو عن طريق الاستعلام عن مساحة عمل 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، اتبع الخطوات أدناه:

  1. من مساحة عمل Azure Monitor، حدد المصنفات .

  2. حدد تجانب Prometheus Explorer . لقطة شاشة تعرض معرض المصنفات لمساحة عمل Azure Monitor.

  3. في صفحة المستكشف، أدخل في مربع الاستعلام.

  4. حدد علامة التبويب Grid لمشاهدة النتائج.

  5. تحقق من عمود نظام المجموعة لمعرفة ما إذا كان يتم عرض من نظام المجموعة الخاص بك. لقطة شاشة تعرض صفحة استعلام مستكشف Prometheus.

المعلمات

معلمة الصورة اسم معلمة مخطط Helm ‏‏الوصف القيم المدعومة إلزامي
TARGET_HOST targetHost المضيف المستهدف حيث تريد إعادة توجيه الطلب إليه.
عند إرسال البيانات إلى مساحة عمل Azure Monitor، استخدم Metrics ingestion endpoint من صفحة نظرة عامة على مساحات العمل.
عند قراءة البيانات من مساحة عمل Azure Monitor، استخدم Query endpoint من صفحة نظرة عامة على مساحات العمل
‏‏نعم‬
IDENTITY_TYPE identityType نوع الهوية المستخدم لمصادقة الطلبات. يدعم هذا الوكيل ثلاثة أنواع من الهويات. systemassigned، ، userassignedaadapplication ‏‏نعم‬
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"
    }
    --------------------------------------------------------------------------------