Microsoft Entra-autorisatieproxy
De Microsoft Entra-autorisatieproxy is een omgekeerde proxy, die kan worden gebruikt voor het verifiëren van aanvragen met behulp van Microsoft Entra-id. Deze proxy kan worden gebruikt voor het verifiëren van aanvragen voor elke service die ondersteuning biedt voor Microsoft Entra-verificatie. Gebruik deze proxy om aanvragen te verifiëren voor de beheerde Azure Monitor-service voor Prometheus.
Vereisten
- Een Azure Monitor-werkruimte. Als u geen werkruimte hebt, maakt u er een met behulp van Azure Portal.
- Prometheus is geïnstalleerd op uw cluster.
Notitie
In het voorbeeld van extern schrijven in dit artikel wordt externe schrijfbewerking van Prometheus gebruikt om gegevens naar Azure Monitor te schrijven. Als u uw AKS-cluster onboardt naar Prometheus, wordt Prometheus automatisch op uw cluster geïnstalleerd en worden gegevens naar uw werkruimte verzonden.
Implementatie
De proxy kan worden geïmplementeerd met aangepaste sjablonen met behulp van een release-installatiekopie of als helm-grafiek. Beide implementaties bevatten dezelfde aanpasbare parameters. Deze parameters worden beschreven in de tabel Parameters .
Zie het Microsoft Entra-verificatieproxyproject voor meer informatie.
In de volgende voorbeelden ziet u hoe u de proxy implementeert voor extern schrijven en voor het opvragen van gegevens uit Azure Monitor.
Notitie
In dit voorbeeld ziet u hoe u de proxy gebruikt voor het verifiëren van aanvragen voor extern schrijven naar een beheerde Azure Monitor-service voor Prometheus. Prometheus remote write heeft een speciale zijauto voor extern schrijven. Dit is de aanbevolen methode voor het implementeren van externe schrijfbewerkingen.
Voordat u de proxy implementeert, zoekt u uw beheerde identiteit en wijst u deze toe aan de Monitoring Metrics Publisher
rol voor de gegevensverzamelingsregel van de Azure Monitor-werkruimte.
Zoek de
clientId
beheerde identiteit voor uw AKS-cluster. De beheerde identiteit wordt gebruikt om te verifiëren bij de Azure Monitor-werkruimte. De beheerde identiteit wordt gemaakt wanneer het AKS-cluster wordt gemaakt.# Get the identity client_id az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile"
De uitvoer heeft de volgende indeling:
{ "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" }
Zoek de DCR-id (Data Collection Rule) van uw Azure Monitor-werkruimte.
De regelnaam is hetzelfde als de naam van de werkruimte. De naam van de resourcegroep voor de regel voor gegevensverzameling volgt de indeling:MA_<workspace-name>_<REGION>_managed
bijvoorbeeldMA_amw-proxytest_eastus_managed
. Gebruik de volgende opdracht om de regel-id voor gegevensverzameling te vinden:az monitor data-collection rule show --name <dcr-name> --resource-group <resource-group-name> --query "id"
U kunt ook uw DCR-id en opname-eindpunt voor metrische gegevens vinden met behulp van Azure Portal op de overzichtspagina van de Azure Monitor-werkruimte.
Selecteer de regel voor gegevensverzameling op het tabblad Overzicht van de werkruimte en selecteer vervolgens de JSON-weergave om de resource-id weer te geven.
Wijs de
Monitoring Metrics Publisher
rol toe aan de beheerde identiteitenclientId
, zodat deze kan schrijven naar de regel voor het verzamelen van gegevens in de Azure Monitor-werkruimte.az role assignment create / --assignee <clientid> / --role "Monitoring Metrics Publisher" / --scope <workspace-dcr-id>
Voorbeeld:
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
Gebruik het volgende YAML-bestand om de proxy te implementeren voor extern schrijven. Wijzig de volgende parameters:
TARGET_HOST
- De doelhost waarnaar u de aanvraag wilt doorsturen. Als u gegevens naar een Azure Monitor-werkruimte wilt verzenden, gebruikt u het hostnaamgedeelte van deMetrics ingestion endpoint
werkruimtenoverzichtspagina. Bijvoorbeeldhttp://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
AAD_CLIENT_ID
- DeclientId
beheerde identiteit waaraan deMonitoring Metrics Publisher
rol is toegewezen.AUDIENCE
- Voor het opnemen van metrische gegevens naar Azure Monitor Workspace, ingesteld opAUDIENCE
https://monitor.azure.com/.default
.- Verwijder
OTEL_GRPC_ENDPOINT
enOTEL_SERVICE_NAME
als u Geen OpenTelemetry gebruikt.
Zie de tabel Parameters voor meer informatie over de parameters.
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
Implementeer de proxy met behulp van opdrachten:
# create the namespace if it doesn't already exist kubectl create namespace observability kubectl apply -f proxy-ingestion.yaml -n observability
U kunt de proxy ook als volgt implementeren met 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
Configureer de URL voor externe schrijfbewerkingen.
De URL-hostnaam bestaat uit de naam en naamruimte van de opnameservice in de volgende indeling<ingestion service name>.<namespace>.svc.cluster.local
. In dit voorbeeld isazuremonitor-ingestion.observability.svc.cluster.local
de host .
Configureer het URL-pad met behulp van het pad vanaf deMetrics ingestion endpoint
overzichtspagina van de Azure Monitor-werkruimte. Bijvoorbeeld: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"
Pas de externe schrijfconfiguratie toe.
Notitie
Zie de releaseopmerkingen voor de nieuwste versie van de proxyinstallatiekopieën
Controleer of de proxy gegevens opneemt
Controleer of de proxy metrische gegevens kan opnemen door de logboeken van de pod te controleren of door een query uit te voeren op de Azure Monitor-werkruimte.
Controleer de logboeken van de pod door de volgende opdrachten uit te voeren:
# 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
Als u metrische gegevens opneemt, wordt er een logboek gemaakt dat StatusCode=200
er ongeveer als volgt uitziet:
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
Volg de onderstaande stappen om een query uit te voeren op uw Azure Monitor-werkruimte:
Parameters
Afbeeldingsparameter | Naam van helm-grafiekparameter | Beschrijving | Ondersteunde waarden | Verplicht |
---|---|---|---|---|
TARGET_HOST |
targetHost |
Doelhost waarnaar u de aanvraag wilt doorsturen. Wanneer u gegevens naar een Azure Monitor-werkruimte verzendt, gebruikt u de Metrics ingestion endpoint pagina Overzicht van werkruimten. Wanneer u gegevens uit een Azure Monitor-werkruimte leest, gebruikt u de Query endpoint pagina Overzicht van werkruimten |
Ja | |
IDENTITY_TYPE |
identityType |
Identiteitstype dat wordt gebruikt voor het verifiëren van aanvragen. Deze proxy ondersteunt drie typen identiteiten. | systemassigned , userassigned , aadapplication |
Ja |
AAD_CLIENT_ID |
aadClientId |
Client-id van de gebruikte identiteit. Dit wordt gebruikt voor userassigned en aadapplication identiteitstypen. Gebruiken az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile" om de client-id op te halen |
Ja voor userassigned en aadapplication |
|
AAD_TENANT_ID |
aadTenantId |
Tenant-id van de gebruikte identiteit. Tenant-id wordt gebruikt voor aadapplication identiteitstypen. |
Ja voor aadapplication |
|
AAD_CLIENT_CERTIFICATE_PATH |
aadClientCertificatePath |
Het pad waar de proxy het certificaat voor aadapplication kan vinden. Dit pad moet toegankelijk zijn via een proxy en moet een PFX- of PEM-certificaat met een persoonlijke sleutel zijn. | Alleen voor aadapplication identiteitstypen |
|
AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE |
aadTokenRefreshIntervalInMinutes |
Het token wordt vernieuwd op basis van het tijdspercentage totdat het token verloopt. De standaardwaarde is 10% tijd voordat deze verloopt. | Nee | |
AUDIENCE |
audience |
Doelgroep voor het token | Nee | |
LISTENING_PORT |
listeningPort |
Proxy luisteren op deze poort | Ja | |
OTEL_SERVICE_NAME |
otelServiceName |
Servicenaam voor OTEL-traceringen en metrische gegevens. Standaardwaarde: aad_auth_proxy | Nee | |
OTEL_GRPC_ENDPOINT |
otelGrpcEndpoint |
De proxy pusht telemetrie van OTEL naar dit eindpunt. Standaardwaarde: http://localhost:4317 | Nee |
Problemen oplossen
De proxycontainer wordt niet gestart.
Voer de volgende opdracht uit om eventuele fouten voor de proxycontainer weer te geven.kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>`
Proxy wordt niet gestart - configuratiefouten
De proxy controleert op een geldige identiteit om een token op te halen tijdens het opstarten. Als het ophalen van een token mislukt, mislukt het opstarten. Fouten worden vastgelegd en kunnen worden weergegeven door de volgende opdracht uit te voeren:
kubectl --namespace <Namespace> logs <Proxy-Pod-Name>
Voorbeelduitvoer:
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" } --------------------------------------------------------------------------------
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor