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.
Achtung
Dies ist ein eingestellter Artikel.
Das Proxycontainerimage und das Steuerdiagramm werden nicht mehr verwaltet oder unterstützt.
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.
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" }
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. BMA_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"
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.
Weisen Sie die Rolle
Monitoring Metrics Publisher
derclientId
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
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 vonMetrics ingestion endpoint
auf der Seite „Arbeitsbereichsübersicht“ verwenden. Beispiel:http://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
AAD_CLIENT_ID
: DieclientId
der verwalteten Identität, die der RolleMonitoring Metrics Publisher
zugewiesen wurde.AUDIENCE
: Legen Sie zum Erfassen von Metriken im Azure Monitor-ArbeitsbereichAUDIENCE
aufhttps://monitor.azure.com/.default
fest.- Entfernen Sie
OTEL_GRPC_ENDPOINT
undOTEL_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
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
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
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 Hostazuremonitor-ingestion.observability.svc.cluster.local
.
Konfigurieren Sie den URL-Pfad mithilfe des Pfads über denMetrics 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"
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:
Wählen Sie in Ihrem Azure Monitor-Arbeitsbereich Arbeitsmappen aus.
Geben Sie auf der Explorerseite in das Abfragefeld Nach oben ein.
Wählen Sie die Registerkarte Raster aus, um die Ergebnisse anzuzeigen.
Überprüfen Sie die Spalte Cluster, um festzustellen, ob etwas aus Ihrem Cluster angezeigt wird.
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" } --------------------------------------------------------------------------------