Autentikasi Microsoft Entra untuk Application Insights

Application Insights sekarang mendukung autentikasi Microsoft Entra. Dengan menggunakan ID Microsoft Entra, Anda dapat memastikan bahwa hanya telemetri terautentikasi yang diserap dalam sumber daya Application Insights Anda.

Biasanya, menggunakan berbagai sistem autentikasi dapat menjadi rumit dan menimbulkan risiko karena sulit untuk mengelola kredensial dalam skala besar. Anda sekarang dapat memilih untuk menolak autentikasi lokal untuk memastikan hanya telemetri yang diautentikasi secara eksklusif dengan menggunakan identitas terkelola dan ID Microsoft Entra diserap di sumber daya Anda. Fitur ini adalah langkah untuk meningkatkan keamanan dan keandalan telemetri yang digunakan untuk membuat operasional penting (pemberitahuan dan penskalaan otomatis) dan keputusan bisnis.

Prasyarat

Langkah-langkah awal berikut diperlukan untuk mengaktifkan penyerapan terautentikasi Microsoft Entra. Anda perlu:

Skenario yang tidak didukung

Kit Pengembangan Perangkat Lunak (SDK) dan fitur berikut tidak didukung untuk digunakan dengan penyerapan terautentikasi Microsoft Entra:

Mengonfigurasi dan mengaktifkan autentikasi berbasis ID Microsoft Entra

  1. Buat identitas menggunakan identitas terkelola atau perwakilan layanan jika Anda belum memilikinya.

    • Sebaiknya gunakan identitas terkelola:

      Siapkan identitas terkelola untuk layanan Azure Anda (Virtual Machines atau App Service).

    • Kami tidak merekomendasikan penggunaan entitas layanan:

      Untuk informasi selengkapnya tentang cara membuat aplikasi Microsoft Entra dan perwakilan layanan yang dapat mengakses sumber daya, lihat Membuat perwakilan layanan.

  2. Tetapkan peran kontrol akses berbasis peran (RBAC) yang diperlukan ke identitas Azure, prinsipal layanan, atau akun pengguna Azure.

    Ikuti langkah-langkah dalam Menetapkan peran Azure untuk menambahkan peran Penerbit Metrik Pemantauan ke identitas yang diharapkan, perwakilan layanan, atau akun pengguna Azure dengan mengatur sumber daya Application Insights target sebagai cakupan peran.

    Catatan

    Meskipun peran Penerbit Metrik Pemantauan menyebutkan "metrik," peran ini sebenarnya menerbitkan semua telemetri ke sumber daya Application Insights.

  3. Ikuti panduan konfigurasi sesuai dengan bahasa berikut.

Catatan

  • Dukungan untuk MICROSOFT Entra ID di Application Insights .NET SDK disertakan dimulai dengan versi 2.18-Beta3.
  • Kami mendukung kelas kredensial yang disediakan oleh Azure Identity.
  • Kami merekomendasikan DefaultAzureCredential untuk pengembangan lokal.
  • Autentikasi di Visual Studio dengan akun pengguna Azure yang sesuai. Untuk informasi selengkapnya, lihat Mengautentikasi melalui Visual Studio.
  • Kami merekomendasikan ManagedIdentityCredential untuk identitas terkelola yang diberikan oleh sistem dan pengguna.
    • Untuk sistem yang ditetapkan, gunakan konstruktor default tanpa parameter.
    • Untuk pengguna yang ditetapkan, berikan ID klien ke konstruktor.
  1. Instal paket Azure.Identity terbaru:

    dotnet add package Azure.Identity
    
  2. Berikan kelas kredensial yang diinginkan:

    // Create a new ASP.NET Core web application builder.
    var builder = WebApplication.CreateBuilder(args);
    
    // Add the OpenTelemetry telemetry service to the application.
    // This service will collect and send telemetry data to Azure Monitor.
    builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
        // Set the Azure Monitor credential to the DefaultAzureCredential.
        // This credential will use the Azure identity of the current user or
        // the service principal that the application is running as to authenticate
        // to Azure Monitor.
        options.Credential = new DefaultAzureCredential();
    });
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.
    app.Run();
    

Konfigurasi variabel lingkungan

Gunakan variabel lingkungan APPLICATIONINSIGHTS_AUTHENTICATION_STRING untuk memungkinkan Application Insights mengautentikasi ke Microsoft Entra ID dan mengirim telemetri saat menggunakan Azure App Autoinstrumentation Services dan Konfigurasi pemantauan untuk Azure Functions.

  • Untuk identitas yang ditetapkan sistem:
