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.

  1. 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"
      }
    
  2. 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 exemple MA_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"
    
  3. 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.

    Capture d’écran montrant la page Vue d’ensemble pour un espace de travail Azure Monitor.

  4. Attribuez le rôle Monitoring Metrics Publisher au composant clientId 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
    
  5. 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 du Metrics 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 composant clientId de l’identité managée utilisée auquel le rôle Monitoring Metrics Publisher a été attribué.
    • AUDIENCE – Pour ingérer des métriques dans l’espace de travail Azure Monitor, définissez AUDIENCE sur https://monitor.azure.com/.default.
    • Supprimez OTEL_GRPC_ENDPOINT et OTEL_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
    
  6. 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
    
  7. 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
    
  8. 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 est azuremonitor-ingestion.observability.svc.cluster.local.
    Configurez le chemin d’URL à l’aide du chemin d’accès du Metrics 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" 
    
  9. 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 :

  1. Dans votre espace de travail Azure Monitor, sélectionnez Workbooks.

  2. Sélectionnez la vignette Prometheus Explorer. Capture d’écran montrant la galerie de classeurs pour un espace de travail Azure Monitor.

  3. Dans la page de l’explorateur, entrez haut dans la zone de requête.

  4. Sélectionnez l’onglet Grille pour voir les résultats.

  5. Vérifiez la colonne Cluster pour voir si les données de votre cluster sont affichées. Capture d’écran montrant la page de requête de Prometheus Explorer.

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