Envoyer des données Prometheus à Azure Monitor en utilisant l’authentification Microsoft Entra Workload ID
Cet article explique comment configurer l’écriture à distance pour envoyer des données depuis votre cluster Prometheus managé par Azure Monitor en utilisant l’authentification Microsoft Entra Workload ID.
Prérequis
- Les versions de Prometheus supérieures à v2.48 sont nécessaires pour l'authentification de l'application Microsoft Entra ID.
- Prometheus s’exécutant dans le cluster. Cet article suppose que le cluster Prometheus est configuré en utilisant la pile kube-prometheus, mais vous pouvez configurer Prometheus avec d’autres méthodes.
Configurer une écriture à distance avec Microsoft Entra Workload ID
Le processus de configuration de l’écriture à distance de Prometheus en utilisant l’authentification Microsoft Entra Workload ID implique l’exécution des tâches suivantes :
- Activez OpenID Connect et notez l’URL de l’émetteur.
- Configurez le webhook d’admission mutant.
- Configurer une identité de charge de travail.
- Créer une application Microsoft Entra ou une identité managée affectée par l’utilisateur, et octroyer des autorisations.
- Attribuer à l’application le rôle Éditeur de métriques de monitoring sur la règle de collecte de données d’espace de travail.
- Créer ou mettre à jour le pod Prometheus de votre compte de service Kubernetes.
- Établir des informations d’identification d’identités fédérées entre l’identité et l’émetteur et le sujet du compte de service.
- Déployer un conteneur sidecar pour configurer l’écriture à distance.
Les tâches sont décrites dans les sections suivantes.
Activez OpenID Connect et envoyez une requête à l’émetteur
Pour activer OpenID Connect (OIDC) sur un cluster AKS, suivez les instructions listées dans Créer un fournisseur OpenID Connect sur AKS.
Une fois activé, notez SERVICE_ACCOUNT_ISSUER, qui est principalement l’URL de l’émetteur OIDC. Pour obtenir l’URL de l’émetteur OIDC, exécutez la commande az aks show. Remplacez les valeurs par défaut pour le nom du cluster et le nom du groupe de ressources.
az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv
Par défaut, l’émetteur est défini pour utiliser l’URL de base https://{region}.oic.prod-aks.azure.com
, où la valeur de {region}
correspond à l’emplacement de déploiement du cluster AKS.
Pour les autres clusters managés (Amazon Elastic Kubernetes Service et Google Kubernetes Engine), consultez Clusters managés – Microsoft Entra Workload ID. Pour les clusters autogérés, consultez Clusters autogérés – Microsoft Entra Workload ID.
Configurer le webhook d’admission mutant
Configurez le webhook d’admission mutant pour maintenir les informations d’identification fédérées à jour. Pour la configuration, consultez Webhook d’admission mutant : Microsoft Entra Workload ID.
Configurer l’identité de la charge de travail
Pour configurer l’identité de la charge de travail, exportez les variables d’environnement suivantes :
# [OPTIONAL] Set this if you're using a Microsoft Entra application
export APPLICATION_NAME="<your application name>"
# [OPTIONAL] Set this only if you're using a user-assigned managed identity
export USER_ASSIGNED_IDENTITY_NAME="<your user-assigned managed identity name>"
# Environment variables for the Kubernetes service account and federated identity credential
export SERVICE_ACCOUNT_NAMESPACE="<namespace where Prometheus pod is running>"
export SERVICE_ACCOUNT_NAME="<name of service account associated with Prometheus pod. See below for more details>"
export SERVICE_ACCOUNT_ISSUER="<your service account (or OIDC) issuer URL>"
Pour SERVICE_ACCOUNT_NAME
, vérifiez si un compte de service (distinct du compte de service par défaut) est déjà associé au pod Prometheus. Recherchez la valeur de serviceaccountName
ou de serviceAccount
(déconseillée) dans le spec
de votre pod Prometheus. Utilisez cette valeur si elle existe. Pour rechercher le compte de service associé au pod Prometheus, exécutez la commande kubectl ci-dessous :
kubectl get pods/<Promethuespodname> -o yaml
Si serviceaccountName
et serviceAccount
n’existent pas, entrez le nom du compte de service que vous voulez associer à votre pod Prometheus.
Créer une application Microsoft Entra ou une identité managée affectée par l’utilisateur, et octroyer des autorisations
Créez une application Microsoft Entra ou une identité managée affectée par l’utilisateur, et octroyez des autorisations de publier des métriques dans l’espace de travail Azure Monitor :
# create a Microsoft Entra application
az ad sp create-for-rbac --name "${APPLICATION_NAME}"
# create a user-assigned managed identity if you use a user-assigned managed identity for this article
az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}"
Attribuer à l’application ou à l’identité managée le rôle Éditeur de métriques de monitoring sur la règle de collecte de données d’espace de travail
Pour plus d’informations sur l’attribution du rôle, consultez Attribuer à l’identité managée le rôle Éditeur de métriques de monitoring sur la règle de collecte de données d’espace de travail.
Créer ou mettre à jour le pod Prometheus de votre compte de service Kubernetes
Souvent, un compte de service Kubernetes est créé et associé au pod exécutant le conteneur Prometheus. Si vous utilisez la pile kube-prometheus, le code crée automatiquement le compte de service prometheus-kube-prometheus-prometheus.
Si aucun compte de service Kubernetes n’est associé à Prometheus à l’exception du compte de service par défaut, créez un compte de service spécifiquement pour le pod exécutant Prometheus.
Pour créer le compte de service, exécutez la commande kubectl suivante :
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: service account
metadata:
annotations:
azure.workload.identity/client-id: ${APPLICATION_CLIENT_ID:-$USER_ASSIGNED_IDENTITY_CLIENT_ID}
name: ${SERVICE_ACCOUNT_NAME}
namespace: ${SERVICE_ACCOUNT_NAMESPACE}
EOF
Si un compte de service Kubernetes autre que le compte de service par défaut est associé à votre pod, ajoutez l’annotation suivante à votre compte de service :
kubectl annotate sa ${SERVICE_ACCOUNT_NAME} -n ${SERVICE_ACCOUNT_NAMESPACE} azure.workload.identity/client-id="${APPLICATION_OR_USER_ASSIGNED_IDENTITY_CLIENT_ID}" –overwrite
Si votre application Microsoft Entra ou votre identité managée affectée par l’utilisateur ne se trouve pas dans le même locataire que votre cluster, ajoutez l’annotation suivante à votre compte de service :
kubectl annotate sa ${SERVICE_ACCOUNT_NAME} -n ${SERVICE_ACCOUNT_NAMESPACE} azure.workload.identity/tenant-id="${APPLICATION_OR_USER_ASSIGNED_IDENTITY_TENANT_ID}" –overwrite
Établir des informations d’identification d’identités fédérées entre l’identité et l’émetteur et le sujet du compte de service
Créez des informations d’identification fédérées en utilisant Azure CLI.
Identité managée affectée par l’utilisateur
az identity federated-credential create \
--name "kubernetes-federated-credential" \
--identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--issuer "${SERVICE_ACCOUNT_ISSUER}" \
--subject "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}"
Application Microsoft Entra
# Get the ObjectID of the Microsoft Entra app.
export APPLICATION_OBJECT_ID="$(az ad app show --id ${APPLICATION_CLIENT_ID} --query id -otsv)"
# Add a federated identity credential.
cat <<EOF > params.json
{
"name": "kubernetes-federated-credential",
"issuer": "${SERVICE_ACCOUNT_ISSUER}",
"subject": "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}",
"description": "Kubernetes service account federated credential",
"audiences": [
"api://AzureADTokenExchange"
]
}
EOF
az ad app federated-credential create --id ${APPLICATION_OBJECT_ID} --parameters @params.json
Déployer un conteneur sidecar pour configurer l’écriture à distance
Important
Le pod Prometheus doit avoir l’étiquette suivante : azure.workload.identity/use: "true"
Le conteneur side-car d’écriture à distance requiert les valeurs d’environnement suivantes :
INGESTION_URL
: le point de terminaison d’ingestion des métriques tel qu’il apparaît sur la page Vue d’ensemble pour l’espace de travail Azure MonitorLISTENING_PORT
:8081
(tous les ports sont pris en charge)IDENTITY_TYPE
:workloadIdentity
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: <AKS-CLUSTER-NAME> podMetadata: labels: azure.workload.identity/use: "true" ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write remoteWrite: - url: 'http://localhost:8081/api/v1/write' containers: - name: prom-remotewrite image: <CONTAINER-IMAGE-VERSION> imagePullPolicy: Always ports: - name: rw-port containerPort: 8081 env: - name: INGESTION_URL value: <INGESTION_URL> - name: LISTENING_PORT value: '8081' - name: IDENTITY_TYPE value: workloadIdentity
Remplacez les valeurs suivantes dans le YAML :
Valeur Description <CLUSTER-NAME>
Le nom de votre cluster AKS. <CONTAINER-IMAGE-VERSION>
mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.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. Utilisez Helm pour appliquer le fichier YAML et mettre à jour votre configuration Prometheus :
# set a 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 Résolution des problèmes de l'écriture distante et le service géré pour Prometheus Azure Monitor pour l'écriture distante Prometheus.
Étapes suivantes
- Collecter des métriques Prometheus à partir du cluster AKS
- En savoir plus sur le service géré Azure Monitor pour Prometheus
- Écriture à distance dans le service managé Azure Monitor pour Prometheus
- Envoyer des données Prometheus à Azure Monitor en utilisant l’authentification Microsoft Entra
- Envoyer des données Prometheus à Azure Monitor en utilisant l’authentification avec une identité managée
- Envoyer des données Prometheus à Azure Monitor en utilisant l’authentification avec une identité managée par un pod Microsoft Entra