Proksi otorisasi Microsoft Entra

Proksi otorisasi Microsoft Entra adalah proksi terbalik, yang dapat digunakan untuk mengautentikasi permintaan menggunakan ID Microsoft Entra. Proksi ini dapat digunakan untuk mengautentikasi permintaan ke layanan apa pun yang mendukung autentikasi Microsoft Entra. Gunakan proksi ini untuk mengautentikasi permintaan ke layanan terkelola Azure Monitor untuk Prometheus.

Prasyarat

  • Ruang kerja Azure Monitor. Jika Anda tidak memiliki ruang kerja, buat ruang kerja menggunakan portal Azure.
  • Prometheus diinstal pada kluster Anda.

Catatan

Contoh tulis jarak jauh dalam artikel ini menggunakan penulisan jarak jauh Prometheus untuk menulis data ke Azure Monitor. Onboarding kluster AKS Anda ke Prometheus secara otomatis menginstal Prometheus di kluster Anda dan mengirim data ke ruang kerja Anda.

Penyebaran

Proksi dapat disebarkan dengan templat kustom menggunakan gambar rilis atau sebagai bagan helm. Kedua penyebaran berisi parameter yang dapat disesuaikan yang sama. Parameter ini dijelaskan dalam tabel Parameter .

Untuk informasi selengkapnya, lihat Proyek proksi autentikasi Microsoft Entra.

Contoh berikut menunjukkan cara menyebarkan proksi untuk tulis jarak jauh dan untuk mengkueri data dari Azure Monitor.

Catatan

Contoh ini menunjukkan cara menggunakan proksi untuk mengautentikasi permintaan penulisan jarak jauh ke layanan terkelola Azure Monitor untuk Prometheus. Tulis jarak jauh Prometheus memiliki mobil samping khusus untuk penulisan jarak jauh yang merupakan metode yang direkomendasikan untuk menerapkan tulis jarak jauh.

