Proxy di autorizzazione di Microsoft Entra
Il proxy di autorizzazione Di Microsoft Entra è un proxy inverso, che può essere usato per autenticare le richieste tramite Microsoft Entra ID. Questo proxy può essere usato per autenticare le richieste a qualsiasi servizio che supporta l'autenticazione di Microsoft Entra. Usare questo proxy per autenticare le richieste al servizio gestito di Monitoraggio di Azure per Prometheus.
Attenzione
Questo è un articolo ritirato.
L'immagine del contenitore proxy e il grafico Helm non sono più gestiti o supportati.
Prerequisiti
- Un'area di lavoro di Monitoraggio di Azure. Se non si ha un'area di lavoro, crearne una usando il portale di Azure.
- Prometheus installato nel cluster.
Nota
L'esempio di scrittura remota in questo articolo usa la scrittura remota Prometheus per scrivere dati in Monitoraggio di Azure. L'onboarding del cluster del servizio Azure Kubernetes in Prometheus installa automaticamente Prometheus nel cluster e invia i dati all'area di lavoro.
Distribuzione
Il proxy può essere distribuito con modelli personalizzati usando l'immagine di rilascio o come grafico helm. Entrambe le distribuzioni contengono gli stessi parametri personalizzabili. Questi parametri sono descritti nella tabella Parametri .
Per altre informazioni, vedere Progetto proxy di autenticazione di Microsoft Entra.
Gli esempi seguenti illustrano come distribuire il proxy per la scrittura remota e per l'esecuzione di query sui dati da Monitoraggio di Azure.
Nota
Questo esempio illustra come usare il proxy per autenticare le richieste di scrittura remota in un servizio gestito di Monitoraggio di Azure per Prometheus. Prometheus remote write ha un'auto laterale dedicata per la scrittura remota, che è il metodo consigliato per implementare la scrittura remota.
Prima di distribuire il proxy, trovare l'identità gestita e assegnarla il Monitoring Metrics Publisher
ruolo per la regola di raccolta dati dell'area di lavoro di Monitoraggio di Azure.
Trovare per
clientId
l'identità gestita per il cluster del servizio Azure Kubernetes. L'identità gestita viene usata per eseguire l'autenticazione nell'area di lavoro di Monitoraggio di Azure. L'identità gestita viene creata quando viene creato il cluster del servizio Azure Kubernetes.# Get the identity client_id az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile"
L'output presenta il formato seguente:
{ "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" }
Trovare l'ID della regola di raccolta dati (DCR) dell'area di lavoro di Monitoraggio di Azure.
Il nome della regola è uguale al nome dell'area di lavoro. Il nome del gruppo di risorse per la regola di raccolta dati segue il formato ,MA_<workspace-name>_<REGION>_managed
ad esempioMA_amw-proxytest_eastus_managed
. Usare il comando seguente per trovare l'ID regola di raccolta dati:az monitor data-collection rule show --name <dcr-name> --resource-group <resource-group-name> --query "id"
In alternativa, è possibile trovare l'ENDPOINT di inserimento DCR e Metrica usando il portale di Azure nella pagina Panoramica dell'area di lavoro di Monitoraggio di Azure.
Selezionare la regola raccolta dati nella scheda Panoramica dell'area di lavoro, quindi selezionare visualizzazione JSON per visualizzare l'ID risorsa.
Assegnare il
Monitoring Metrics Publisher
ruolo all'identità gestita in modo che possa scrivere nella regola di raccolta dati dell'areaclientId
di lavoro di Monitoraggio di Azure.az role assignment create / --assignee <clientid> / --role "Monitoring Metrics Publisher" / --scope <workspace-dcr-id>
Ad esempio:
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
Usare il file YAML seguente per distribuire il proxy per la scrittura remota. Modificare i parametri seguenti:
TARGET_HOST
- Host di destinazione a cui si vuole inoltrare la richiesta. Per inviare dati a un'area di lavoro di Monitoraggio di Azure, usare la parte nome host dellaMetrics ingestion endpoint
pagina Panoramica delle aree di lavoro. Ad esempio,http://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
AAD_CLIENT_ID
- OggettoclientId
dell'identità gestita usata a cui è stato assegnato ilMonitoring Metrics Publisher
ruolo.AUDIENCE
- Per l'inserimento delle metriche nell'area di lavoro di Monitoraggio di Azure, impostare suAUDIENCE
https://monitor.azure.com/.default
.- Rimuovere
OTEL_GRPC_ENDPOINT
eOTEL_SERVICE_NAME
se non si usa OpenTelemetry.
Per altre informazioni sui parametri, vedere la tabella 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
Distribuire il proxy usando i comandi:
# create the namespace if it doesn't already exist kubectl create namespace observability kubectl apply -f proxy-ingestion.yaml -n observability
In alternativa, è possibile distribuire il proxy usando helm come indicato di seguito:
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
Configurare l'URL di scrittura remoto.
Il nome host URL è costituito dal nome del servizio di inserimento e dallo spazio dei nomi nel formato<ingestion service name>.<namespace>.svc.cluster.local
seguente. In questo esempio l'host èazuremonitor-ingestion.observability.svc.cluster.local
.
Configurare il percorso URL usando il percorso dalla pagina Panoramica dell'areaMetrics ingestion endpoint
di lavoro di Monitoraggio di Azure. Ad esempio: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"
Applicare la configurazione di scrittura remota.
Nota
Per la versione più recente dell'immagine proxy, vedere le note sulla versione
Verificare che il proxy stia inseriscendo i dati
Verificare che il proxy inserisca correttamente le metriche controllando i log del pod o eseguendo una query sull'area di lavoro monitoraggio di Azure.
Controllare i log del pod eseguendo i comandi seguenti:
# 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
L'inserimento delle metriche genera un log simile StatusCode=200
al seguente:
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
Per eseguire query sull'area di lavoro di Monitoraggio di Azure, seguire questa procedura:
Parametri
Parametro Image | Nome parametro del grafico Helm | Descrizione | Valori supportati | Obbligatorio |
---|---|---|---|---|
TARGET_HOST |
targetHost |
Host di destinazione a cui si vuole inoltrare la richiesta. Quando si inviano dati a un'area di lavoro di Monitoraggio di Azure, usare dalla Metrics ingestion endpoint pagina Panoramica delle aree di lavoro. Quando si legge i dati da un'area di lavoro di Monitoraggio di Azure, usare dalla Query endpoint pagina Panoramica delle aree di lavoro |
Sì | |
IDENTITY_TYPE |
identityType |
Tipo di identità usato per autenticare le richieste. Questo proxy supporta tre tipi di identità. | systemassigned , userassigned , aadapplication |
Sì |
AAD_CLIENT_ID |
aadClientId |
ID client dell'identità usata. Viene usato per userassigned i tipi di identità e aadapplication . Usare az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile" per recuperare l'ID client |
Sì per userassigned e aadapplication |
|
AAD_TENANT_ID |
aadTenantId |
ID tenant dell'identità usata. L'ID tenant viene usato per aadapplication i tipi di identità. |
Sì per aadapplication |
|
AAD_CLIENT_CERTIFICATE_PATH |
aadClientCertificatePath |
Percorso in cui il proxy può trovare il certificato per aadapplication. Questo percorso deve essere accessibile dal proxy e deve essere un certificato pfx o pem contenente una chiave privata. | Solo per aadapplication i tipi di identità |
|
AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE |
aadTokenRefreshIntervalInMinutes |
Il token viene aggiornato in base alla percentuale di tempo fino alla scadenza del token. Il valore predefinito è 10% di tempo prima della scadenza. | No | |
AUDIENCE |
audience |
Destinatari per il token | No | |
LISTENING_PORT |
listeningPort |
Proxy in ascolto su questa porta | Sì | |
OTEL_SERVICE_NAME |
otelServiceName |
Nome del servizio per le tracce e le metriche ROUTE. Valore predefinito: aad_auth_proxy | No | |
OTEL_GRPC_ENDPOINT |
otelGrpcEndpoint |
Il proxy esegue il push dei dati di telemetria ROUTE a questo endpoint. Valore predefinito: http://localhost:4317 | No |
Risoluzione dei problemi
Il contenitore proxy non viene avviato.
Eseguire il comando seguente per visualizzare eventuali errori per il contenitore proxy.kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>`
Il proxy non viene avviato- errori di configurazione
Il proxy verifica la presenza di un'identità valida per recuperare un token durante l'avvio. Se non riesce a recuperare un token, l'avvio ha esito negativo. Gli errori vengono registrati e possono essere visualizzati eseguendo il comando seguente:
kubectl --namespace <Namespace> logs <Proxy-Pod-Name>
Output di esempio:
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" } --------------------------------------------------------------------------------