Panduan: Autentikasi terintegrasi untuk aplikasi Python dengan layanan Azure

ID Microsoft Entra bersama dengan Azure Key Vault menyediakan cara yang komprehensif dan nyaman bagi aplikasi untuk mengautentikasi dengan layanan Azure dan layanan pihak ketiga tempat kunci akses terlibat.

Setelah memberikan beberapa latar belakang, panduan ini menjelaskan fitur autentikasi ini dalam konteks sampel, github.com/Azure-Samples/python-integrated-authentication.

Bagian 1: Latar Belakang

Meskipun banyak layanan Azure hanya mengandalkan kontrol akses berbasis peran untuk autorisasi, layanan tertentu mengontrol akses ke sumber daya masing-masing dengan menggunakan rahasia atau kunci. Layanan tersebut termasuk Azure Storage, database, layanan Azure AI, Key Vault, dan Event Hubs.

Saat membuat aplikasi cloud yang mengakses layanan ini, Anda dapat menggunakan portal Azure, Azure CLI, atau Azure PowerShell untuk membuat dan mengonfigurasi kunci untuk aplikasi Anda. Kunci yang Anda buat terkait dengan kebijakan akses tertentu dan mencegah akses ke sumber daya khusus aplikasi tersebut oleh kode lain yang tidak sah.

Dalam desain umum ini, aplikasi cloud biasanya harus mengelola kunci tersebut dan mengautentikasi dengan setiap layanan secara individual, sebuah proses yang bisa membosankan dan rawan kesalahan. Mengelola kunci secara langsung dalam kode aplikasi juga berisiko mengekspos kunci tersebut dalam kontrol sumber dan kunci dapat disimpan di workstation pengembang yang tidak aman.

Untungnya, Azure menyediakan dua layanan khusus untuk menyederhanakan proses dan memberikan keamanan yang lebih besar:

  • Azure Key Vault menyediakan penyimpanan berbasis cloud yang aman untuk kunci akses (bersama dengan kunci kriptografi dan sertifikat, yang tidak tercakup dalam artikel ini). Dengan menggunakan Key Vault, aplikasi mengakses kunci tersebut hanya pada waktu berjalan sehingga tidak pernah muncul langsung dalam kode sumber.

  • Dengan identitas terkelola Microsoft Entra, aplikasi hanya perlu mengautentikasi sekali dengan ID Microsoft Entra. Aplikasi ini kemudian secara otomatis diautentikasi dengan layanan Azure lainnya, termasuk Key Vault. Hasilnya, kode Anda tidak perlu menyibukkan diri dengan kunci atau kredensial lain untuk layanan Azure tersebut. Lebih baik lagi, Anda dapat menjalankan kode yang sama baik secara lokal maupun di cloud dengan persyaratan konfigurasi minimal.

Panduan ini menunjukkan cara menggunakan identitas terkelola Microsoft Entra dan Key Vault bersama-sama di aplikasi yang sama. Dengan menggunakan ID Microsoft Entra dan Key Vault bersama-sama, aplikasi Anda tidak perlu mengautentikasi dirinya sendiri dengan layanan Azure individual, dan dapat dengan mudah dan aman mengakses kunci apa pun yang diperlukan untuk layanan pihak ketiga.

Penting

Artikel ini menggunakan istilah yang lazim dan umum "kunci" untuk merujuk pada apa yang disimpan sebagai "rahasia" di Azure Key Vault, seperti kunci akses untuk REST API. Penggunaan ini tidak boleh dikacaukan dengan manajemen kunci kriptografi Key Vault, yang merupakan fitur terpisah dari rahasia Key Vault.

Contoh skenario aplikasi cloud

Untuk memahami proses autentikasi Azure lebih dalam, pertimbangkan skenario berikut:

  • Aplikasi utama mengekspos titik akhir API publik (tidak diautentikasi) yang merespons permintaan HTTP dengan data JSON. Titik akhir contoh seperti yang ditunjukkan dalam artikel ini diimplementasikan sebagai aplikasi Flask sederhana yang disebarkan ke Azure App Service.

  • Untuk menghasilkan responsnya, API memanggil API pihak ketiga yang memerlukan kunci akses. Aplikasi mengambil kunci akses itu dari Azure Key Vault pada waktu berjalan.

  • Sebelum API mengembalikan respons, API menulis pesan ke Antrean Azure Storage untuk diproses nanti. (Pemrosesan khusus pesan ini tidak relevan dengan skenario utama.)

Diagram of the application scenario

Catatan

Meskipun titik akhir API publik biasanya dilindungi oleh kunci aksesnya sendiri, untuk tujuan artikel ini kami menganggap titik akhir terbuka dan tidak diautentikasi. Asumsi ini menghindari kebingungan antara kebutuhan autentikasi aplikasi dengan pemanggil eksternal titik akhir ini. Skenario ini tidak menunjukkan pemanggil eksternal seperti itu.