Sebelum menyebarkan proksi, temukan identitas terkelola Anda dan tetapkan Monitoring Metrics Publisher peran untuk aturan pengumpulan data ruang kerja Azure Monitor.

  1. Temukan untuk identitas terkelola clientId untuk kluster AKS Anda. Identitas terkelola digunakan untuk mengautentikasi ke ruang kerja Azure Monitor. Identitas terkelola dibuat saat kluster AKS dibuat.

    # Get the identity client_id
    az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile"
    

    Output memiliki format berikut:

    {
      "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. Temukan ID aturan pengumpulan data (DCR) ruang kerja Azure Monitor Anda.
    Nama aturan sama dengan nama ruang kerja. Nama grup sumber daya untuk aturan pengumpulan data Anda mengikuti format: MA_<workspace-name>_<REGION>_managed, misalnya MA_amw-proxytest_eastus_managed. Gunakan perintah berikut untuk menemukan ID aturan pengumpulan data:

    az monitor data-collection rule show --name <dcr-name> --resource-group <resource-group-name> --query "id"
    
  3. Atau Anda dapat menemukan TITIK akhir penyerapan ID DCR dan Metrik menggunakan portal Azure di halaman Gambaran Umum ruang kerja Azure Monitor.

    Pilih Aturan pengumpulan data pada tab Gambaran Umum ruang kerja, lalu pilih tampilan JSON untuk melihat ID Sumber Daya.

    A screenshot showing the overview page for an Azure Monitor workspace.

  4. Tetapkan Monitoring Metrics Publisher peran ke identitas clientId terkelola sehingga dapat menulis ke aturan pengumpulan data ruang kerja Azure Monitor.

    az role assignment create /
    --assignee <clientid>  /
    --role "Monitoring Metrics Publisher" /
    --scope <workspace-dcr-id>
    

    Misalnya:

    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. Gunakan file YAML berikut untuk menyebarkan proksi untuk penulisan jarak jauh. Modifikasi parameter berikut:

    • TARGET_HOST - Host target tempat Anda ingin meneruskan permintaan. Untuk mengirim data ke ruang kerja Azure Monitor, gunakan bagian Metrics ingestion endpoint nama host dari halaman Gambaran Umum ruang kerja. Misalnya: http://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
    • AAD_CLIENT_ID - Identitas terkelola clientId yang digunakan yang diberi Monitoring Metrics Publisher peran.
    • AUDIENCE - Untuk menyerap metrik ke Ruang Kerja Azure Monitor, atur AUDIENCE ke https://monitor.azure.com/.default .
    • Hapus OTEL_GRPC_ENDPOINT dan OTEL_SERVICE_NAME jika Anda tidak menggunakan OpenTelemetry.

    Untuk informasi selengkapnya tentang parameter, lihat tabel Parameter .

    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. Sebarkan proksi menggunakan perintah:

    # create the namespace if it doesn't already exist
    kubectl create namespace observability 
    
    kubectl apply -f proxy-ingestion.yaml -n observability
    
  7. Atau Anda dapat menyebarkan proksi menggunakan helm sebagai berikut:

    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. Mengonfigurasi url tulis jarak jauh.
    Nama host URL terdiri dari nama layanan penyerapan dan namespace layanan dalam format <ingestion service name>.<namespace>.svc.cluster.localberikut . Dalam contoh ini, hostnya adalah azuremonitor-ingestion.observability.svc.cluster.local.
    Konfigurasikan jalur URL menggunakan jalur dari Metrics ingestion endpoint halaman Gambaran Umum ruang kerja Azure Monitor. Contohnya, 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. Terapkan konfigurasi tulis jarak jauh.

Catatan

Untuk versi gambar proksi terbaru, lihat catatan rilis

Periksa apakah proksi menyerap data

Periksa apakah proksi berhasil menyerap metrik dengan memeriksa log pod, atau dengan mengkueri ruang kerja Azure Monitor.

Periksa log pod dengan menjalankan perintah berikut:

# 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

Berhasil menyerap metrik menghasilkan log dengan mirip dengan StatusCode=200 yang berikut ini:

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

Untuk mengkueri ruang kerja Azure Monitor Anda, ikuti langkah-langkah di bawah ini:

  1. Dari ruang kerja Azure Monitor Anda, pilih Buku Kerja .

  2. Pilih petak peta Prometheus Explorer . A screenshot showing the workbooks gallery for an Azure Monitor workspace.

  3. Pada halaman penjelajah, masukkan ke dalam kotak kueri.

  4. Pilih tab Kisi untuk melihat hasilnya.

  5. Periksa kolom kluster untuk melihat apakah dari kluster Anda ditampilkan. A screenshot showing the Prometheus explorer query page.

Parameter

Parameter Gambar Nama Parameter bagan Helm Deskripsi Nilai yang Didukung Wajib
TARGET_HOST targetHost Host target tempat Anda ingin meneruskan permintaan.
Saat mengirim data ke ruang kerja Azure Monitor, gunakan Metrics ingestion endpoint dari halaman Gambaran Umum ruang kerja.
Saat membaca data dari ruang kerja Azure Monitor, gunakan Query endpoint dari halaman Gambaran Umum ruang kerja
Ya
IDENTITY_TYPE identityType Jenis identitas yang digunakan untuk mengautentikasi permintaan. Proksi ini mendukung tiga jenis identitas. systemassigned, userassigned, aadapplication Ya
AAD_CLIENT_ID aadClientId ID klien identitas yang digunakan. Ini digunakan untuk userassigned jenis identitas dan aadapplication . Gunakan az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile" untuk mengambil ID Klien Ya untuk userassigned dan aadapplication
AAD_TENANT_ID aadTenantId ID penyewa identitas yang digunakan. ID Penyewa digunakan untuk aadapplication jenis identitas. Ya untuk aadapplication
AAD_CLIENT_CERTIFICATE_PATH aadClientCertificatePath Jalur di mana proksi dapat menemukan sertifikat untuk aadapplication. Jalur ini harus dapat diakses oleh proksi dan harus berupa sertifikat pfx atau pem yang berisi kunci privat. Hanya untuk aadapplication jenis identitas
AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE aadTokenRefreshIntervalInMinutes Token di-refresh berdasarkan persentase waktu hingga token kedaluwarsa. Nilai default adalah 10% waktu sebelum kedaluwarsa. No
AUDIENCE audience Audiens untuk token No
LISTENING_PORT listeningPort Proksi mendengarkan port ini Ya
OTEL_SERVICE_NAME otelServiceName Nama layanan untuk jejak dan metrik OTEL. Nilai default: aad_auth_proxy No
OTEL_GRPC_ENDPOINT otelGrpcEndpoint Proksi mendorong telemetri OTEL ke titik akhir ini. Nilai default: http://localhost:4317 No

Pemecahan Masalah

  • Kontainer proksi tidak dimulai.
    Jalankan perintah berikut untuk menunjukkan kesalahan apa pun untuk kontainer proksi.

    kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>`
    
  • Proksi tidak dimulai - kesalahan konfigurasi

    Proksi memeriksa identitas yang valid untuk mengambil token selama startup. Jika gagal mengambil token, start up gagal. Kesalahan dicatat dan dapat dilihat dengan menjalankan perintah berikut:

    kubectl --namespace <Namespace> logs <Proxy-Pod-Name>
    

    Contoh output:

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