Dela via


Microsoft Entra-auktoriseringsproxy

Microsoft Entra-auktoriseringsproxyn är en omvänd proxy som kan användas för att autentisera begäranden med hjälp av Microsoft Entra-ID. Den här proxyn kan användas för att autentisera begäranden till alla tjänster som stöder Microsoft Entra-autentisering. Använd den här proxyn för att autentisera begäranden till azure monitor-hanterad tjänst för Prometheus.

Förutsättningar

  • En Azure Monitor-arbetsyta. Om du inte har någon arbetsyta skapar du en med hjälp av Azure-portalen.
  • Prometheus installerat i klustret.

Kommentar

Fjärrskrivningsexemplet i den här artikeln använder Prometheus fjärrskrivning för att skriva data till Azure Monitor. När du registrerar AKS-klustret till Prometheus installeras Prometheus automatiskt i klustret och data skickas till din arbetsyta.

Distribution

Proxyn kan distribueras med anpassade mallar med versionsbilden eller som ett helm-diagram. Båda distributionerna innehåller samma anpassningsbara parametrar. Dessa parametrar beskrivs i tabellen Parametrar .

Mer information finns i Microsoft Entra-autentiseringsproxyprojekt .

Följande exempel visar hur du distribuerar proxyn för fjärrskrivning och för att fråga efter data från Azure Monitor.

Kommentar

Det här exemplet visar hur du använder proxyn för att autentisera begäranden om fjärrskrivning till en Hanterad Azure Monitor-tjänst för Prometheus. Prometheus fjärrskrivning har en dedikerad sidobil för fjärrskrivning, vilket är den rekommenderade metoden för att implementera fjärrskrivning.

Innan du distribuerar proxyn letar du reda på din hanterade identitet och tilldelar den Monitoring Metrics Publisher rollen för Azure Monitor-arbetsytans datainsamlingsregel.

  1. Leta reda på clientId för den hanterade identiteten för ditt AKS-kluster. Den hanterade identiteten används för att autentisera till Azure Monitor-arbetsytan. Den hanterade identiteten skapas när AKS-klustret skapas.

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

    Kommandot returnerar utdata med följande 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. Hitta din Azure Monitor-arbetsytas ID för datainsamlingsregel (DCR).
    Regelnamnet är samma som arbetsytans namn. Resursgruppens namn för datainsamlingsregeln följer formatet: MA_<workspace-name>_<REGION>_managed, till exempel MA_amw-proxytest_eastus_managed. Använd följande kommando för att hitta regel-ID:t för datainsamling:

    az monitor data-collection rule show --name <dcr-name> --resource-group <resource-group-name> --query "id"
    
  3. Du kan också hitta din DCR-ID och slutpunkten för inmatning av mått med hjälp av Azure-portalen på sidan Översikt över Azure Monitor-arbetsytan.

    Välj datainsamlingsregeln på fliken Översikt för arbetsytan och välj sedan JSON-vyn för att se resurs-ID: t.

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

  4. Monitoring Metrics Publisher Tilldela rollen till den hanterade identiteten så att den kan skriva till datainsamlingsregeln clientId för Azure Monitor-arbetsytan.

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

    Till exempel:

    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. Använd följande YAML-fil för att distribuera proxyn för fjärrskrivning. Ändra följande parametrar:

    • TARGET_HOST – Målvärden där du vill vidarebefordra begäran till. Om du vill skicka data till en Azure Monitor-arbetsyta använder du värdnamnsdelen av Metrics ingestion endpoint sidan Översikt för arbetsytor. Till exempel: http://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
    • AAD_CLIENT_ID – Den clientId hanterade identitet som användes som tilldelades Monitoring Metrics Publisher rollen.
    • AUDIENCE – För inmatning av mått till Azure Monitor-arbetsyta anger du AUDIENCE till https://monitor.azure.com/.default .
    • Ta bort OTEL_GRPC_ENDPOINT och OTEL_SERVICE_NAME om du inte använder OpenTelemetry.

    Mer information om parametrarna finns i tabellen Parametrar .

    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. Distribuera proxyn med hjälp av kommandon:

    # create the namespace if it doesn't already exist
    kubectl create namespace observability 
    
    kubectl apply -f proxy-ingestion.yaml -n observability
    
  7. Du kan också distribuera proxyn med helm på följande sätt:

    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. Konfigurera url för fjärrskrivning.
    URL-värdnamnet består av inmatningstjänstens namn och namnområde i följande format <ingestion service name>.<namespace>.svc.cluster.local. I det här exemplet är azuremonitor-ingestion.observability.svc.cluster.localvärden .
    Konfigurera URL-sökvägen med hjälp av sökvägen från Metrics ingestion endpoint översiktssidan för Azure Monitor-arbetsytan. Exempel: 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. Använd fjärrskrivningskonfigurationen.

