Application Insights に対する Azure AD Authentication
Application Insights では、新たに Azure Active Directory (Azure AD) 認証がサポートされています。 認証されたテレメトリのみが Application Insights リソースに取り込まれるよう、Azure AD を使用して設定できるようになりました。
さまざまな認証システムを使用すると、資格情報の管理が困難なため、煩雑であり、リスクも高まります。 マネージド ID と Azure Active Directory を使用して排他的に認証されたテレメトリのみがリソースに取り込まれるよう、ローカル認証の無効化を選択することが可能になりました。 この機能は、(アラートやオートスケールなどの) 運用上の重要な決定と、ビジネスの意思決定の両方を行うために使用されるテレメトリのセキュリティと信頼性を強化するためのステップです。
前提条件
Azure AD 認証インジェストを有効にするための前提条件を次に示します。
- パブリック クラウド内である必要があります
- 次の知識が必要です。
- Azure 組み込みロールを使用したアクセスを許可するために、リソース グループに対する "所有者" ロールを持っていること。
- サポートされていないシナリオについて理解していること。
サポートされていないシナリオ
次の SDK と機能は、Azure AD 認証インジェストでの使用がサポートされていません。
Application Insights Java 2.x SDK
Azure AD 認証は Application Insights Java Agent 3.2.0 以降でのみ使用できます。Application Insights OpenCensus Python SDK と Python バージョン 3.4 および 3.5
証明書/シークレット ベースの Azure AD は運用環境では推奨されていません。 代わりにマネージド ID を使用してください。
App Service、VM/仮想マシン スケール セット、Azure Functions などに対して既定でオンになっているコードレス監視 (言語)。
Azure AD ベースの認証の構成と有効化
まだ ID がない場合、マネージド ID またはサービス プリンシパルを使用して作成します。
マネージド ID の使用 (推奨):
(VM、App Service などの) Azure サービス用のマネージド ID を設定します。
サービス プリンシパルの使用 (非推奨):
リソースにアクセスできる Azure AD アプリケーションとサービス プリンシパルの作成方法の詳細については、サービス プリンシパルの作成に関するページを参照してください。
Azure サービスにロールを割り当てます。
Azure ロールの割り当てに関するページの手順に従って、ターゲットの Application Insights リソースからの "Monitoring Metrics Publisher" (メトリック発行元の監視) ロールを、テレメトリの送信元の Azure リソースに追加します。
Note
"Monitoring Metrics Publisher" ロールは、"メトリック" が名前に含まれていますが、すべてのテレメトリを App Insights リソースに発行します。
以下の言語別の構成ガイダンスに従います。
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/"
});
ローカル認証の無効化
Azure AD 認証が有効になったら、ローカル認証を無効にすることを選択できます。 この構成によって、Azure AD によって排他的に認証されたテレメトリを取り込むことができ、これは (たとえば、API キーを通じて) データ アクセスに影響を及ぼします。
ローカル認証は、Azure portal、Azure Policy、またはプログラムを使用して無効化できます。
Azure portal
Application Insights リソースで、左側のメニューの [構成] 見出しの下にある [プロパティ] を選択します。 次に、ローカル認証が有効になっている場合は、 [Enabled (click to change)](有効 (クリックして変更)) を選択します。
[無効] を選択し、変更を適用します。
リソースでローカル認証が無効になると、対応する情報が [概要] ペインに表示されます。
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: