Envoyer des données Prometheus à Azure Monitor en utilisant l’authentification Microsoft Entra

Cet article décrit comment configurer l’écriture à distance pour envoyer des données depuis un serveur Prometheus autogéré s’exécutant dans votre cluster Azure Kubernetes Service (AKS) ou dans votre cluster Kubernetes avec Azure Arc en utilisant l’authentification Microsoft Entra.

Configurations de cluster

Cet article s’applique aux configurations de cluster suivantes :

  • Cluster Azure Kubernetes Service
  • Cluster Kubernetes avec Azure Arc
  • Cluster Kubernetes s’exécutant dans un autre cloud ou en local

Remarque

Pour un cluster AKS ou un cluster Kubernetes avec Azure Arc, nous vous recommandons d’utiliser l’authentification avec une identité managée. Pour plus d’informations, consultez Service managé Azure Monitor pour l’écriture à distance Prometheus pour l’identité managée.

Prérequis

Les prérequis décrits dans Service managé Azure Monitor pour l’écriture à distance Prometheus s’appliquent aux processus décrits dans cet article.

Configurer une application pour Microsoft Entra ID

Le processus de configuration de l’écriture à distance de Prometheus pour une charge de travail en utilisant l’authentification Microsoft Entra implique d’effectuer les tâches suivantes :

  1. Enregistrer une application avec Microsoft Entra ID.
  2. Obtenez l’ID client de l’application Microsoft Entra.
  3. Attribuer à l’application le rôle Éditeur d’indicateurs de performance d’analyse sur la règle de collecte de données d’espace de travail.
  4. Créer un coffre de clés Azure et générer un certificat.
  5. Ajouter un certificat à l’application Microsoft Entra.
  6. Ajouter un pilote et un stockage CSI pour le cluster.
  7. Déployer un conteneur side-car pour configurer l’écriture à distance.

Les tâches sont décrites dans les sections suivantes.

Inscrire une application avec Microsoft Entra ID

Effectuez les étapes pour Inscrire une application auprès de Microsoft Entra ID et créer un principal de service.

Obtenir l’ID client de l’application Microsoft Entra

  1. Dans le portail Azure, accédez au menu Microsoft Entra ID, puis sélectionnez Inscriptions d’applications.
  2. Dans la liste des applications, copiez la valeur de ID d’application (client) pour l’application inscrite.

Screenshot that shows the application or client ID of a Microsoft Entra application.

Attribuer à l’application le rôle Éditeur d’indicateurs de performance d’analyse sur la règle de collecte de données d’espace de travail

L’application nécessite le rôle Éditeur d’indicateurs de performance d’analyse sur la règle de collecte de données associée à votre espace de travail Azure Monitor.

  1. Dans le menu des ressources de votre espace de travail Azure Monitor, sélectionnez Vue d’ensemble. Pour Règle de collecte de données, sélectionnez le lien.

    Screenshot that shows the data collection rule that's used by Azure Monitor workspace.

  2. Dans le menu des ressources de la règle de collecte de données, sélectionnez Contrôle d’accès (IAM).

  3. Sélectionnez Ajouter, puis sélectionnez Ajouter une attribution de rôle.

    Screenshot that shows adding a role assignment on Access control pages.

  4. Sélectionnez le rôle Éditeur d’indicateurs de performance d’analyse, puis sélectionnez Suivant.

    Screenshot that shows a list of role assignments.

  5. Sélectionnez Utilisateur, groupe ou principal de service, puis choisissez Sélectionner les membres. Sélectionnez l’application que vous avez créée, puis choisissez Sélectionner.

    Screenshot that shows selecting the application.

  6. Pour terminer le processus d’attribution de rôle, sélectionnez Vérifier + attribuer.

Créer un coffre de clés Azure et générer un certificat

  1. Si vous n’avez pas encore de coffre de clés Azure, créez un coffre.
  2. Créez un certificat en utilisant les instructions fournies dans Ajouter un certificat à un coffre de clés.
  3. Téléchargez le certificat au format CER en utilisant les instructions fournies dans Exporter un certificat depuis Key Vault.

