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.
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" }
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 exemploMA_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"
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.
Atribua a função
Monitoring Metrics Publisher
à identidade gerenciadaclientId
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
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 deMetrics 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
– OclientId
da identidade gerenciada usada que recebeu a funçãoMonitoring Metrics Publisher
.AUDIENCE
– Para ingerir métricas no workspace do Azure Monitor, definaAUDIENCE
comohttps://monitor.azure.com/.default
.- Remova
OTEL_GRPC_ENDPOINT
eOTEL_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
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
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
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 deMetrics 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"
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:
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" } --------------------------------------------------------------------------------