Mengirimkan peristiwa ke titik akhir yang dilindungi Microsoft Entra

Artikel ini menjelaskan cara mengamankan pengiriman peristiwa dari Azure Event Grid (langganan peristiwa) ke titik akhir webhook Anda dengan menggunakan autentikasi ID Microsoft Entra. Anda mempelajari cara mengonfigurasi aplikasi Microsoft Entra dan menetapkan peran yang sesuai untuk membuat koneksi terautentikasi antara Event Grid dan webhook Anda. Artikel ini menggunakan portal Microsoft Azure untuk demonstrasi. Namun, Anda juga dapat mengaktifkan fitur dengan menggunakan CLI, PowerShell, atau SDK.

Penting

Untuk mengatasi kerentanan keamanan, Microsoft memperkenalkan pemeriksaan akses tambahan sebagai bagian dari membuat atau memperbarui langganan peristiwa pada 30 Maret 2021. Prinsipal layanan klien pelanggan harus menjadi pemilik atau memiliki peran yang ditetapkan pada prinsipal layanan aplikasi tujuan. Konfigurasi ulang Aplikasi Microsoft Entra Anda dengan mengikuti instruksi baru dalam artikel ini. Untuk gambaran umum aplikasi Microsoft Entra dan perwakilan layanan, lihat gambaran umum platform identitas Microsoft (v2.0).

Skenario

Artikel ini menjelaskan cara menerapkan dua skenario berikut secara rinci:

Kirim peristiwa ke webhook di penyewa Microsoft Entra yang sama

Diagram berikut menunjukkan bagaimana Event Grid mengirimkan events ke sebuah webhook di penyewa yang sama dengan event subscription.

Gambar yang menggambarkan pengiriman acara secara aman ke webhook yang berada di tenant yang sama.

Bagian ini memiliki dua subbagian. Baca kedua skenario atau skenario yang menarik minat Anda.

Mengonfigurasi langganan acara dengan pengguna Microsoft Entra

Bagian ini memperlihatkan cara mengonfigurasi langganan peristiwa dengan menggunakan pengguna Microsoft Entra.

  1. Buat aplikasi Microsoft Entra untuk webhook yang telah dikonfigurasi agar dapat bekerja dengan Microsoft Entra (penyewa tunggal).

  2. Buka Azure Shell di penyewa, lalu pilih lingkungan PowerShell.

  3. Ubah nilai $webhookAadTenantId untuk terhubung ke penyewa.

    • Variabel:
      • $webhookAadTenantId: ID penyewa Azure
    $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
    Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
    
  4. Buka skrip berikut, lalu perbarui nilai $webhookAppObjectId dan $eventSubscriptionWriterUserPrincipalName dengan pengidentifikasi Anda, lalu lanjutkan untuk menjalankan skrip.

    • Variabel:
      • $webhookAppObjectId: ID aplikasi Microsoft Entra yang dibuat untuk webhook
      • $eventSubscriptionWriterUserPrincipalName: Nama prinsipal pengguna Azure dari pengguna yang membuat langganan peristiwa

    Catatan

    Anda tidak perlu mengubah nilai $eventGridAppId. Dalam skrip ini, AzureEventGridSecureWebhookSubscriber diatur untuk $eventGridRoleName. Ingat, Anda harus menjadi anggota peran Administrator Aplikasi Microsoft Entra atau menjadi pemilik perwakilan layanan aplikasi webhook di ID Microsoft Entra untuk menjalankan skrip ini.

    Jika Anda melihat pesan kesalahan berikut, Anda perlu meningkatkan ke service principal. Pemeriksaan akses tambahan diperkenalkan sebagai bagian dari pembuatan atau pembaruan langganan peristiwa pada 30 Maret 2021 untuk mengatasi kerentanan keamanan. Prinsipal layanan klien pelanggan harus menjadi pemilik atau memiliki peran yang ditetapkan pada prinsipal layanan aplikasi tujuan.

    New-MgServicePrincipalAppRoleAssignment: Error occurred while executing NewServicePrincipalAppRoleAssignment
    Code: Authorization_RequestDenied
    Message: Insufficient privileges to complete the operation.
    
  5. Di portal, saat membuat langganan peristiwa, ikuti langkah berikut:

    1. Pilih tipe titik akhir sebagai Web Hook.

    2. Sebutkan URL titik akhir.

      Cuplikan layar saat memilih jenis endpoint webhook di portal Azure.

    3. Pilih tab Fitur Tambahan di bagian atas halaman Buat Langganan Acara.

    4. Pada tab Fitur tambahan, lakukan langkah-langkah berikut ini:

      1. Pilih Gunakan autentikasi Microsoft Entra, dan konfigurasikan ID penyewa dan ID aplikasi:

      2. Salin ID penyewa Microsoft Entra dari output skrip dan masukkan di bidang ID penyewa Microsoft Entra.

      3. Salin ID aplikasi Microsoft Entra dari output skrip dan masukkan di bidang ID Aplikasi Microsoft Entra. Anda dapat menggunakan URI ID Aplikasi Microsoft Entra alih-alih menggunakan ID aplikasi. Untuk informasi selengkapnya tentang aplikasi ID URL, lihat artikel ini.

        Cuplikan layar konfigurasi tindakan webhook yang aman di portal Microsoft Azure.