Kommentar

Den senaste versionen av proxybilden finns i viktig information

Kontrollera att proxyn matar in data

Kontrollera att proxyn har matat in mått genom att kontrollera poddens loggar eller genom att fråga Azure Monitor-arbetsytan.

Kontrollera poddens loggar genom att köra följande kommandon:

# 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

Genom att mata in mått skapas en logg som StatusCode=200 liknar följande:

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ölj stegen nedan för att fråga din Azure Monitor-arbetsyta:

  1. På din Azure Monitor-arbetsyta väljer du Arbetsböcker .

  2. Välj panelen Prometheus Explorer . A screenshot showing the workbooks gallery for an Azure Monitor workspace.

  3. På utforskarsidan anger du i frågerutan.

  4. Välj fliken Rutnät för att se resultatet.

  5. Kontrollera klusterkolumnen för att se om från klustret visas. A screenshot showing the Prometheus explorer query page.

Parametrar

Bildparameter Namn på Helm-diagramparameter beskrivning Värden som stöds Obligatorisk
TARGET_HOST targetHost Målvärd där du vill vidarebefordra begäran till.
När du skickar data till en Azure Monitor-arbetsyta använder du Metrics ingestion endpoint sidan Översikt för arbetsytor.
När du läser data från en Azure Monitor-arbetsyta använder du Query endpoint sidan Översikt över arbetsytor
Ja
IDENTITY_TYPE identityType Identitetstyp som används för att autentisera begäranden. Den här proxyn stöder tre typer av identiteter. systemassigned, userassigned, aadapplication Ja
AAD_CLIENT_ID aadClientId Klient-ID för den identitet som används. Detta används för userassigned och aadapplication identitetstyper. Använd az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile" för att hämta klient-ID:t Ja för userassigned och aadapplication
AAD_TENANT_ID aadTenantId Klientorganisations-ID för den identitet som används. Klientorganisations-ID används för aadapplication identitetstyper. Ja för aadapplication
AAD_CLIENT_CERTIFICATE_PATH aadClientCertificatePath Sökvägen där proxyn kan hitta certifikatet för aadapplication. Den här sökvägen bör vara tillgänglig via proxy och bör vara ett pfx- eller pem-certifikat som innehåller en privat nyckel. Endast för aadapplication identitetstyper
AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE aadTokenRefreshIntervalInMinutes Token uppdateras baserat på procentandelen tid tills token upphör att gälla. Standardvärdet är 10 % tid innan det upphör att gälla. Nej
AUDIENCE audience Målgrupp för token Nej
LISTENING_PORT listeningPort Proxylyssna på den här porten Ja
OTEL_SERVICE_NAME otelServiceName Tjänstnamn för OTEL-spårningar och mått. Standardvärde: aad_auth_proxy Nej
OTEL_GRPC_ENDPOINT otelGrpcEndpoint Proxy push-överför OTEL-telemetri till den här slutpunkten. Standardvärde: http://localhost:4317 Nej

Felsökning

  • Proxycontainern startar inte.
    Kör följande kommando för att visa eventuella fel för proxycontainern.

    kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>`
    
  • Proxyn startar inte – konfigurationsfel

    Proxyn söker efter en giltig identitet för att hämta en token under starten. Om det inte går att hämta en token misslyckas starten. Fel loggas och kan visas genom att köra följande kommando:

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

    Exempel på utdata:

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