Ajouter un certificat à l’application Microsoft Entra

  1. Dans le menu des ressources de votre application Microsoft Entra, sélectionnez Certificats et secrets.

  2. Sous l’onglet Certificats, sélectionnez Charger un certificat, puis sélectionnez le certificat que vous avez téléchargé.

    Screenshot that shows uploading a certificate for a Microsoft Entra application.

Avertissement

Les certificats ont une date d’expiration. Il incombe à l’utilisateur de veiller à la validité des certificats.

Ajouter un pilote et un stockage CSI pour le cluster

Remarque

La configuration du pilote CSI d’Azure Key Vault n’est qu’un des moyens d’obtenir un certificat monté sur un pod. Le conteneur d’écriture à distance a besoin d’un chemin d’accès local à un certificat dans le pod seulement pour la valeur de <AZURE_CLIENT_CERTIFICATE_PATH> à l’étape Déployer un conteneur side-car pour configurer l’écriture à distance.

Cette étape est nécessaire seulement si vous n’avez pas activé le fournisseur Azure Key Vault pour le pilote CSI du magasin de secrets lors de la création de votre cluster.

  1. Pour activer le fournisseur Azure Key Vault pour le pilote CSI du magasin de secrets de votre cluster, exécutez la commande Azure CLI suivante :

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. Pour accorder à l’identité l’accès au coffre de clés, exécutez les commandes suivantes :

    # show client id of the managed identity of the cluster
    az aks show -g <resource-group> -n <cluster-name> --query addonProfiles.azureKeyvaultSecretsProvider.identity.clientId -o tsv
    
    # set policy to access keys in your key vault
    az keyvault set-policy -n <keyvault-name> --key-permissions get --spn <identity-client-id>
    
    # set policy to access secrets in your key vault
    az keyvault set-policy -n <keyvault-name> --secret-permissions get --spn <identity-client-id>
    
    # set policy to access certs in your key vault
    az keyvault set-policy -n <keyvault-name> --certificate-permissions get --spn <identity-client-id>
    
  3. Créez un objet SecretProviderClass en enregistrant le code YAML suivant dans un fichier nommé secretproviderclass.yml. Remplacez les valeurs pour userAssignedIdentityID, keyvaultName, tenantId et les objets à récupérer auprès de votre coffre de clés. Pour plus d’informations sur les valeurs à utiliser, consultez Fournir une identité pour accéder au fournisseur Azure Key Vault pour le pilote CSI du magasin de secrets.

    # This is a SecretProviderClass example using user-assigned identity to access your key vault
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: azure-kvname-user-msi
    spec:
      provider: azure
      parameters:
        usePodIdentity: "false"
        useVMManagedIdentity: "true"          # Set to true for using managed identity
        userAssignedIdentityID: <client-id>   # Set the client ID of the user-assigned managed identity to use
        keyvaultName: <key-vault-name>        # Set to the name of your key vault
        cloudName: ""                         # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud
        objects:  |
          array:
            - |
              objectName: <name-of-cert>
              objectType: secret              # object types: secret, key, or cert
              objectFormat: pfx
              objectEncoding: base64
              objectVersion: ""
        tenantId: <tenant-id>                 # The tenant ID of the key vault
    
  4. Appliquez SecretProviderClass en exécutant la commande suivante sur votre cluster :

    kubectl apply -f secretproviderclass.yml
    