Pengaturan aplikasi Nilai
APPLICATIONINSIGHTS_AUTHENTICATION_STRING Authorization=AAD
  • Untuk identitas yang ditetapkan pengguna:
Pengaturan aplikasi Nilai
APPLICATIONINSIGHTS_AUTHENTICATION_STRING Authorization=AAD;ClientId={Client id of the User-Assigned Identity}

Mengkueri Application Insights menggunakan autentikasi Microsoft Entra

Anda dapat mengirimkan permintaan kueri dengan menggunakan endpoint Azure Monitor Application Insights https://api.applicationinsights.io. Untuk mengakses titik akhir, Anda harus mengautentikasi melalui ID Microsoft Entra.

Mengonfigurasikan autentikasi

Untuk mengakses API, Anda mendaftarkan aplikasi klien dengan ID Microsoft Entra dan meminta token.

  1. Daftarkan aplikasi di ID Microsoft Entra.

  2. Pada halaman gambaran umum aplikasi, pilih Izin API.

  3. Pilih Tambahkan izin.

  4. Pada tab API yang digunakan organisasi saya, cari Application Insights dan pilih Application Insights API dari daftar.

  5. Pilih Izin yang didelegasikan.

  6. Pilih kotak centang Data.Read .

  7. Pilih Tambahkan izin.

Sekarang setelah aplikasi Anda terdaftar dan memiliki izin untuk menggunakan API, berikan aplikasi Anda akses ke sumber daya Application Insights Anda.

  1. Dari halaman gambaran umum sumber daya Application Insights Anda, pilih Kontrol akses (IAM).

  2. Pilih Tambahkan penetapan peran.

  3. Pilih peran Pembaca lalu pilih Anggota.

  4. Pada tab Anggota , pilih Pilih anggota.

  5. Masukkan nama aplikasi Anda di kotak Pilih .

  6. Pilih aplikasi Anda dan pilih Pilih.

  7. Pilih Tinjau + tetapkan.

  8. Setelah Anda menyelesaikan penyiapan dan izin Direktori Aktif, minta token otorisasi.

Catatan

Untuk contoh ini, kami menerapkan peran Pembaca. Peran ini adalah salah satu dari banyak peran bawaan dan mungkin menyertakan lebih banyak izin daripada yang Anda butuhkan. Peran dan izin yang lebih terperinci dapat dibuat.

Meminta token otorisasi

Sebelum memulai, pastikan Anda memiliki semua nilai yang diperlukan untuk membuat permintaan berhasil. Semua permintaan memerlukan:

  • ID penyewa Microsoft Entra Anda.
  • ID Aplikasi App Insights Anda - Jika saat ini Anda menggunakan Kunci API, id aplikasi tersebut adalah ID aplikasi yang sama.
  • ID klien Microsoft Entra Anda untuk aplikasi.
  • Rahasia klien Microsoft Entra untuk aplikasi.

API Application Insights mendukung autentikasi Microsoft Entra dengan tiga alur Microsoft Entra ID OAuth2 yang berbeda:

  • Informasi masuk klien
  • Kode otorisasi
  • Implisit

Alur Info masuk Klien

Dalam alur kredensial klien, token digunakan pada endpoint Application Insights. Satu permintaan dibuat untuk menerima token dengan menggunakan kredensial yang disediakan untuk aplikasi Anda di langkah sebelumnya saat Anda mendaftarkan aplikasi di ID Microsoft Entra.

Gunakan titik akhir https://api.applicationinsights.io.

URL token kredensial klien (permintaan POST)
    POST /<your-tenant-id>/oauth2/token
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded

    grant_type=client_credentials
    &client_id=<app-client-id>
    &resource=https://api.applicationinsights.io
    &client_secret=<app-client-secret>

Permintaan yang berhasil menerima token akses dalam respons:

    {
        token_type": "Bearer",
        "expires_in": "86399",
        "ext_expires_in": "86399",
        "access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax"
    }

Gunakan token dalam permintaan ke titik akhir Application Insights:

    POST /v1/apps/yous_app_id/query?timespan=P1D
    Host: https://api.applicationinsights.io
    Content-Type: application/json
    Authorization: Bearer <your access token>

    Body:
    {
    "query": "requests | take 10"
    }

