Compartilhar via


Proxy de autorização do Microsoft Entra

O proxy de autorização do Microsoft Entra é um proxy reverso, que pode ser usado para autenticar solicitações usando o Microsoft Entra ID. Esse proxy pode ser usado para autenticar solicitações de qualquer serviço com suporte para autenticação do Microsoft Entra. Use esse proxy para autenticar solicitações no serviço gerenciado para Prometheus do Azure Monitor.

Cuidado

Este é um artigo retirado.
A imagem do contêiner de proxy e o gráfico do helm não são mais mantidos ou suportados.

Pré-requisitos

  • Um workspace do Azure Monitor. Caso não tenha um workspace, crie um usando o portal do Azure.
  • Prometheus instalado no seu cluster.

Observação

O exemplo de gravação remota neste artigo usa a gravação remota do Prometheus para gravar dados no Azure Monitor. A integração do cluster do AKS ao Prometheus instala automaticamente o Prometheus no cluster e envia dados para o workspace.

Implantação

O proxy pode ser implantado com modelos personalizados usando a imagem de versão ou como um gráfico helm. As duas implantações contêm os mesmos parâmetros personalizáveis. Esses parâmetros são descritos na tabela Parâmetros.

Para obter mais informações, consulte o projeto Proxy de autenticação do Microsoft Entra.

Os exemplos a seguir mostram como implantar o proxy para gravação remota e para consultar dados do Azure Monitor.

Observação

Este exemplo mostra como usar o proxy para autenticar solicitações de gravação remota em um serviço gerenciado para Prometheus do Azure Monitor. A gravação remota do Prometheus tem um sidecar dedicado para gravação remota, que é o método recomendado para implementar a gravação remota.