Mengonfigurasi langganan peristiwa dengan menggunakan aplikasi Microsoft Entra

Bagian ini memperlihatkan cara mengonfigurasi langganan peristiwa dengan menggunakan aplikasi Microsoft Entra.

  1. Buat aplikasi Microsoft Entra untuk penulis langganan Event Grid yang dikonfigurasi untuk bekerja dengan Microsoft Entra (Penyewa tunggal).

  2. Buat rahasia untuk aplikasi Microsoft Entra dan simpan nilainya (Anda memerlukan nilai ini nanti).

  3. Buka halaman Kontrol akses (IAM) untuk topik Event Grid dan tetapkan peran Kontributor Event Grid ke aplikasi penulis langganan Event Grid. Langkah ini memungkinkan Anda memiliki akses ke sumber daya Event Grid saat Anda masuk ke Azure dengan aplikasi Microsoft Entra dengan menggunakan Azure CLI.

  4. Buat aplikasi Microsoft Entra untuk webhook yang sudah dikonfigurasi agar bekerja dengan Microsoft Entra dalam mode penyewa tunggal.

  5. Buka Azure Shell di penyewa, lalu pilih lingkungan PowerShell.

  6. Ubah nilai $webhookAadTenantId untuk terhubung ke penyewa.

    • Variabel:
      • $webhookAadTenantId: ID penyewa Azure
    $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
    Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
    
  7. Buka skrip berikut dan perbarui nilai $webhookAppObjectId juga $eventSubscriptionWriterAppId dengan pengidentifikasi Anda, lalu lanjutkan untuk menjalankan skrip.

    • Variabel:
      • $webhookAppObjectId: ID aplikasi Microsoft Entra yang dibuat untuk webhook
      • $eventSubscriptionWriterAppId: ID aplikasi Microsoft Entra untuk aplikasi penulis langganan Event Grid.

    Catatan

    Anda tidak perlu memodifikasi nilai $eventGridAppId. Dalam skrip ini, AzureEventGridSecureWebhookSubscriber telah disetel untuk $eventGridRoleName. Ingat, Anda harus menjadi anggota peran Administrator Aplikasi Microsoft Entra atau menjadi pemilik perwakilan layanan aplikasi webhook di ID Microsoft Entra untuk menjalankan skrip ini.

  8. Masuk sebagai penulis langganan Event Grid Aplikasi Microsoft Entra dengan menjalankan perintah .

    az login --service-principal -u [REPLACE_WITH_EVENT_GRID_SUBSCRIPTION_WRITER_APP_ID] -p [REPLACE_WITH_EVENT_GRID_SUBSCRIPTION_WRITER_APP_SECRET_VALUE] --tenant [REPLACE_WITH_TENANT_ID]
    
  9. Buat langganan Anda dengan menjalankan perintah.

    az eventgrid system-topic event-subscription create --name [REPLACE_WITH_SUBSCRIPTION_NAME] -g [REPLACE_WITH_RESOURCE_GROUP] --system-topic-name [REPLACE_WITH_SYSTEM_TOPIC] --endpoint [REPLACE_WITH_WEBHOOK_ENDPOINT] --event-delivery-schema [REPLACE_WITH_WEBHOOK_EVENT_SCHEMA] --azure-active-directory-tenant-id [REPLACE_WITH_TENANT_ID] --azure-active-directory-application-id-or-uri [REPLACE_WITH_APPLICATION_ID_FROM_SCRIPT] --endpoint-type webhook
    

    Catatan

    Skenario ini menggunakan topik sistem. Jika Anda ingin membuat langganan untuk topik atau domain kustom dengan menggunakan Azure CLI, lihat Referensi CLI.

  10. Jika mengonfigurasi semuanya dengan benar, Anda dapat membuat langganan webhook di topik Event Grid Anda.

    Catatan

    Pada titik ini, Event Grid sekarang meneruskan token pembawa Microsoft Entra ke klien webhook di setiap pesan. Anda perlu memvalidasi token otorisasi di webhook Anda.

Menyampaikan acara ke webhook di penyewa Microsoft Entra yang berbeda

Untuk mengamankan koneksi antara langganan acara Anda dan titik akhir webhook yang berada di penyewa Microsoft Entra yang berbeda, gunakan aplikasi ID Microsoft Entra seperti yang ditunjukkan di bagian ini. Saat ini, Anda tidak dapat mengamankan koneksi ini dengan menggunakan pengguna ID Microsoft Entra di portal Microsoft Azure.