Contoh respons:

  "tables": [
    {
      "name": "PrimaryResult",
      "columns": [
        {
          "name": "timestamp",
          "type": "datetime"
        },
        {
          "name": "id",
          "type": "string"
        },
        {
          "name": "source",
          "type": "string"
        },
        {
          "name": "name",
          "type": "string"
        },
        {
          "name": "url",
          "type": "string"
        },
        {
          "name": "success",
          "type": "string"
        },
        {
          "name": "resultCode",
          "type": "string"
        },
        {
          "name": "duration",
          "type": "real"
        },
        {
          "name": "performanceBucket",
          "type": "string"
        },
        {
          "name": "customDimensions",
          "type": "dynamic"
        },
        {
          "name": "customMeasurements",
          "type": "dynamic"
        },
        {
          "name": "operation_Name",
          "type": "string"
        },
        {
          "name": "operation_Id",
          "type": "string"
        },
        {
          "name": "operation_ParentId",
          "type": "string"
        },
        {
          "name": "operation_SyntheticSource",
          "type": "string"
        },
        {
          "name": "session_Id",
          "type": "string"
        },
        {
          "name": "user_Id",
          "type": "string"
        },
        {
          "name": "user_AuthenticatedId",
          "type": "string"
        },
        {
          "name": "user_AccountId",
          "type": "string"
        },
        {
          "name": "application_Version",
          "type": "string"
        },
        {
          "name": "client_Type",
          "type": "string"
        },
        {
          "name": "client_Model",
          "type": "string"
        },
        {
          "name": "client_OS",
          "type": "string"
        },
        {
          "name": "client_IP",
          "type": "string"
        },
        {
          "name": "client_City",
          "type": "string"
        },
        {
          "name": "client_StateOrProvince",
          "type": "string"
        },
        {
          "name": "client_CountryOrRegion",
          "type": "string"
        },
        {
          "name": "client_Browser",
          "type": "string"
        },
        {
          "name": "cloud_RoleName",
          "type": "string"
        },
        {
          "name": "cloud_RoleInstance",
          "type": "string"
        },
        {
          "name": "appId",
          "type": "string"
        },
        {
          "name": "appName",
          "type": "string"
        },
        {
          "name": "iKey",
          "type": "string"
        },
        {
          "name": "sdkVersion",
          "type": "string"
        },
        {
          "name": "itemId",
          "type": "string"
        },
        {
          "name": "itemType",
          "type": "string"
        },
        {
          "name": "itemCount",
          "type": "int"
        }
      ],
      "rows": [
        [
          "2018-02-01T17:33:09.788Z",
          "|0qRud6jz3k0=.c32c2659_",
          null,
          "GET Reports/Index",
          "http://fabrikamfiberapp.azurewebsites.net/Reports",
          "True",
          "200",
          "3.3833",
          "<250ms",
          "{\"_MS.ProcessedByMetricExtractors\":\"(Name:'Requests', Ver:'1.0')\"}",
          null,
          "GET Reports/Index",
          "0qRud6jz3k0=",
          "0qRud6jz3k0=",
          "Application Insights Availability Monitoring",
          "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
          "us-va-ash-azr_aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
          null,
          null,
          "AutoGen_49c3aea0-4641-4675-93b5-55f7a62d22d3",
          "PC",
          null,
          null,
          "52.168.8.0",
          "Boydton",
          "Virginia",
          "United States",
          null,
          "fabrikamfiberapp",
          "RD00155D5053D1",
          "bbbbbbbb-1111-2222-3333-cccccccccccc",
          "fabrikamprod",
          "cccccccc-2222-3333-4444-dddddddddddd",
          "web:2.5.0-33031",
          "dddddddd-3333-4444-5555-eeeeeeeeeeee",
          "request",
          "1"
        ],
        [
          "2018-02-01T17:33:15.786Z",
          "|x/Ysh+M1TfU=.c32c265a_",
          null,
          "GET Home/Index",
          "http://fabrikamfiberapp.azurewebsites.net/",
          "True",
          "200",
          "716.2912",
          "500ms-1sec",
          "{\"_MS.ProcessedByMetricExtractors\":\"(Name:'Requests', Ver:'1.0')\"}",
          null,
          "GET Home/Index",
          "x/Ysh+M1TfU=",
          "x/Ysh+M1TfU=",
          "Application Insights Availability Monitoring",
          "eeeeeeee-4444-5555-6666-ffffffffffff",
          "emea-se-sto-edge_eeeeeeee-4444-5555-6666-ffffffffffff",
          null,
          null,
          "AutoGen_49c3aea0-4641-4675-93b5-55f7a62d22d3",
          "PC",
          null,
          null,
          "51.141.32.0",
          "Cardiff",
          "Cardiff",
          "United Kingdom",
          null,
          "fabrikamfiberapp",
          "RD00155D5053D1",
          "bbbbbbbb-1111-2222-3333-cccccccccccc",
          "fabrikamprod",
          "cccccccc-2222-3333-4444-dddddddddddd",
          "web:2.5.0-33031",
          "ffffffff-5555-6666-7777-aaaaaaaaaaaa",
          "request",
          "1"
        ]
      ]
    }
  ]
}