Antes de implantar o proxy, localize sua identidade gerenciada e atribua a ela a função Monitoring Metrics Publisher para a regra de coleta de dados do workspace do Azure Monitor.

  1. Localize o clientId para a identidade gerenciada para o cluster do AKS. A identidade gerenciada é usada para autenticar-se no workspace do Azure Monitor. A identidade gerenciada é criada quando o cluster do AKS é criado.

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

    A saída tem o seguinte formato:

    {
      "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. Localize a ID da DCR (regra de coleta de dados) do workspace do Azure Monitor.
    O nome da regra e o nome do workspace são os mesmos. O nome do grupo de recursos para sua regra de coleta de dados segue o formato: MA_<workspace-name>_<REGION>_managed, por exemplo MA_amw-proxytest_eastus_managed. Use o seguinte comando para localizar a ID da regra de coleta de dados:

    az monitor data-collection rule show --name <dcr-name> --resource-group <resource-group-name> --query "id"
    
  3. Como alternativa, você pode encontrar sua ID de DCR e o ponto de extremidade de ingestão de métricas usando o portal do Azure na página Visão geral do workspace do Azure Monitor.

    Selecione a regra Coleta de dados na guia de visão geral do workspace e selecione Exibição JSON para exibir a ID do recurso.

    Captura de tela mostrando a página de visão geral para um workspace do Azure Monitor.

  4. Atribua a função Monitoring Metrics Publisher à identidade gerenciada clientId para que ela possa gravar na regra de coleta de dados do workspace do Azure Monitor.

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

    Por exemplo:

    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. Use o arquivo YAML a seguir para implantar o proxy para gravação remota. Modifique os parâmetros a seguir:

    • TARGET_HOST – O host de destino para o qual você quer encaminhar a solicitação. Para enviar dados para um workspace do Azure Monitor, use a parte do nome do host de Metrics ingestion endpoint da página de visão geral dos workspaces. Por exemplo, http://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
    • AAD_CLIENT_ID – O clientId da identidade gerenciada usada que recebeu a função Monitoring Metrics Publisher.
    • AUDIENCE – Para ingerir métricas no workspace do Azure Monitor, defina AUDIENCE como https://monitor.azure.com/.default.
    • Remova OTEL_GRPC_ENDPOINT e OTEL_SERVICE_NAME se você não estiver usando OpenTelemetry.

    Para obter mais informações sobre os parâmetros, confira a tabela Parâmetros.

    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. Implante o proxy usando comandos:

    # create the namespace if it doesn't already exist
    kubectl create namespace observability 
    
    kubectl apply -f proxy-ingestion.yaml -n observability
    
  7. Como alternativa, você pode implantar o proxy usando o Helm da seguinte maneira:

    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. Configurar URL de gravação remota.
    O nome do host da URL é composto pelo nome do serviço de ingestão e pelo namespace no formato <ingestion service name>.<namespace>.svc.cluster.local a seguir. Neste exemplo, o host é azuremonitor-ingestion.observability.svc.cluster.local.
    Configure o caminho da URL usando o caminho de Metrics ingestion endpoint da página de visão geral do workspace do Azure Monitor. Por exemplo, 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. Aplicar a configuração de gravação remota.

Observação

Para obter a versão mais recente da imagem proxy, confira as notas sobre a versão

Verificar se o proxy está ingerindo dados

Verifique se o proxy está ingerindo métricas com êxito verificando os logs do pod ou consultando o workspace do Azure Monitor.

Verificar os logs do pod executando os seguintes comandos:

# 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

A ingestão de métricas com êxito produz um log com StatusCode=200 semelhante ao seguinte:

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

Para consultar seu workspace do Azure Monitor, siga as etapas abaixo:

  1. No seu workspace do Azure Monitor, selecione Pastas de Trabalho.

  2. Selecione o bloco Prometheus Explorer. Captura de tela mostrando a galeria de pastas de trabalho para um workspace do Azure Monitor.

  3. Na página do explorer, insira ativo na caixa de consulta.

  4. Escolha a guia Grade para exibir os resultados.

  5. Verifique a coluna do cluster para conferir se o cluster está sendo exibido. Uma captura de tela mostrando a página de consulta do Prometheus Explorer.

Parâmetros

Parâmetro Imagem Nome de parâmetro do gráfico Helm Descrição Valores com suporte Obrigatório
TARGET_HOST targetHost O host de destino para o qual você deseja encaminhar a solicitação.
Ao enviar dados para um workspace do Azure Monitor, use Metrics ingestion endpoint da página de visão geral dos workspaces.
Ao ler dados de um workspace do Azure Monitor, use Query endpoint da página de visão geral dos workspaces
Yes
IDENTITY_TYPE identityType Tipo de identidade usado para autenticar solicitações. Esse proxy dá suporte a três tipos de identidades. systemassigned, userassigned, aadapplication Sim
AAD_CLIENT_ID aadClientId A ID do cliente da identidade usada. Isso é usado para tipos de identidade userassigned e aadapplication. Usar az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile" para recuperar a ID do cliente Sim para userassigned e aadapplication
AAD_TENANT_ID aadTenantId A ID do locatário da identidade usada. A ID do locatário é usada para tipos de identidade aadapplication. Sim para aadapplication
AAD_CLIENT_CERTIFICATE_PATH aadClientCertificatePath O caminho em que o proxy pode encontrar o certificado para aplicativo do AAD. Esse caminho deve ser acessível por proxy e deve ser um certificado pfx ou pem que contém chave privada. Somente para tipos de identidade aadapplication
AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE aadTokenRefreshIntervalInMinutes O token é atualizado com base no percentual de tempo até a expiração do token. O valor padrão é 10% antes da expiração. No
AUDIENCE audience Público-alvo do token No
LISTENING_PORT listeningPort Proxy escutando nesta porta Sim
OTEL_SERVICE_NAME otelServiceName Nome do serviço para rastreamentos e métricas OTEL. Valor padrão: aad_auth_proxy No
OTEL_GRPC_ENDPOINT otelGrpcEndpoint O proxy envia por push a telemetria OTEL para esse ponto de extremidade. Valor padrão: http://localhost:4317 No

Solução de problemas

  • O contêiner proxy não é iniciado.
    Execute o comando a seguir para mostrar todos os erros para o contêiner proxy.

    kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>`
    
  • O proxy não é iniciado – erros de configuração

    O proxy verifica se há uma identidade válida para buscar um token durante a inicialização. Se ele não conseguir recuperar um token, a inicialização falhará. Os erros são registrados e podem ser exibidos executando o seguinte comando:

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

    Saída de exemplo:

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