Share via


Microsoft Entra-Autorisierungsproxy

Der Microsoft Entra-Autorisierungsproxy ist ein Reverseproxy, der zum Authentifizieren von Anforderungen mithilfe von Microsoft Entra ID verwendet werden kann. Dieser Proxy kann zur Authentifizierung von Anforderungen an jeden Dienst verwendet werden, der die Microsoft Entra-Authentifizierung unterstützt. Verwenden Sie diesen Proxy, um Anforderungen an den verwalteten Azure Monitor-Dienst für Prometheus zu authentifizieren.

Voraussetzungen

  • Einen Azure Monitor-Arbeitsbereich. Wenn Sie noch keinen Arbeitsbereich besitzen, können Sie im Azure-Portal einen erstellen.
  • Sie haben Prometheus in Ihrem Cluster installiert.

Hinweis

Im Remoteschreibbeispiel in diesem Artikel werden Prometheus-Remoteschreibvorgänge verwendet, um Daten in Azure Monitor zu schreiben. Beim Onboarding Ihres AKS-Clusters in Prometheus wird Prometheus automatisch auf Ihrem Cluster installiert und es werden Daten an Ihren Arbeitsbereich gesendet.

Bereitstellung

Der Proxy kann mit benutzerdefinierten Vorlagen mithilfe des Releaseimages oder als Helmdiagramm bereitgestellt werden. Beide Bereitstellungen enthalten dieselben anpassbaren Parameter. Diese Parameter werden in der Tabelle Parameters beschrieben.

Weitere Informationen finden Sie unter Microsoft Entra-Authentifizierungsproxy-Projekt.

Die folgenden Beispiele zeigen, wie Sie den Proxy für Remoteschreibvorgänge und für Abfragen von Daten aus Azure Monitor bereitstellen.

Hinweis

In diesem Beispiel wird gezeigt, wie Sie mithilfe des Proxys Anforderungen für Remoteschreibvorgänge an einen verwalteten Azure Monitor-Dienst für Prometheus authentifizieren. Der Prometheus-Remote-Schreibzugriff verfügt über ein dediziertes Sidecar für Remoteschreibvorgänge. Dabei handelt es sich um die empfohlene Methode für die Implementierung von Remoteschreibvorgängen.