Déployer un conteneur side-car pour configurer l’écriture à distance

  1. Copiez le code YAML suivant et enregistrez-le dans un fichier. Le code YAML utilise le port 8081 comme port d’écoute. Si vous utilisez un autre port, modifiez cette valeur dans le YAML.

    prometheus:
      prometheusSpec:
        externalLabels:
          cluster: <CLUSTER-NAME>  
    
        ##	Azure Managed Prometheus currently exports some default mixins in Grafana.  
        ##  These mixins are compatible with data scraped by Azure Monitor agent on your 
        ##  Azure Kubernetes Service cluster. These mixins aren't compatible with Prometheus 
        ##  metrics scraped by the Kube Prometheus stack. 
        ##  To make these mixins compatible, uncomment the remote write relabel configuration below:
        ##	writeRelabelConfigs:
        ##	  - sourceLabels: [metrics_path]
        ##	    regex: /metrics/cadvisor
        ##	    targetLabel: job
        ##	    replacement: cadvisor
        ##	    action: replace
        ##	  - sourceLabels: [job]
        ##	    regex: 'node-exporter'
        ##	    targetLabel: job
        ##	    replacement: node
        ##	    action: replace  
        ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
        remoteWrite:
          - url: 'http://localhost:8081/api/v1/write'
        
        # Additional volumes on the output StatefulSet definition.
        # Required only for Microsoft Entra ID based auth
        volumes:
          - name: secrets-store-inline
            csi:
              driver: secrets-store.csi.k8s.io
              readOnly: true
              volumeAttributes:
                secretProviderClass: azure-kvname-user-msi
        containers:
          - name: prom-remotewrite
            image: <CONTAINER-IMAGE-VERSION>
            imagePullPolicy: Always
            # Required only for Microsoft Entra ID based auth
            volumeMounts:
              - name: secrets-store-inline
                mountPath: /mnt/secrets-store
                readOnly: true
            ports:
              - name: rw-port
                containerPort: 8081
            livenessProbe:
              httpGet:
                path: /health
                port: rw-port
                initialDelaySeconds: 10
                timeoutSeconds: 10
            readinessProbe:
              httpGet:
                path: /ready
                port: rw-port
                initialDelaySeconds: 10
                timeoutSeconds: 10
            env:
              - name: INGESTION_URL
                value: '<INGESTION_URL>'
              - name: LISTENING_PORT
                value: '8081'
              - name: IDENTITY_TYPE
                value: aadApplication
              - name: AZURE_CLIENT_ID
                value: '<APP-REGISTRATION-CLIENT-ID>'
              - name: AZURE_TENANT_ID
                value: '<TENANT-ID>'
              - name: AZURE_CLIENT_CERTIFICATE_PATH
                value: /mnt/secrets-store/<CERT-NAME>
              - name: CLUSTER
                value: '<CLUSTER-NAME>'
    
  2. Remplacez les valeurs suivantes dans le YAML :

    Valeur Description
    <CLUSTER-NAME> Le nom de votre cluster AKS.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/prometheus/promdev/prom-remotewrite:prom-remotewrite-20230906.1
    La version d’image conteneur d’écriture distante.
    <INGESTION-URL> La valeur pour Point de terminaison d’ingestion des métriques de la page Vue d’ensemble de l’espace de travail Azure Monitor.
    <APP-REGISTRATION -CLIENT-ID> L’ID client de votre application.
    <TENANT-ID> L’ID de locataire de l’application Microsoft Entra.
    <CERT-NAME> Nom du certificat.
    <CLUSTER-NAME> Le nom du cluster sur lequel Prometheus s’exécute.
  3. Ouvrez Azure Cloud Shell et chargez le fichier YAML.

  4. Utilisez Helm pour appliquer le fichier YAML et mettre à jour votre configuration Prometheus :

    # set the context to your cluster 
    az aks get-credentials -g <aks-rg-name> -n <aks-cluster-name> 
    
    # use Helm to update your remote write config 
    helm upgrade -f <YAML-FILENAME>.yml prometheus prometheus-community/kube-prometheus-stack -namespace <namespace where Prometheus pod resides> 
    

Vérification et résolution des problèmes

Pour plus d’informations sur la vérification et la résolution des problèmes, consultez Service managé Azure Monitor pour l’écriture à distance Prometheus.