Microsoft Entra İş Yükü Kimliği kimlik doğrulamasını kullanarak Prometheus verilerini Azure İzleyici'ye gönderme

Bu makalede, Microsoft Entra İş Yükü Kimliği kimlik doğrulaması kullanarak Azure İzleyici tarafından yönetilen Prometheus kümenizden veri göndermek için uzaktan yazmanın nasıl ayarlanacağı açıklanır.

Önkoşullar

  • Microsoft Entra ID uygulama kimlik doğrulaması için v2.48'den büyük Prometheus sürümleri gereklidir.
  • Kümede çalışan Prometheus. Bu makalede, Prometheus kümesinin kube-prometheus yığını kullanılarak ayarlandığı varsayılır, ancak prometheus'ı diğer yöntemleri kullanarak ayarlayabilirsiniz.

Microsoft Entra İş Yükü Kimliği ile uzaktan yazmayı ayarlama

Microsoft Entra İş Yükü Kimliği kimlik doğrulamasını kullanarak Prometheus uzaktan yazmayı ayarlama işlemi aşağıdaki görevleri tamamlayı içerir:

  1. OpenID Connect'i etkinleştirin ve verenIN URL'sini not edin.
  2. Erişim web kancasını sessize alın.
  3. İş yükü kimliğini ayarlayın.
  4. Bir Microsoft Entra uygulaması veya kullanıcı tarafından atanan yönetilen kimlik oluşturun ve izinler verin.
  5. Çalışma alanı veri toplama kuralındaki İzleme Ölçümleri Yayımcısı rolünü uygulamaya atayın.
  6. Kubernetes hizmet hesabınızın Prometheus podunu oluşturun veya güncelleştirin.
  7. Kimlik ile hizmet hesabı veren ve konu arasında federasyon kimliği kimlik bilgileri oluşturun.
  8. Uzaktan yazma ayarlamak için bir sepet kapsayıcısı dağıtın.

Görevler aşağıdaki bölümlerde açıklanmıştır.

OpenID Connect'i etkinleştirme ve Vereni sorgulama

Aks kümesinde OpenID Connect'i (OIDC) etkinleştirmek için AKS'de OpenID Connect sağlayıcısı oluşturma başlığındaki yönergeleri izleyin.

Etkinleştirildikten sonra, temelde OIDC veren URL'si olan SERVICE_ACCOUNT_ISSUER not edin. OIDC veren URL'sini almak için az aks show komutunu çalıştırın. Küme adı ve kaynak grubu adı için varsayılan değerleri değiştirin.

az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv

Veren varsayılan olarak, değerinin AKS kümesinin dağıtıldığı konumla eşleştiği {region} temel URL'yi https://{region}.oic.prod-aks.azure.comkullanacak şekilde ayarlanır.

Diğer yönetilen kümeler (Amazon Elastic Kubernetes Service ve Google Kubernetes Engine) için bkz. Yönetilen Kümeler - Microsoft Entra İş Yükü Kimliği. Kendi kendine yönetilen kümeler için bkz. Kendi Kendine Yönetilen Kümeler - Microsoft Entra İş Yükü Kimliği.

Kapatma erişim web kancasını ayarlama

Federasyon kimlik bilgilerini güncel tutmak için kapatma erişim web kancasını ayarlayın. Bkz. Erişim Web Kancasını Kapatma - ayarlamak için Microsoft Entra İş Yükü Kimliği.

İş yükü kimliğini ayarlama

İş yükü kimliğini ayarlamak için aşağıdaki ortam değişkenlerini dışarı aktarın:

# [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>"

içinSERVICE_ACCOUNT_NAME, bir hizmet hesabının (varsayılan hizmet hesabından ayrı) Prometheus poduyla zaten ilişkili olup olmadığını denetleyin. Prometheus podunuzun veya serviceAccount (kullanım dışı) spec değerini serviceaccountName arayın. Varsa bu değeri kullanın. Prometheus poduyla ilişkili hizmet hesabını bulmak için aşağıdaki kubectl komutunu çalıştırın:

kubectl get pods/<Promethuespodname> -o yaml

Varsa serviceaccountName ve serviceAccount yoksa, Prometheus podunuzla ilişkilendirmek istediğiniz hizmet hesabının adını girin.

Microsoft Entra uygulaması veya kullanıcı tarafından atanan yönetilen kimlik oluşturma ve izinler verme