Cuplikan layar peristiwa multipenyewa dengan ID Microsoft Entra dan diagram Webhooks.

Berdasarkan diagram, ikuti langkah berikutnya untuk mengonfigurasi kedua penyewa.

Penyewa A

Selesaikan langkah-langkah berikut di Penyewa A:

  1. Buat aplikasi Microsoft Entra untuk penulis langganan Event Grid yang dikonfigurasi untuk bekerja dengan Entra Microsoft apa saja (multitenant).

  2. Buat rahasia untuk aplikasi Microsoft Entra, dan simpan nilainya (Anda memerlukan nilai ini nanti).

  3. Buka halaman Kontrol akses (IAM) untuk topik Event Grid. Tetapkan peran Kontributor Event Grid ke aplikasi Microsoft Entra dari penulis langganan Event Grid. Langkah ini memberikan akses aplikasi ke sumber daya Event Grid saat Anda masuk ke Azure dengan menggunakan aplikasi Microsoft Entra dan Azure CLI.

Penyewa B

Di Penyewa B, selesaikan langkah-langkah berikut:

  1. Buat aplikasi Microsoft Entra untuk webhook yang dikonfigurasi agar dapat digunakan bersama Microsoft Entra, khusus untuk satu penyewa.

  2. Buka Azure Shell, lalu pilih lingkungan PowerShell.

  3. Ubah nilai $webhookAadTenantId untuk menyambungkan ke Penyewa B.

    • Variabel:

      • $webhookAadTenantId: ID Penyewa Azure untuk Penyewa B
      $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
      Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
      
  4. Buka skrip berikut, dan perbarui nilai $webhookAppObjectId dan $eventSubscriptionWriterAppId dengan pengidentifikasi Anda. Kemudian, lanjutkan untuk menjalankan skrip.

    • Variabel:
      • $webhookAppObjectId: ID aplikasi Microsoft Entra yang dibuat untuk webhook

      • $eventSubscriptionWriterAppId: ID aplikasi Microsoft Entra untuk penulis langganan Event Grid

        Catatan

        Anda tidak perlu memodifikasi nilai $eventGridAppId. Dalam skrip ini, AzureEventGridSecureWebhookSubscriber diatur untuk $eventGridRoleName. Ingat, Anda harus menjadi anggota peran Administrator Aplikasi Microsoft Entra atau menjadi pemilik perwakilan layanan aplikasi webhook di ID Microsoft Entra untuk menjalankan skrip ini.

    Jika Anda melihat pesan kesalahan berikut, Anda perlu meningkatkan ke service principal. Pemeriksaan akses tambahan diperkenalkan sebagai bagian dari pembuatan atau pembaruan langganan peristiwa pada 30 Maret 2021 untuk mengatasi kerentanan keamanan. Prinsipal layanan klien pelanggan harus menjadi pemilik atau memiliki peran yang ditetapkan pada prinsipal layanan aplikasi tujuan.

    New-MgServicePrincipalAppRoleAssignment: Error occurred while executing NewServicePrincipalAppRoleAssignment
    Code: Authorization_RequestDenied
    Message: Insufficient privileges to complete the operation.
    

Penyewa A

Di Penyewa A, selesaikan langkah-langkah berikut:

  1. Buka Azure Shell dan masuk sebagai penulis langganan Event Grid Aplikasi Microsoft Entra dengan menjalankan perintah .

    az login --service-principal -u [REPLACE_WITH_APP_ID] -p [REPLACE_WITH_SECRET_VALUE] --tenant [REPLACE_WITH_TENANT_ID]
    
  2. Buat langganan Anda dengan menjalankan perintah.

    az eventgrid system-topic event-subscription create --name [REPLACE_WITH_SUBSCRIPTION_NAME] -g [REPLACE_WITH_RESOURCE_GROUP] --system-topic-name [REPLACE_WITH_SYSTEM_TOPIC] --endpoint [REPLACE_WITH_WEBHOOK_ENDPOINT] --event-delivery-schema [REPLACE_WITH_WEBHOOK_EVENT_SCHEMA] --azure-active-directory-tenant-id [REPLACE_WITH_TENANT_B_ID] --azure-active-directory-application-id-or-uri [REPLACE_WITH_APPLICATION_ID_FROM_SCRIPT] --endpoint-type webhook
    

    Catatan

    Dalam skenario ini, Anda menggunakan Topik Sistem Event Grid. Untuk membuat langganan untuk topik kustom atau domain Event Grid dengan menggunakan Azure CLI, lihat di sini.

  3. Jika mengonfigurasi semuanya dengan benar, Anda dapat membuat langganan webhook di topik Event Grid Anda.

    Catatan

    Pada titik ini, Event Grid meneruskan token Microsoft Entra Bearer ke klien webhook di setiap pesan. Anda perlu memvalidasi token Otorisasi di webhook Anda.