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.
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" }
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
, misalnyaMA_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"
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.
Tetapkan
Monitoring Metrics Publisher
peran ke identitasclientId
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
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 bagianMetrics 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 terkelolaclientId
yang digunakan yang diberiMonitoring Metrics Publisher
peran.AUDIENCE
- Untuk menyerap metrik ke Ruang Kerja Azure Monitor, aturAUDIENCE
kehttps://monitor.azure.com/.default
.- Hapus
OTEL_GRPC_ENDPOINT
danOTEL_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
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
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
Mengonfigurasi url tulis jarak jauh.
Nama host URL terdiri dari nama layanan penyerapan dan namespace layanan dalam format<ingestion service name>.<namespace>.svc.cluster.local
berikut . Dalam contoh ini, hostnya adalahazuremonitor-ingestion.observability.svc.cluster.local
.
Konfigurasikan jalur URL menggunakan jalur dariMetrics 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"
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:
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" } --------------------------------------------------------------------------------