Proxy autorizace Microsoft Entra

Proxy autorizace Microsoft Entra je reverzní proxy server, který lze použít k ověřování požadavků pomocí Microsoft Entra ID. Tento proxy server lze použít k ověření požadavků na jakoukoli službu, která podporuje ověřování Microsoft Entra. Tento proxy server použijte k ověření požadavků na spravovanou službu Azure Monitor pro Prometheus.

Požadavky

  • Pracovní prostor služby Azure Monitor Pokud pracovní prostor nemáte, vytvořte ho pomocí webu Azure Portal.
  • Prometheus nainstalovaný ve vašem clusteru.

Poznámka:

Příklad vzdáleného zápisu v tomto článku používá vzdálený zápis Prometheus k zápisu dat do služby Azure Monitor. Onboarding clusteru AKS do prometheus automaticky nainstaluje Do vašeho clusteru Prometheus a odešle data do pracovního prostoru.

Nasazení

Proxy server je možné nasadit s vlastními šablonami pomocí image verze nebo jako chart Helm. Obě nasazení obsahují stejné přizpůsobitelné parametry. Tyto parametry jsou popsány v tabulce Parametry .

Další informace naleznete v tématu Microsoft Entra authentication proxy project.

Následující příklady ukazují, jak nasadit proxy server pro vzdálený zápis a dotazování dat ze služby Azure Monitor.

Poznámka:

Tento příklad ukazuje, jak pomocí proxy serveru ověřovat žádosti o vzdálené zápisy do spravované služby Azure Monitoru pro Prometheus. Vzdálený zápis prometheus má vyhrazené boční auto pro vzdálené zápis, což je doporučená metoda pro implementaci vzdáleného zápisu.