Alur kode otorisasi

Aliran OAuth2 utama yang didukung adalah melalui kode otorisasi. Metode ini memerlukan dua permintaan HTTP untuk memperoleh token untuk memanggil API Application Insights Azure Monitor. Ada dua URL, dengan satu titik akhir per permintaan. Formatnya dijelaskan di bagian berikut.

URL kode otorisasi (permintaan GET)
    GET https://login.microsoftonline.com/YOUR_Azure AD_TENANT/oauth2/authorize?
    client_id=<app-client-id>
    &response_type=code
    &redirect_uri=<app-redirect-uri>
    &resource=https://api.applicationinsights.io

Saat permintaan dibuat ke URL resmi, client\_id adalah ID aplikasi dari aplikasi Microsoft Entra Anda, yang disalin dari menu properti aplikasi. redirect\_uri adalah homepage/login URL dari aplikasi Microsoft Entra yang sama. Ketika permintaan berhasil, titik akhir ini mengarahkan Anda ke halaman masuk yang Anda berikan saat mendaftar dengan kode otorisasi yang ditambahkan ke URL. Lihat contoh berikut:

    http://<app-client-id>/?code=AUTHORIZATION_CODE&session_state=STATE_GUID

Pada titik ini, Anda mendapatkan kode otorisasi, yang sekarang Anda gunakan untuk meminta token akses.

URL token kode otorisasi (request POST)
    POST /YOUR_Azure AD_TENANT/oauth2/token HTTP/1.1
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded

    grant_type=authorization_code
    &client_id=<app client id>
    &code=<auth code fom GET request>
    &redirect_uri=<app-client-id>
    &resource=https://api.applicationinsights.io
    &client_secret=<app-client-secret>

Semua nilai sama seperti sebelumnya, dengan beberapa tambahan. Kode otorisasi adalah kode yang sama dengan yang Anda terima dalam permintaan sebelumnya setelah pengalihan berhasil. Kode dikombinasikan dengan kunci yang diperoleh dari aplikasi Microsoft Entra. Jika Anda tidak menyimpan kunci, Anda dapat menghapusnya dan membuat kunci baru dari tab kunci menu aplikasi Microsoft Entra. Responsnya adalah string JSON yang berisi token dengan skema berikut. Jenis-jenis ini ditandai berdasarkan nilai token.

Contoh respons:

    {
        "access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax",
        "expires_in": "3600",
        "ext_expires_in": "1503641912",
        "id_token": "not_needed_for_app_insights",
        "not_before": "1503638012",
        "refresh_token": "eyJ0esdfiJKV1ljhgYF.....Az",
        "resource": "https://api.applicationinsights.io",
        "scope": "Data.Read",
        "token_type": "bearer"
    }

Bagian token akses dari respons ini adalah apa yang Anda sajikan ke API Application Insights di Authorization: Bearer header. Anda juga dapat menggunakan token refresh di masa mendatang untuk memperoleh access_token baru dan refresh_token saat Token Anda kedaluarsa. Untuk permintaan ini, format dan titik akhir adalah:

    POST /YOUR_AAD_TENANT/oauth2/token HTTP/1.1
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded

    client_id=<app-client-id>
    &refresh_token=<refresh-token>
    &grant_type=refresh_token
    &resource=https://api.applicationinsights.io
    &client_secret=<app-client-secret>

Contoh respons:

    {
      "token_type": "Bearer",
      "expires_in": "3600",
      "expires_on": "1460404526",
      "resource": "https://api.applicationinsights.io",
      "access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax",
      "refresh_token": "eyJ0esdfiJKV1ljhgYF.....Az"
    }

Alur kode implisit

