Proxy d’autorisation Microsoft Entra
Le proxy d’autorisation Microsoft Entra est un proxy inverse, qui peut être utilisé pour authentifier les requêtes à l’aide de Microsoft Entra ID. Ce proxy peut être utilisé pour s’authentifier auprès de n’importe quel service qui prend en charge l’authentification Microsoft Entra. Utilisez ce proxy pour authentifier les requêtes adressées au service géré Azure Monitor pour Prometheus.
Attention
Il s’agit d’un article supprimé.
L’image conteneur proxy et le graphique Helm ne sont plus conservés ou pris en charge.
Prérequis
- Un espace de travail Azure Monitor. Si vous ne disposez pas d’un espace de travail, vous pouvez en créer un sur le portail Azure.
- Vous avez installé Prometheus sur votre cluster.
Notes
L’exemple d’écriture à distance de cet article utilise l’écriture à distance Prometheus pour écrire les données dans Azure Monitor. L’intégration de votre cluster AKS à Prometheus installe automatiquement Prometheus sur votre cluster et envoie automatiquement des données à votre espace de travail.
Déploiement
Le proxy peut être déployé avec des modèles personnalisés à l’aide d’une image de mise en production ou d’un graphique Helm. Les deux déploiements contiennent les mêmes paramètres personnalisables. Ces paramètres sont décrits dans le tableau Paramètres.
Pour plus d’informations, consultez le projet Proxy d’authentification Microsoft Entra.
Les exemples suivants montrent comment déployer le proxy pour l’écriture à distance et pour l’interrogation des données à partir d’Azure Monitor.
Notes
Cet exemple montre comment utiliser le proxy pour authentifier les demandes d’écriture à distance auprès d’un service géré Azure Monitor pour Prometheus. L’écriture à distance Prometheus dispose d’une fonction compagnon dédiée à l’écriture à distance, qui est la méthode recommandée pour l’implémentation de l’écriture à distance.
Avant de déployer le proxy, recherchez votre identité managée et attribuez-lui le rôle Monitoring Metrics Publisher
pour la règle de collecte de données de l’espace de travail Azure Monitor.
Recherchez
clientId
pour l’identité managée pour votre cluster AKS. L’identité managée est utilisée pour s’authentifier auprès de l’espace de travail Azure Monitor. L’identité managée est créée lors de la création du cluster AKS.# Get the identity client_id az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile"
La sortie a le format suivant :
{ "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" }
Recherchez l’ID de règle de collecte de données (DCR) de votre espace de travail Azure Monitor.
Le nom de la règle est identique au nom de l’espace de travail. Le nom du groupe de ressources pour votre règle de collecte de données suit le format :MA_<workspace-name>_<REGION>_managed
, par exempleMA_amw-proxytest_eastus_managed
. Utilisez la commande suivante pour rechercher l’ID de règle de collecte de données :az monitor data-collection rule show --name <dcr-name> --resource-group <resource-group-name> --query "id"
Vous pouvez également trouver votre ID DCR et votre point de terminaison d’ingestion de métriques à l’aide du portail Azure sur la page Vue d’ensemble de l’espace de travail Azure Monitor.
Sélectionnez la règle de collecte de données sous l’onglet Vue d’ensemble de l’espace de travail, puis sélectionnez vue JSON pour afficher l’ID de ressource.
Attribuez le rôle
Monitoring Metrics Publisher
au composantclientId
de l’identité managée pour qu’il puisse écrire dans la règle de collecte de données de l’espace de travail Azure Monitor.az role assignment create / --assignee <clientid> / --role "Monitoring Metrics Publisher" / --scope <workspace-dcr-id>
Par exemple :
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
Utilisez le fichier YAML suivant pour déployer le proxy pour l’écriture à distance. Modifiez les paramètres suivants :
TARGET_HOST
– Hôte cible vers lequel vous souhaitez transférer la demande. Pour envoyer des données à un espace de travail Azure Monitor, utilisez la partie nom d’hôte duMetrics ingestion endpoint
à partir de la page Vue d’ensemble des espaces de travail. Par exemple,http://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
AAD_CLIENT_ID
– Le composantclientId
de l’identité managée utilisée auquel le rôleMonitoring Metrics Publisher
a été attribué.AUDIENCE
– Pour ingérer des métriques dans l’espace de travail Azure Monitor, définissezAUDIENCE
surhttps://monitor.azure.com/.default
.- Supprimez
OTEL_GRPC_ENDPOINT
etOTEL_SERVICE_NAME
si vous n’utilisez pas OpenTelemetry.
Pour en savoir plus sur les paramètres, consultez le tableau Paramètres.
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
Déployez le proxy à l’aide des commandes :
# create the namespace if it doesn't already exist kubectl create namespace observability kubectl apply -f proxy-ingestion.yaml -n observability
Vous pouvez également déployer le proxy à l’aide de helm comme suit :
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
Configurez l’url d’écriture à distance.
Le nom d’hôte de l’URL est constitué du nom du service d’ingestion et de l’espace de noms au format suivant<ingestion service name>.<namespace>.svc.cluster.local
. Dans cet exemple, l’hôte estazuremonitor-ingestion.observability.svc.cluster.local
.
Configurez le chemin d’URL à l’aide du chemin d’accès duMetrics ingestion endpoint
à partir de la page Vue d’ensemble de l’espace de travail Azure Monitor. Par exemple :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"
Appliquez la configuration d’écriture à distance.
Notes
Pour connaître la dernière version de l’image du proxy, consultez les notes de publication
Vérifier que le proxy ingère des données
Assurez-vous que le proxy ingère correctement les métriques en vérifiant les journaux du pod ou en interrogeant l’espace de travail Azure Monitor.
Vérifiez les journaux du pod en exécutant les commandes suivantes :
# 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’ingestion réussie des métriques produit un journal avec StatusCode=200
similaire à ce qui suit :
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
Pour interroger votre espace de travail Azure Monitor, procédez comme suit :
Paramètres
Paramètre de l’image | Graphique Helm Nom du paramètre | Description | Valeurs prises en charge | Obligatoire |
---|---|---|---|---|
TARGET_HOST |
targetHost |
Hôte cible vers lequel vous souhaitez transférer la requête. Lorsque vous envoyez des données à un espace de travail Azure Monitor, utilisez Metrics ingestion endpoint à partir de la page Vue d’ensemble des espaces de travail. Lorsque vous lisez des données à partir d’un espace de travail Azure Monitor, utilisez Query endpoint à partir de la page Vue d’ensemble des espaces de travail. |
Oui | |
IDENTITY_TYPE |
identityType |
Type d’identité utilisé pour authentifier les requêtes. Ce proxy prend en charge trois types d’identités. | systemassigned , , userassigned aadapplication |
Oui |
AAD_CLIENT_ID |
aadClientId |
ID client de l’identité utilisée. Il est utilisé pour les types d’identités userassigned et aadapplication . Utiliser az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile" pour récupérer l’ID client |
Oui pour userassigned et aadapplication |
|
AAD_TENANT_ID |
aadTenantId |
ID de locataire de l’identité utilisée. L’ID de locataire est utilisé pour les types d’identité aadapplication . |
Oui pour aadapplication |
|
AAD_CLIENT_CERTIFICATE_PATH |
aadClientCertificatePath |
Chemin d’accès où le proxy peut trouver le certificat pour aadapplication. Ce chemin doit être accessible par proxy et doit être un certificat pfx ou pem contenant une clé privée. | Pour les types d’identité aadapplication uniquement |
|
AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE |
aadTokenRefreshIntervalInMinutes |
Le jeton est actualisé en fonction du pourcentage de temps jusqu’à l’expiration du jeton. La valeur par défaut est de 10 % du temps avant l’expiration. | Non | |
AUDIENCE |
audience |
Audience du jeton | Non | |
LISTENING_PORT |
listeningPort |
Écoute du proxy sur ce port | Oui | |
OTEL_SERVICE_NAME |
otelServiceName |
Nom du service pour les traces et les métriques OTEL. Valeur par défaut : aad_auth_proxy | Non | |
OTEL_GRPC_ENDPOINT |
otelGrpcEndpoint |
Le proxy envoie (push) les données de télémétrie OTEL à ce point de terminaison. Valeur par défaut : http://localhost:4317 | Non |
Dépannage
Le conteneur de proxy ne démarre pas.
Exécutez la commande suivante pour afficher les erreurs éventuelles pour le conteneur de proxy.kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>`
Le proxy ne démarre pas : erreurs de configuration
Le proxy recherche une identité valide pour récupérer un jeton au démarrage. S’il ne parvient pas à récupérer un jeton, le démarrage échoue. Les erreurs sont journalisées et peuvent être consultées en exécutant la commande suivante :
kubectl --namespace <Namespace> logs <Proxy-Pod-Name>
Exemple de sortie :
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" } --------------------------------------------------------------------------------