Serwer proxy autoryzacji entra firmy Microsoft
Serwer proxy autoryzacji Entra firmy Microsoft jest zwrotnym serwerem proxy, który może służyć do uwierzytelniania żądań przy użyciu identyfikatora Entra firmy Microsoft. Ten serwer proxy może służyć do uwierzytelniania żądań do dowolnej usługi obsługującej uwierzytelnianie firmy Microsoft Entra. Ten serwer proxy służy do uwierzytelniania żądań w usłudze zarządzanej Azure Monitor dla rozwiązania Prometheus.
Uwaga
Jest to artykuł wycofany.
Obraz kontenera serwera proxy i wykres helm nie są już obsługiwane ani obsługiwane.
Wymagania wstępne
- Obszar roboczy usługi Azure Monitor. Jeśli nie masz obszaru roboczego, utwórz go przy użyciu witryny Azure Portal.
- Rozwiązanie Prometheus zainstalowane w klastrze.
Uwaga
Przykład zdalnego zapisu w tym artykule używa zdalnego zapisu Prometheus do zapisywania danych w usłudze Azure Monitor. Dołączanie klastra usługi AKS do rozwiązania Prometheus automatycznie instaluje rozwiązanie Prometheus w klastrze i wysyła dane do obszaru roboczego.
Wdrożenie
Serwer proxy można wdrożyć przy użyciu szablonów niestandardowych przy użyciu obrazu wydania lub jako wykresu helm. Oba wdrożenia zawierają te same parametry, które można dostosowywać. Te parametry są opisane w tabeli Parametry .
Aby uzyskać więcej informacji, zobacz Projekt serwera proxy uwierzytelniania entra firmy Microsoft.
W poniższych przykładach pokazano, jak wdrożyć serwer proxy na potrzeby zdalnego zapisu i wykonywania zapytań dotyczących danych z usługi Azure Monitor.
Uwaga
W tym przykładzie pokazano, jak używać serwera proxy do uwierzytelniania żądań zdalnego zapisu w usłudze zarządzanej Azure Monitor dla rozwiązania Prometheus. Rozwiązanie Prometheus remote write ma dedykowany samochód boczny do zdalnego zapisu, który jest zalecaną metodą implementowania zdalnego zapisu.
Przed wdrożeniem serwera proxy znajdź tożsamość zarządzaną i przypisz jej Monitoring Metrics Publisher
rolę dla reguły zbierania danych obszaru roboczego usługi Azure Monitor.
clientId
Znajdź identyfikator tożsamości zarządzanej dla klastra usługi AKS. Tożsamość zarządzana służy do uwierzytelniania w obszarze roboczym usługi Azure Monitor. Tożsamość zarządzana jest tworzona podczas tworzenia klastra usługi AKS.# Get the identity client_id az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile"
Dane wyjściowe mają następujący 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" }
Znajdź identyfikator reguły zbierania danych obszaru roboczego usługi Azure Monitor (DCR).
Nazwa reguły jest taka sama jak nazwa obszaru roboczego. Nazwa grupy zasobów dla reguły zbierania danych jest następująca:MA_<workspace-name>_<REGION>_managed
, na przykładMA_amw-proxytest_eastus_managed
. Użyj następującego polecenia, aby znaleźć identyfikator reguły zbierania danych:az monitor data-collection rule show --name <dcr-name> --resource-group <resource-group-name> --query "id"
Alternatywnie możesz znaleźć swój punkt końcowy pozyskiwania identyfikatorów i metryk dcR przy użyciu witryny Azure Portal na stronie Przegląd obszaru roboczego usługi Azure Monitor.
Wybierz regułę zbierania danych na karcie Przegląd obszaru roboczego, a następnie wybierz widok JSON, aby wyświetlić identyfikator zasobu.
Monitoring Metrics Publisher
Przypisz rolę do tożsamościclientId
zarządzanej, aby mogła zapisywać dane w regule zbierania danych obszaru roboczego usługi Azure Monitor.az role assignment create / --assignee <clientid> / --role "Monitoring Metrics Publisher" / --scope <workspace-dcr-id>
Na przykład:
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
Użyj następującego pliku YAML, aby wdrożyć serwer proxy na potrzeby zdalnego zapisu. Zmodyfikuj następujące parametry:
TARGET_HOST
- Host docelowy, do którego chcesz przekazać żądanie. Aby wysłać dane do obszaru roboczego usługi Azure Monitor, użyj częściMetrics ingestion endpoint
nazwy hosta na stronie Przegląd obszarów roboczych. Na przykładhttp://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
AAD_CLIENT_ID
- TożsamośćclientId
zarządzana użyta, która została przypisanaMonitoring Metrics Publisher
do roli.AUDIENCE
— W przypadku pozyskiwania metryk do obszaru roboczego usługi Azure Monitor ustaw wartośćAUDIENCE
https://monitor.azure.com/.default
.- Usuń
OTEL_GRPC_ENDPOINT
element iOTEL_SERVICE_NAME
jeśli nie używasz biblioteki OpenTelemetry.
Aby uzyskać więcej informacji na temat parametrów, zobacz tabelę Parametry .
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
Wdróż serwer proxy przy użyciu poleceń:
# create the namespace if it doesn't already exist kubectl create namespace observability kubectl apply -f proxy-ingestion.yaml -n observability
Alternatywnie możesz wdrożyć serwer proxy przy użyciu narzędzia Helm w następujący sposób:
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
Skonfiguruj zdalny adres URL zapisu.
Nazwa hosta adresu URL składa się z nazwy usługi pozyskiwania i przestrzeni nazw w następującym formacie<ingestion service name>.<namespace>.svc.cluster.local
. W tym przykładzie hostem jestazuremonitor-ingestion.observability.svc.cluster.local
.
Skonfiguruj ścieżkę adresu URL przy użyciu ścieżki zeMetrics ingestion endpoint
strony Przegląd obszaru roboczego usługi Azure Monitor. Na przykładdataCollectionRules/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"
Zastosuj konfigurację zapisu zdalnego.
Uwaga
Aby uzyskać najnowszą wersję obrazu serwera proxy, zobacz informacje o wersji
Sprawdź, czy serwer proxy pozyska dane
Sprawdź, czy serwer proxy pomyślnie pozyska metryki, sprawdzając dzienniki zasobnika lub wysyłając zapytanie do obszaru roboczego usługi Azure Monitor.
Sprawdź dzienniki zasobnika, uruchamiając następujące polecenia:
# 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
Pomyślnie pozyskiwanie metryk powoduje utworzenie dziennika o StatusCode=200
podobnej do następującej:
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
Aby wykonać zapytanie dotyczące obszaru roboczego usługi Azure Monitor, wykonaj poniższe kroki:
Parametry
Parametr obrazu | Nazwa parametru wykresu helm | opis | Obsługiwane wartości | Obowiązkowy |
---|---|---|---|---|
TARGET_HOST |
targetHost |
Host docelowy, do którego chcesz przekazać żądanie. Podczas wysyłania danych do obszaru roboczego usługi Azure Monitor użyj Metrics ingestion endpoint strony Przegląd obszarów roboczych. Podczas odczytywania danych z obszaru roboczego usługi Azure Monitor użyj Query endpoint strony Przegląd obszarów roboczych |
Tak | |
IDENTITY_TYPE |
identityType |
Typ tożsamości używany do uwierzytelniania żądań. Ten serwer proxy obsługuje trzy typy tożsamości. | systemassigned , , userassigned aadapplication |
Tak |
AAD_CLIENT_ID |
aadClientId |
Identyfikator klienta używanej tożsamości. Jest to używane w przypadku userassigned typów tożsamości i aadapplication . Użyj az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile" polecenia , aby pobrać identyfikator klienta |
Tak dla userassigned i aadapplication |
|
AAD_TENANT_ID |
aadTenantId |
Identyfikator dzierżawy używanej tożsamości. Identyfikator dzierżawy jest używany dla aadapplication typów tożsamości. |
Tak dla aadapplication |
|
AAD_CLIENT_CERTIFICATE_PATH |
aadClientCertificatePath |
Ścieżka, w której serwer proxy może znaleźć certyfikat dla aadapplication. Ta ścieżka powinna być dostępna przez serwer proxy i powinna być certyfikatem pfx lub pem zawierającym klucz prywatny. | Tylko dla aadapplication typów tożsamości |
|
AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE |
aadTokenRefreshIntervalInMinutes |
Token jest odświeżany na podstawie procentu czasu do momentu wygaśnięcia tokenu. Wartość domyślna to 10% czasu przed wygaśnięciem. | Nie. | |
AUDIENCE |
audience |
Odbiorcy tokenu | Nie. | |
LISTENING_PORT |
listeningPort |
Serwer proxy nasłuchujący na tym porcie | Tak | |
OTEL_SERVICE_NAME |
otelServiceName |
Nazwa usługi dla śladów i metryk OTEL. Wartość domyślna: aad_auth_proxy | Nie. | |
OTEL_GRPC_ENDPOINT |
otelGrpcEndpoint |
Serwer proxy wypycha dane telemetryczne OTEL do tego punktu końcowego. Wartość domyślna: http://localhost:4317 | Nie. |
Rozwiązywanie problemów
Kontener serwera proxy nie jest uruchomiony.
Uruchom następujące polecenie, aby wyświetlić wszelkie błędy dla kontenera serwera proxy.kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>`
Serwer proxy nie uruchamia się — błędy konfiguracji
Serwer proxy sprawdza poprawną tożsamość w celu pobrania tokenu podczas uruchamiania. Jeśli nie można pobrać tokenu, uruchomienie zakończy się niepowodzeniem. Błędy są rejestrowane i można je wyświetlić, uruchamiając następujące polecenie:
kubectl --namespace <Namespace> logs <Proxy-Pod-Name>
Przykładowe wyjście:
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" } --------------------------------------------------------------------------------