API Application Insights mendukung alur implisit OAuth2. Untuk alur ini, hanya satu permintaan yang diperlukan, tetapi tidak ada token refresh yang dapat diperoleh.

URL otorisasi kode implisit
    GET https://login.microsoftonline.com/YOUR_AAD_TENANT/oauth2/authorize?
    client_id=<app-client-id>
    &response_type=token
    &redirect_uri=<app-redirect-uri>
    &resource=https://api.applicationinsights.io

Permintaan yang berhasil menghasilkan pengalihan ke URI pengalihan Anda dengan token di URL:

    http://YOUR_REDIRECT_URI/#access_token=YOUR_ACCESS_TOKEN&token_type=Bearer&expires_in=3600&session_state=STATE_GUID

Access_token ini berfungsi sebagai nilai header Authorization: Bearer saat diteruskan ke API Application Insights untuk mengesahkan permintaan.

Nonaktifkan autentikasi lokal

Setelah autentikasi Microsoft Entra diaktifkan, Anda dapat memilih untuk menonaktifkan autentikasi lokal. Konfigurasi ini memungkinkan Anda untuk mengumpulkan telemetri yang diautentikasi secara eksklusif oleh Microsoft Entra ID dan memengaruhi akses ke data (misalnya, melalui kunci API).

Anda dapat menonaktifkan autentikasi lokal dengan menggunakan portal Azure atau Azure Policy atau secara terprogram.

portal Azure

  1. Dari sumber daya Application Insights Anda, pilih Properti di bawah Konfigurasikan di menu di sebelah kiri. Pilih Diaktifkan (klik untuk mengubah) jika autentikasi lokal diaktifkan.

    Cuplikan layar yang memperlihatkan Properti di bawah bagian Konfigurasi dan tombol autentikasi lokal yang Diaktifkan (pilih untuk mengubah).

  2. Pilih Dinonaktifkan dan terapkan perubahan.

    Cuplikan layar yang memperlihatkan autentikasi lokal dengan tombol Diaktifkan/Dinonaktifkan.

  3. Setelah menonaktifkan autentikasi lokal pada sumber daya, Anda akan melihat informasi terkait di panel Gambaran Umum .

    Cuplikan layar yang memperlihatkan tab Ikhtisar dengan tombol autentikasi lokal dinonaktifkan (pilih untuk mengubah).

Azure Policy

Azure Policy untuk DisableLocalAuth menolak kemampuan pengguna untuk membuat sumber daya Application Insights baru tanpa properti ini diatur ke true. Nama kebijakannya adalah Application Insights components should block non-Azure Active Directory based ingestion.

Untuk menerapkan definisi kebijakan ini ke langganan Anda, buat tugas kebijakan baru dan tetapkan kebijakan.

Contoh berikut menunjukkan definisi templat kebijakan:

{
    "properties": {
        "displayName": "Application Insights components should block non-Azure Active Directory based 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')]"
            }
        }
    }
}

Pemberdayaan terprogram

Properti DisableLocalAuth ini digunakan untuk menonaktifkan autentikasi lokal apa pun pada sumber daya Application Insights Anda. Ketika properti ini diatur ke true, properti ini memberlakukan bahwa autentikasi Microsoft Entra harus digunakan untuk semua akses.

Contoh berikut menunjukkan templat Azure Resource Manager yang dapat Anda gunakan untuk membuat sumber daya Application Insights berbasis ruang kerja dengan LocalAuth dinonaktifkan.

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

Audiens Token

Saat mengembangkan klien kustom untuk mendapatkan token akses dari ID Microsoft Entra untuk mengirimkan telemetri ke Application Insights, lihat tabel berikut untuk menentukan string audiens yang sesuai untuk lingkungan host tertentu Anda.

Versi cloud Azure Nilai audiens untuk token
Cloud publik Azure https://monitor.azure.com
Microsoft Azure dioperasikan oleh cloud 21Vianet https://monitor.azure.cn
Azure Cloud Pemerintah AS https://monitor.azure.us

Jika Anda menggunakan sovereign cloud, Anda juga dapat menemukan informasi audiens di string koneksi. string koneksi mengikuti struktur ini:

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

Parameter audiens, AADAudience, dapat bervariasi tergantung pada lingkungan spesifik Anda.

Pemecahan Masalah

Untuk panduan pemecahan masalah, lihat Memecahkan masalah autentikasi Microsoft Entra.

Langkah berikutnya