Bir Microsoft Entra uygulaması veya kullanıcı tarafından atanan yönetilen kimlik oluşturun ve ölçümleri Azure İzleyici çalışma alanında yayımlama izni verin:

# 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}"

Çalışma alanı veri toplama kuralındaki İzleme Ölçümleri Yayımcısı rolünü uygulamaya veya yönetilen kimliğe atama

Rolü atama hakkında bilgi için bkz . Çalışma alanı veri toplama kuralında İzleme Ölçümleri Yayımcısı rolünü yönetilen kimliğe atama.

Kubernetes hizmet hesabınızı Prometheus pod'unuzu oluşturma veya güncelleştirme

Genellikle bir Kubernetes hizmet hesabı oluşturulur ve Prometheus kapsayıcısını çalıştıran podla ilişkilendirilir. kube-prometheus yığınını kullanıyorsanız kod otomatik olarak prometheus-kube-prometheus-prometheus hizmet hesabını oluşturur.

Varsayılan hizmet hesabı Prometheus ile ilişkilendirildiğinden başka Kubernetes hizmet hesabı yoksa, Prometheus çalıştıran pod için özel olarak yeni bir hizmet hesabı oluşturun.

Hizmet hesabını oluşturmak için aşağıdaki kubectl komutunu çalıştırın:

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

Podunuzla varsayılan hizmet hesabı dışında bir Kubernetes hizmet hesabı ilişkilendiriliyorsa, hizmet hesabınıza aşağıdaki ek açıklamayı ekleyin:

kubectl annotate sa ${SERVICE_ACCOUNT_NAME} -n ${SERVICE_ACCOUNT_NAMESPACE} azure.workload.identity/client-id="${APPLICATION_OR_USER_ASSIGNED_IDENTITY_CLIENT_ID}" –overwrite

Microsoft Entra uygulamanız veya kullanıcı tarafından atanan yönetilen kimliğiniz kümenizle aynı kiracıda değilse hizmet hesabınıza aşağıdaki ek açıklamayı ekleyin:

kubectl annotate sa ${SERVICE_ACCOUNT_NAME} -n ${SERVICE_ACCOUNT_NAMESPACE} azure.workload.identity/tenant-id="${APPLICATION_OR_USER_ASSIGNED_IDENTITY_TENANT_ID}" –overwrite

Kimlik ile hizmet hesabı veren ve konu arasında federasyon kimliği kimlik bilgileri oluşturma

Azure CLI'yi kullanarak federasyon kimlik bilgileri oluşturun.

Kullanıcı tarafından atanan yönetilen kimlik

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

Microsoft Entra uygulaması

# 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

Uzaktan yazma ayarlamak için sepet kapsayıcısı dağıtma

Önemli

Prometheus podunun aşağıdaki etikete sahip olması gerekir: azure.workload.identity/use: "true"

Uzaktan yazma sepet kapsayıcısı aşağıdaki ortam değerlerini gerektirir:

  • INGESTION_URL: Azure İzleyici çalışma alanının Genel Bakış sayfasında gösterilen ölçüm alımı uç noktası
  • LISTENING_PORT: 8081 (herhangi bir bağlantı noktası desteklenir)
  • IDENTITY_TYPE: workloadIdentity
  1. Aşağıdaki YAML'yi kopyalayın ve bir dosyaya kaydedin. YAML, dinleme bağlantı noktası olarak 8081 numaralı bağlantı noktasını kullanır. Farklı bir bağlantı noktası kullanıyorsanız YAML'de bu değeri değiştirin.

    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
    
  2. YAML'de aşağıdaki değerleri değiştirin:

    Value Açıklama
    <CLUSTER-NAME> AKS kümenizin adı.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    Uzaktan yazma kapsayıcı görüntüsü sürümü.
    <INGESTION-URL> Azure İzleyici çalışma alanının Genel Bakış sayfasından Ölçüm alımı uç noktasının değeri.
  3. YAML dosyasını uygulamak ve Prometheus yapılandırmanızı güncelleştirmek için Helm'i kullanın:

    # 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> 
    

Doğrulama ve sorun giderme

Doğrulama ve sorun giderme bilgileri için bkz. Prometheus uzaktan yazma için uzaktan yazma ve Azure İzleyici yönetilen hizmeti sorunlarını giderme.

Sonraki adımlar