Suchen Sie vor der Bereitstellung des Proxys nach Ihrer verwalteten Identität, und weisen Sie ihr die Rolle Monitoring Metrics Publisher für die Datensammlungsregel des Azure Monitor-Arbeitsbereichs zu.

  1. Suchen Sie die clientId für die verwaltete Identität für Ihren AKS-Cluster. Mit der verwalteten Identität können Sie sich beim Azure Monitor-Arbeitsbereich authentifizieren. Die verwaltete Identität wird erstellt, wenn der AKS-Cluster erstellt wird.

    # Get the identity client_id
    az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile"
    

    Die Ausgabe hat folgendes Format:

    {
      "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. Suchen Sie die Data Collection Rule-(DCR-)ID Ihres Azure Monitor-Arbeitsbereichs.
    Der Regelname ist mit dem Namen des Arbeitsbereichs identisch. Der Ressourcengruppenname für Ihre Datensammlungsregel hat das Format: MA_<workspace-name>_<REGION>_managed, z. B MA_amw-proxytest_eastus_managed. Verwenden Sie den folgenden Befehl, um die ID der Datensammlungsregel zu ermitteln:

    az monitor data-collection rule show --name <dcr-name> --resource-group <resource-group-name> --query "id"
    
  3. Alternativ können Sie Ihre DCR-ID und den Metrikerfassungsendpunkt mithilfe des Azure-Portals auf der Seite „Übersicht über den Azure Monitor-Arbeitsbereich“ finden.

    Wählen Sie auf der Registerkarte „Übersicht über den Arbeitsbereich“ die Datensammlungsregel und dann JSON-Ansicht aus, um die Ressourcen-ID anzuzeigen.

    A screenshot showing the overview page for an Azure Monitor workspace.

  4. Weisen Sie die Rolle Monitoring Metrics Publisher der clientId der verwalteten Identität zu, damit sie in die Datensammlungsregel des Azure Monitor-Arbeitsbereichs schreiben kann.

    az role assignment create /
    --assignee <clientid>  /
    --role "Monitoring Metrics Publisher" /
    --scope <workspace-dcr-id>
    

    Zum Beispiel:

    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. Verwenden Sie die folgende YAML-Datei, um den Proxy für Remoteschreibvorgänge bereitzustellen. Ändern Sie die folgenden Parameter:

    • TARGET_HOST: Der Zielhost, an den Sie die Anforderung weiterleiten möchten. Sie können Daten an einen Azure Monitor-Arbeitsbereich senden, indem Sie den Hostnamenteil von Metrics ingestion endpoint auf der Seite „Arbeitsbereichsübersicht“ verwenden. Beispiel: http://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
    • AAD_CLIENT_ID: Die clientId der verwalteten Identität, die der Rolle Monitoring Metrics Publisher zugewiesen wurde.
    • AUDIENCE: Legen Sie zum Erfassen von Metriken im Azure Monitor-Arbeitsbereich AUDIENCE auf https://monitor.azure.com/.default fest.
    • Entfernen Sie OTEL_GRPC_ENDPOINT und OTEL_SERVICE_NAME , wenn Sie OpenTelemetry nicht verwenden.

    Weitere Informationen zu den Parametern finden Sie in der Tabelle Parameter.

    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. Stellen Sie den Proxy mithilfe von Befehlen bereit:

    # create the namespace if it doesn't already exist
    kubectl create namespace observability 
    
    kubectl apply -f proxy-ingestion.yaml -n observability
    
  7. Alternativ können Sie den Proxy mithilfe von Helm wie folgt bereitstellen:

    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. Konfigurieren Sie die Remoteschreibzugriff-URL.
    Der URL-Hostname besteht aus dem Namen des Erfassungsdiensts und dem Namespace im folgenden Format <ingestion service name>.<namespace>.svc.cluster.local. In diesem Beispiel ist der Host azuremonitor-ingestion.observability.svc.cluster.local.
    Konfigurieren Sie den URL-Pfad mithilfe des Pfads über den Metrics ingestion endpoint auf der Seite „Übersicht über den Azure Monitor-Arbeitsbereich“. Beispiel: 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. Wenden Sie die Remoteschreibkonfiguration an.

Hinweis

Informationen zur neuesten Proxyimageversion finden Sie in den Versionshinweisen

Überprüfen, ob der Proxy Daten erfasst

Überprüfen Sie, ob der Proxy erfolgreich Metriken erfasst, indem Sie die Protokolle des Pods überprüfen oder indem Sie den Azure Monitor-Arbeitsbereich abfragen.

Überprüfen Sie die Protokolle des Pods, indem Sie die folgenden Befehle ausführen:

# 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

Durch die erfolgreiche Erfassung von Metriken wird ein Protokoll mit StatusCode=200 ähnlich wie im folgenden Beispiel erstellt:

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

Führen Sie zum Abfragen Ihres Azure Monitor-Arbeitsbereichs die folgenden Schritte aus:

  1. Wählen Sie in Ihrem Azure Monitor-Arbeitsbereich Arbeitsmappen aus.

  2. Wählen Sie die Kachel Prometheus Explorer aus. A screenshot showing the workbooks gallery for an Azure Monitor workspace.

  3. Geben Sie auf der Explorerseite in das Abfragefeld Nach oben ein.

  4. Wählen Sie die Registerkarte Raster aus, um die Ergebnisse anzuzeigen.

  5. Überprüfen Sie die Spalte Cluster, um festzustellen, ob etwas aus Ihrem Cluster angezeigt wird. A screenshot showing the Prometheus explorer query page.

Parameter

Image Parameter Parametername im Helm-Diagramm BESCHREIBUNG Unterstützte Werte Obligatorisch.
TARGET_HOST targetHost Der Zielhost, an den Sie die Anforderung weiterleiten möchten.
Wenn Sie Daten an einen Azure Monitor-Arbeitsbereich senden, verwenden Sie den Metrics ingestion endpoint auf der Seite „Arbeitsbereichsübersicht“.
Wenn Sie Daten aus einem Azure Monitor-Arbeitsbereich auslesen, verwenden Sie den Query endpoint auf der Seite „Arbeitsbereichsübersicht“.
Ja
IDENTITY_TYPE identityType Identitätstyp, der zum Authentifizieren von Anforderungen verwendet wird. Dieser Proxy unterstützt drei Arten von Identitäten. systemassigned, userassigned, aadapplication Ja
AAD_CLIENT_ID aadClientId Die Client-ID der verwendeten Identität. Diese wird für die Identitätstypen userassigned und aadapplication verwendet. Verwenden Sie az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile" zum Abrufen der Client-ID. Ja für userassigned und aadapplication
AAD_TENANT_ID aadTenantId Die Mandanten-ID der verwendeten Identität. Die Mandanten-ID wird für aadapplication-Identitätstypen verwendet. Ja für aadapplication
AAD_CLIENT_CERTIFICATE_PATH aadClientCertificatePath Der Pfad, auf dem der Proxy das Zertifikat für aadapplication finden kann. Auf diesen Pfad muss ein Proxy zugreifen können. Er sollte ein pfx- oder pem-Zertifikat sein, das einen privaten Schlüssel enthält. Nur für aadapplication-Identitätstypen
AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE aadTokenRefreshIntervalInMinutes Das Token wird basierend auf dem Prozentsatz der Zeit bis zum Ablauf des Tokens aktualisiert. Der Standardwert beläuft sich auf 10 % der Zeit bis zum Ablauf. Nein
AUDIENCE audience Zielgruppe für das Token Nein
LISTENING_PORT listeningPort Proxy lauscht an diesem Port Ja
OTEL_SERVICE_NAME otelServiceName Dienstname für OTEL-Ablaufverfolgungen und -Metriken. Standardwert: aad_auth_proxy Nein
OTEL_GRPC_ENDPOINT otelGrpcEndpoint Der Proxy pusht OTEL-Telemetriedaten an diesen Endpunkt. Standardwert: http://localhost:4317 Nein

Problembehandlung

  • Der Proxycontainer wird nicht gestartet.
    Führen Sie den folgenden Befehl aus, um etwaige Fehler für den Proxycontainer anzuzeigen.

    kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>`
    
  • Proxy wird nicht gestartet: Konfigurationsfehler

    Der Proxy überprüft, ob beim Start eine gültige Identität zum Abrufen eines Tokens verwendet wird. Wenn ein Token nicht abgerufen werden kann, schlägt der Start fehl. Sie können Fehler protokollieren und anzeigen, indem Sie den folgenden Befehl ausführen:

    kubectl --namespace <Namespace> logs <Proxy-Pod-Name>
    

    Beispielausgabe:

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