Před nasazením proxy serveru vyhledejte spravovanou identitu a přiřaďte ji Monitoring Metrics Publisher roli pro pravidlo shromažďování dat pracovního prostoru služby Azure Monitor.

  1. Vyhledejte spravovanou clientId identitu pro váš cluster AKS. Spravovaná identita se používá k ověření v pracovním prostoru služby Azure Monitor. Spravovaná identita se vytvoří při vytvoření clusteru AKS.

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

    Výstup má následující formát:

    {
      "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. Vyhledejte ID pravidla pro shromažďování dat pracovního prostoru služby Azure Monitor (DCR).
    Název pravidla je stejný jako název pracovního prostoru. Název skupiny prostředků pro vaše pravidlo shromažďování dat se řídí formátem: MA_<workspace-name>_<REGION>_managednapříklad MA_amw-proxytest_eastus_managed. Pomocí následujícího příkazu vyhledejte ID pravidla shromažďování dat:

    az monitor data-collection rule show --name <dcr-name> --resource-group <resource-group-name> --query "id"
    
  3. Případně můžete koncový bod příjmu metrik a DCR najít na webu Azure Portal na stránce Přehled pracovního prostoru služby Azure Monitor.

    Vyberte pravidlo shromažďování dat na kartě Přehled pracovního prostoru a pak výběrem zobrazení JSON zobrazte ID prostředku.

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

  4. Monitoring Metrics Publisher Přiřaďte roli spravované identitěclientId, aby se mohl zapisovat do pravidla shromažďování dat pracovního prostoru služby Azure Monitor.

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

    Příklad:

    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. K nasazení proxy serveru pro vzdálené zápis použijte následující soubor YAML. Upravte následující parametry:

    • TARGET_HOST – Cílový hostitel, do kterého chcete požadavek přeposlat. Pokud chcete odesílat data do pracovního prostoru služby Azure Monitor, použijte část Metrics ingestion endpoint názvu hostitele na stránce Přehled pracovních prostorů. Například http://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
    • AAD_CLIENT_ID – Použitá clientId spravovaná identita, která byla přiřazena roli Monitoring Metrics Publisher .
    • AUDIENCE – Pro příjem metrik do pracovního prostoru služby Azure Monitor nastavte AUDIENCE hodnotu https://monitor.azure.com/.default .
    • Odeberte OTEL_GRPC_ENDPOINT a OTEL_SERVICE_NAME pokud nepoužíváte OpenTelemetry.

    Další informace o parametrech naleznete v tabulce 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
    
  6. Nasazení proxy serveru pomocí příkazů:

    # create the namespace if it doesn't already exist
    kubectl create namespace observability 
    
    kubectl apply -f proxy-ingestion.yaml -n observability
    
  7. Případně můžete proxy server nasadit následujícím způsobem:

    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. Nakonfigurujte adresu URL vzdáleného zápisu.
    Název hostitele adresy URL se skládá z názvu služby příjmu dat a oboru názvů v následujícím formátu <ingestion service name>.<namespace>.svc.cluster.local. V tomto příkladu je azuremonitor-ingestion.observability.svc.cluster.localhostitel .
    Nakonfigurujte cestu URL pomocí cesty ze Metrics ingestion endpoint stránky Přehled pracovního prostoru služby Azure Monitor. Například 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. Použijte konfiguraci vzdáleného zápisu.

Poznámka:

Nejnovější verzi image proxy serveru najdete ve zprávě k vydání verze.

Zkontrolujte, jestli proxy server ingestuje data.

Zkontrolujte, jestli proxy server úspěšně ingestuje metriky, a to kontrolou protokolů podů nebo dotazováním pracovního prostoru služby Azure Monitor.

Spuštěním následujících příkazů zkontrolujte protokoly podu:

# 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

Úspěšné ingestování metrik vytvoří protokol podobný StatusCode=200 následujícímu:

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

Pokud chcete dotazovat pracovní prostor služby Azure Monitor, postupujte následovně:

  1. V pracovním prostoru služby Azure Monitor vyberte Workbooks (Sešity ).

  2. Vyberte dlaždici Průzkumníka prometheus. A screenshot showing the workbooks gallery for an Azure Monitor workspace.

  3. Na stránce průzkumníka zadejte do pole dotazu.

  4. Výběrem karty Mřížka zobrazíte výsledky.

  5. Zkontrolujte sloupec clusteru a zkontrolujte, jestli se v clusteru zobrazuje. A screenshot showing the Prometheus explorer query page.

Parametry

Parametr obrázku Název parametru chartu Helm Popis Podporované hodnoty Povinné
TARGET_HOST targetHost Cílový hostitel, do kterého chcete požadavek přeposlat.
Při odesílání dat do pracovního prostoru Služby Azure Monitor použijte Metrics ingestion endpoint stránku Přehled pracovních prostorů.
Při čtení dat z pracovního prostoru Služby Azure Monitor použijte Query endpoint stránku Přehled pracovních prostorů.
Ano
IDENTITY_TYPE identityType Typ identity, který se používá k ověřování požadavků. Tento proxy server podporuje tři typy identit. systemassigned, userassigned, aadapplication Ano
AAD_CLIENT_ID aadClientId ID klienta použité identity. Používá se pro userassigned typy identit a aadapplication typy identit. Slouží az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile" k načtení ID klienta. Ano pro userassigned a aadapplication
AAD_TENANT_ID aadTenantId ID tenanta použité identity. ID tenanta se používá pro aadapplication typy identit. Ano pro aadapplication
AAD_CLIENT_CERTIFICATE_PATH aadClientCertificatePath Cesta, kde proxy může najít certifikát pro aadapplication. Tato cesta by měla být přístupná proxy serverem a měla by to být certifikát pfx nebo pem obsahující privátní klíč. Pouze pro aadapplication typy identit
AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE aadTokenRefreshIntervalInMinutes Token se aktualizuje na základě procenta času do vypršení platnosti tokenu. Výchozí hodnota je 10 % času před vypršením platnosti. No
AUDIENCE audience Cílová skupina tokenu No
LISTENING_PORT listeningPort Proxy naslouchá na tomto portu Ano
OTEL_SERVICE_NAME otelServiceName Název služby pro trasování a metriky OTEL Výchozí hodnota: aad_auth_proxy No
OTEL_GRPC_ENDPOINT otelGrpcEndpoint Proxy odešle telemetrii OTEL do tohoto koncového bodu. Výchozí hodnota: http://localhost:4317 No

Řešení problému

  • Kontejner proxy serveru se nespustí.
    Spuštěním následujícího příkazu zobrazte všechny chyby kontejneru proxy serveru.

    kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>`
    
  • Proxy se nespustí – chyby konfigurace

    Proxy zkontroluje platnou identitu pro načtení tokenu během spuštění. Pokud se nepodaří načíst token, spuštění selže. Chyby se protokolují a můžete je zobrazit spuštěním následujícího příkazu:

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

    Příklad výstupu:

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