Application Insights 用 Microsoft Entra 認証

Application Insights で Microsoft Entra 認証がサポートされるようになりました。 Microsoft Entra ID を使用することで、認証されたテレメトリのみが Application Insights リソースに取り込まれるようすることができます。

さまざまな認証システムを使用すると、資格情報の管理が困難なため、煩雑であり、リスクも高まります。 ローカル認証の無効化を選択して、マネージド IDMicrosoft Entra ID を使用して排他的に認証されたテレメトリのみをリソースに取り込むようにすることが可能になりました。 この機能は、重要な運用上 (アラート自動スケーリング) とビジネス上の決定を行うために使用されるテレメトリのセキュリティと信頼性を強化するためのステップです。

Note

このドキュメントは、Microsoft Entra ID ベースの認証を使用した Application Insights へのデータ インジェストについて取り上げています。 Application Insights 内のデータに対するクエリの実行については、「Microsoft Entra認証を使用して Application Insights に対するクエリを実行する」を参照してください。

前提条件

Microsoft Entra 認証済みのインジェストを有効にするには、次の準備作業が必要です。 以下を実行する必要があります。

サポートされていないシナリオ

次のソフトウェア開発キット (SDK) と機能は、Microsoft Entra 認証インジェストでの使用がサポートされていません。

Microsoft Entra ID ベースの認証を構成して有効にする

  1. ID がまだない場合は、マネージド ID またはサービス プリンシパルを使用して作成します。

    • マネージド ID を使用することをお勧めします。

      Azure サービスのマネージド ID を設定します (Virtual Machines または App Service)。

    • サービス プリンシパルを使用することはお勧めしません。

      リソースにアクセスできる Microsoft Entra アプリケーションとサービス プリンシパルの作成方法の詳細については、サービス プリンシパルの作成に関するページを参照してください。

  2. Azure サービスにロールを割り当てます。

    Azure ロールの割り当てに関するページの手順に従って、ターゲットの Application Insights リソースからテレメトリの送信元の Azure リソースに、監視メトリック発行者ロールを追加します。

    注意

    監視メトリック発行者ロールの名前には、"メトリック" が含まれていますが、すべてのテレメトリを Application Insights リソースに発行します。

  3. 次の言語に合わせて、構成ガイダンスに従います。

Note

Application Insights .NET SDK での Microsoft Entra ID のサポートは、バージョン 2.18-Beta3 以降に含まれています。

Application Insights .NET SDK では、Azure Identity によって提供される資格情報クラスがサポートされています。

  • ローカル開発には DefaultAzureCredential をお勧めします。
  • システム割り当ておよびユーザー割り当てのマネージド ID には ManagedIdentityCredential をお勧めします。
    • システム割り当ての場合は、パラメーターを指定せずに既定のコンストラクターを使用します。
    • ユーザー割り当ての場合は、クライアント ID をコンストラクターに渡します。

次の例は、.NET を使用して手動で TelemetryConfiguration を作成および構成する方法を示しています。

TelemetryConfiguration.Active.ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/";
var credential = new DefaultAzureCredential();
TelemetryConfiguration.Active.SetAzureTokenCredential(credential);

次の例は、.NET Core を使用して TelemetryConfiguration を構成する方法を示しています。

services.Configure<TelemetryConfiguration>(config =>
{
       var credential = new DefaultAzureCredential();
       config.SetAzureTokenCredential(credential);
});
services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
    ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/"
});

ローカル認証の無効化

Microsoft Entra 認証が有効になると、ローカル認証を無効にすることを選択できます。 この構成では、Microsoft Entra によって排他的に認証されたテレメトリを取り込むことができ、データ アクセス (API キー経由など) に影響を及ぼします。

ローカル認証は、Azure portal、Azure Policy、またはプログラムを使用して無効にできます。

Azure portal

  1. Application Insights リソースで、左側のメニューの [構成] 見出しの下にある [プロパティ] を選びます。 ローカル認証が有効になっている場合は、[有効 (クリックして変更)] を選択します。

    [構成] セクションの [プロパティ] と、[有効 (選択して変更)] ローカル認証ボタンを示すスクリーンショット。

  2. [無効] を選択し、変更を適用します。

    [有効/無効] ボタンがあるローカル認証を示すスクリーンショット。

  3. リソースでローカル認証を無効にすると、対応する情報が [概要] ペインに表示されます。

    [無効 (選択して変更)] ローカル認証ボタンがある [概要] タブを示すスクリーンショット。

Azure Policy

DisableLocalAuth に対する Azure Policy は、このプロパティが true に設定されていないと、新しい Application Insights リソースを作成する機能をユーザーに対して拒否します。 ポリシー名は Application Insights components should block non-AAD auth ingestion です。

このポリシー定義をサブスクリプションに適用するには、新しいポリシー割り当てを作成してポリシーを割り当てます

次の例は、ポリシー テンプレートの定義を示しています。

