Application Insights に対する Azure AD Authentication

Application Insights では、新たに Azure Active Directory (Azure AD) 認証がサポートされています。 認証されたテレメトリのみが Application Insights リソースに取り込まれるよう、Azure AD を使用して設定できるようになりました。

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

前提条件

Azure AD 認証インジェストを有効にするための前提条件を次に示します。

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

次の SDK と機能は、Azure AD 認証インジェストでの使用がサポートされていません。

Azure AD ベースの認証の構成と有効化

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

    1. マネージド ID の使用 (推奨):

      (VM、App Service などの) Azure サービス用のマネージド ID を設定します

    2. サービス プリンシパルの使用 (非推奨):

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

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

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

    Note

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

  3. 以下の言語別の構成ガイダンスに従います。

Note

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

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

  • DefaultAzureCredential はローカル開発に対して推奨されます。
  • ManagedIdentityCredential は、システム割り当ておよびユーザー割り当てのマネージド ID に対して推奨されます。
    • システム割り当ての場合は、パラメーターを指定せずに既定のコンストラクターを使用します。
    • ユーザー割り当ての場合は、clientId をコンストラクターに渡します。
  • ClientSecretCredential はサービス プリンシパルに対して推奨されます。
    • tenantId、clientId、clientSecret をコンストラクターに渡します。

.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/"
});

Note

インストルメンテーション キーのインジェストのサポートは、2025 年 3 月 31 日に終了します。 インストルメンテーション キーのインジェストは引き続き機能しますが、この機能の更新プログラムやサポートは提供されなくなります。 接続文字列に移行することで、新機能をご利用いただけます。

ローカル認証の無効化

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

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

Azure portal

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

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

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

    ローカル認証の有効/無効の切り替えボタンが強調表示されたスクリーンショット。

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

    [概要] タブで [無効 (選択して変更)] が強調表示されているスクリーンショット。

Azure Policy

"DisableLocalAuth" の Azure Policy は、このプロパティが "true" に設定されていない場合に、ユーザーが新しい Application Insights リソースを作成することを拒否します。 ポリシー名は "Application Insights components should block non-AAD auth ingestion" (Application Insights コンポーネントは AAD 認証以外のインジェストをブロックする必要がある) です。

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

ポリシー テンプレートの定義を次に示します。

{
    "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 に設定すると、すべてのアクセスで Azure AD 認証を使用することが必須になります。

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

{
    "$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')]"
            }
    }
 ]
}

トラブルシューティング

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

インジェスト HTTP エラー

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

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

このエラーは、リソースが Azure AD 専用に構成されていることを示します。 SDK が正しく構成されておらず、正しくない API に送信されています。

Note

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

次のステップで、SDK 構成を確認する必要があります。

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

このエラーは、SDK は正しく構成されているが、有効なトークンを取得できなかったことを示しています。 このエラーは、Azure Active Directory の問題を示している可能性があります。

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

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

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

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

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

イベント ソース

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

SDK でトークンを取得できなかった場合、次の例外メッセージがログに記録されます: Failed to get AAD Token. Error message:

次のステップ