Microsoft Entra 認可プロキシ
Microsoft Entra 認可プロキシはリバース プロキシであり、Microsoft Entra ID を使用する要求の認証に使用できます。 このプロキシは、Microsoft Entra 認証をサポートする任意のサービスへの要求を認証するために使用できます。 このプロキシを使用して、Prometheus 用 Azure Monitor マネージド サービスに対する要求を認証します。
注意事項
これは廃止された記事です。
プロキシ コンテナー のイメージと Helm チャートは、保守もサポートもされなくなりました。
前提条件
- Azure Monitor ワークスペース。 ワークスペースがない場合は、Azure portal を使用して作成します。
- クラスターにインストールされている Prometheus。
注意
この記事のリモート書き込みの例では、Prometheus リモート書き込みを使用して Azure Monitor にデータを書き込みます。 AKS クラスターを Prometheus にオンボードすると、Prometheus がクラスターに自動的にインストールされ、データがワークスペースに送信されます。
デプロイ
プロキシは、リリース イメージを使用したカスタム テンプレートで、または Helm チャートとしてデプロイできます。 どちらのデプロイにも、同じカスタマイズ可能なパラメーターが含まれています。 これらのパラメーターについては、パラメーター表で説明します。
詳細については、Microsoft Entra 認証プロキシ プロジェクトを参照してください。
リモート書き込みと Azure Monitor のデータのクエリ実行のためのプロキシのデプロイ方法を次の例に示します。
注意
この例は、プロキシを使用して、Prometheus 用 Azure Monitor マネージド サービスにリモート書き込みを行う要求を認証する方法を示しています。 Prometheus リモート書き込みには、リモート書き込みを実装するための推奨される方法であるリモート書き込み専用のサイド カーがあります。
プロキシをデプロイする前に、自分のマネージド ID を見つけて、Azure Monitor ワークスペースのデータ収集ルールに対する Monitoring Metrics Publisher
ロールを割り当てます。
ご使用の AKS クラスターのマネージド ID の
clientId
を見つけます。 マネージド ID は、Azure Monitor ワークスペースに対する認証に使用されます。 マネージド ID は、AKS クラスターの作成時に作成されます。# Get the identity client_id az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile"
出力の形式は次のとおりです。
{ "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" }
ご使用の Azure Monitor ワークスペースのデータ収集ルール (DCR) ID を見つけます。
ルール名はワークスペース名と同じです。 データ収集ルールのリソース グループ名は、MA_<workspace-name>_<REGION>_managed
の形式に従います (例:MA_amw-proxytest_eastus_managed
)。 次のコマンドを使用して、データ収集ルール ID を見つけます。az monitor data-collection rule show --name <dcr-name> --resource-group <resource-group-name> --query "id"
別の方法として、Azure Monitor ワークスペースの [概要] ページで Azure portal を使用して、DCR ID とメトリック インジェスト エンドポイントを見つけることができます。
ワークスペースの [概要] タブで [データ収集ルール] を選択し、[JSON ビュー] を選択して [リソース ID] を表示します。
マネージド ID の
clientId
が Azure Monitor ワークスペースのデータ収集ルールに書き込むことができるようにMonitoring Metrics Publisher
ロールを割り当てます。az role assignment create / --assignee <clientid> / --role "Monitoring Metrics Publisher" / --scope <workspace-dcr-id>
次に例を示します。
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
次の YAML ファイルを使用して、リモート書き込みのためのプロキシをデプロイします。 次のパラメーターを変更します。
TARGET_HOST
- 要求の転送先のターゲット ホスト。 Azure Monitor ワークスペースにデータを送信するには、ワークスペースの [概要] ページからMetrics ingestion endpoint
のホスト名部分を使用します。 たとえば、http://amw-proxytest-abcd.eastus-1.metrics.ingest.monitor.azure.com
のように指定します。AAD_CLIENT_ID
-Monitoring Metrics Publisher
ロールが割り当てられた、使用されるマネージド ID のclientId
。AUDIENCE
- メトリックを Azure Monitor ワークスペースに取り込むには、AUDIENCE
をhttps://monitor.azure.com/.default
に設定します。- OpenTelemetry を使用しない場合は、
OTEL_GRPC_ENDPOINT
とOTEL_SERVICE_NAME
を削除します。
パラメーターの詳細については、パラメーター表を参照してください。
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
次のようにコマンドを使用してプロキシをデプロイします。
# create the namespace if it doesn't already exist kubectl create namespace observability kubectl apply -f proxy-ingestion.yaml -n observability
別の方法として、次のように helm を使用してプロキシをデプロイできます。
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
リモート書き込み URL を構成します。
URL ホスト名は、インジェスト サービス名と名前空間から形式<ingestion service name>.<namespace>.svc.cluster.local
で構成されます。 この例では、ホストはazuremonitor-ingestion.observability.svc.cluster.local
です。
Azure Monitor ワークスペースの [概要] ページのMetrics ingestion endpoint
のパスを使用して URL パスを構成します。 たとえば、「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"
リモート書き込み構成を適用します。
注意
最新のプロキシ イメージ バージョンについては、リリース ノートを参照してください
プロキシがデータを取り込むことを確認する
ポッドのログを確認するか、Azure Monitor ワークスペースに対してクエリを実行して、プロキシがメトリックを正常に取り込むことを確認します。
次のコマンドを実行して、ポッドのログを確認します。
# 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
メトリックを正常に取り込むと、StatusCode=200
が含まれている次のようなログが生成されます。
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
Azure Monitor ワークスペースに対してクエリを実行するには、以下の手順に従います。
パラメーター
イメージのパラメーター | Helm チャートのパラメーター名 | 説明 | サポート状況の値 | Mandatory |
---|---|---|---|---|
TARGET_HOST |
targetHost |
要求の転送先のターゲット ホスト。 Azure Monitor ワークスペースにデータを送信するときは、ワークスペースの [概要] ページから Metrics ingestion endpoint を使用します。 Azure Monitor ワークスペースからデータを読み取るときは、ワークスペースの [概要] ページから Query endpoint を使用します |
はい | |
IDENTITY_TYPE |
identityType |
要求の認証に使用される ID の種類。 このプロキシは、3 種類の ID をサポートします。 | systemassigned 、 userassigned 、 aadapplication |
はい |
AAD_CLIENT_ID |
aadClientId |
使用される ID のクライアント ID。 これは、ID の種類 userassigned と aadapplication に使用されます。 クライアント ID の取得には az aks show -g <AKS-CLUSTER-RESOURCE-GROUP> -n <AKS-CLUSTER-NAME> --query "identityProfile" を使用します |
userassigned とaadapplication については、はい |
|
AAD_TENANT_ID |
aadTenantId |
使用される ID のテナント ID。 テナント ID は、ID の種類 aadapplication に使用されます。 |
aadapplication については、はい |
|
AAD_CLIENT_CERTIFICATE_PATH |
aadClientCertificatePath |
プロキシが aadapplication の証明書を検索できるパス。 このパスはプロキシからアクセスでき、秘密キーを含む pfx または pem 証明書である必要があります。 | ID の種類 aadapplication についてのみ |
|
AAD_TOKEN_REFRESH_INTERVAL_IN_PERCENTAGE |
aadTokenRefreshIntervalInMinutes |
トークンは、トークンの有効期限までの時間の割合に基づいて更新されます。 既定値は、有効期限の 10% 前です。 | いいえ | |
AUDIENCE |
audience |
トークンの対象ユーザー | いいえ | |
LISTENING_PORT |
listeningPort |
このポートでリッスンしているプロキシ | はい | |
OTEL_SERVICE_NAME |
otelServiceName |
OTEL トレースとメトリックのサービス名。 既定値: aad_auth_proxy | いいえ | |
OTEL_GRPC_ENDPOINT |
otelGrpcEndpoint |
プロキシは、このエンドポイントに OTEL テレメトリをプッシュします。 既定値:http://localhost:4317 | いいえ |
トラブルシューティング
プロキシ コンテナーが起動しない。
次のコマンドを実行して、プロキシ コンテナーのエラーを表示します。kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>`
プロキシが起動しない - 構成エラー
プロキシは、起動時にトークンをフェッチするための有効な ID を確認します。 トークンの取得に失敗した場合、起動は失敗します。 エラーはログに記録され、次のコマンドを実行して表示できます。
kubectl --namespace <Namespace> logs <Proxy-Pod-Name>
出力例:
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" } --------------------------------------------------------------------------------