{
    "properties": {
        "displayName": "Application Insights components should block non-AAD auth ingestion",
        "policyType": "BuiltIn",
        "mode": "Indexed",
        "description": "Improve Application Insights security by disabling log ingestion that are not AAD-based.",
        "metadata": {
            "version": "1.0.0",
            "category": "Monitoring"
        },
        "parameters": {
            "effect": {
                "type": "String",
                "metadata": {
                    "displayName": "Effect",
                    "description": "The effect determines what happens when the policy rule is evaluated to match"
                },
                "allowedValues": [
                    "audit",
                    "deny",
                    "disabled"
                ],
                "defaultValue": "audit"
            }
        },
        "policyRule": {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.Insights/components"
                    },
                    {
                        "field": "Microsoft.Insights/components/DisableLocalAuth",
                        "notEquals": "true"                        
                    }
                ]
            },
            "then": {
                "effect": "[parameters('effect')]"
            }
        }
    }
}

プログラムによる有効化

プロパティ DisableLocalAuth は、Application Insights リソースでローカル認証を無効にするために使用されます。 このプロパティを true に設定すると、すべてのアクセスで Microsoft Entra 認証を使うことが必須になります。

次の例は、LocalAuth を無効にして、ワークスペースベースの Application Insights リソースを作成するために使用できる Azure Resource Manager テンプレートを示しています。

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string"
        },
        "type": {
            "type": "string"
        },
        "regionId": {
            "type": "string"
        },
        "tagsArray": {
            "type": "object"
        },
        "requestSource": {
            "type": "string"
        },
        "workspaceResourceId": {
            "type": "string"
        },
        "disableLocalAuth": {
            "type": "bool"
        }
     
    },
    "resources": [
        {
        "name": "[parameters('name')]",
        "type": "microsoft.insights/components",
        "location": "[parameters('regionId')]",
        "tags": "[parameters('tagsArray')]",
        "apiVersion": "2020-02-02-preview",
        "dependsOn": [],
        "properties": {
            "Application_Type": "[parameters('type')]",
            "Flow_Type": "Redfield",
            "Request_Source": "[parameters('requestSource')]",
            "WorkspaceResourceId": "[parameters('workspaceResourceId')]",
            "DisableLocalAuth": "[parameters('disableLocalAuth')]"
            }
    }
 ]
}

トークン対象ユーザー

Application Insights にテレメトリを送信するために Microsoft Entra ID からアクセス トークンを取得するカスタム クライアントを開発する場合は、次の表を参照して、特定のホスト環境に適した対象ユーザー文字列を決定します。

Azure クラウド バージョン トークンの対象ユーザーの値
Azure パブリック クラウド https://monitor.azure.com
21Vianet によって運営される Microsoft Azure クラウド https://monitor.azure.cn
Azure US Government cloud https://monitor.azure.us

ソブリン クラウドを使用している場合は、接続文字列にも対象ユーザー情報があります。 接続文字列は、次の構造に従います。

InstrumentationKey={profile.InstrumentationKey};IngestionEndpoint={ingestionEndpoint};LiveEndpoint={liveDiagnosticsEndpoint};AADAudience={aadAudience}

対象ユーザー パラメーター AADAudience は、特定の環境によって異なる場合があります。

トラブルシューティング

このセクションでは、サポート チケットを送信する前に問題解決のために実行できる各種トラブルシューティングのシナリオと手順について説明します。

インジェスト HTTP エラー

インジェスト サービスでは、SDK 言語に関係なく、特定のエラーを返します。 ネットワーク トラフィックは、Fiddler などのツールを使用して収集できます。 フィルターにかけて、接続文字列に設定されたインジェスト エンドポイントへのトラフィックに絞り込む必要があります。

HTTP/1.1 400 Authentication not supported (認証がサポートされていません)

このエラーは、リソースが Microsoft Entra 専用に設定されていることを示しています。 SDK が正しくない API に送信しているため、SDK を正しく構成する必要があります。

Note

"v2/track" は Microsoft Entra ID をサポートしていません。 SDK が正しく構成されると、テレメトリは "v2.1/track" に送信されます。

次に、SDK の構成を確認する必要があります。

HTTP/1.1 401 Authorization required (認証が必要です)

このエラーは、SDK は正しく構成されているが、有効なトークンを取得できないことを示しています。 このエラーは、Microsoft Entra ID に関する問題を示している可能性があります。

次に、SDK ログの例外、または Azure ID からのネットワーク エラーを特定する必要があります。

HTTP/1.1 403 Unauthorized (権限がありません)

このエラーは、SDK が Application Insights リソースまたはサブスクリプションに対するアクセス許可を付与されていない資格情報を使用していることを意味します。

まず、Application Insights リソースのアクセスの制御を確認します。 監視メトリック発行者ロールが付与された資格情報を使用して SDK を構成する必要があります。

言語固有のトラブルシューティング

[イベント ソース] と置き換えます。

Application Insights .NET SDK は、イベント ソースを使用してエラー ログを出力します。 イベント ソース ログの収集の詳細については、データが存在しない場合のトラブルシューティングに関するページの「PerfView を使用してログを収集する」を参照してください。

SDK でトークンの取得に失敗した場合、例外メッセージ Failed to get AAD Token. Error message: がログに記録されます。

次のステップ