Mengautentikasi aplikasi Python ke layanan Azure dengan menggunakan Azure SDK untuk Python

Saat aplikasi perlu mengakses sumber daya Azure seperti layanan Azure Storage, Azure Key Vault, atau Azure AI, aplikasi harus diautentikasi ke Azure. Persyaratan ini berlaku untuk semua aplikasi, baik yang disebarkan ke Azure, disebarkan secara lokal, atau sedang dalam pengembangan di stasiun kerja pengembang lokal. Artikel ini menjelaskan pendekatan yang direkomendasikan untuk mengautentikasi aplikasi ke Azure saat Anda menggunakan Azure SDK untuk Python.

Gunakan autentikasi berbasis token daripada string koneksi untuk aplikasi Anda saat mengautentikasi ke sumber daya Azure. Azure SDK untuk Python menyediakan kelas yang mendukung autentikasi berbasis token. Aplikasi dapat mengautentikasi ke sumber daya Azure dengan lancar baik aplikasi dalam pengembangan lokal, disebarkan ke Azure, atau disebarkan ke server lokal.

Jenis autentikasi berbasis token tertentu yang digunakan aplikasi untuk mengautentikasi ke sumber daya Azure bergantung pada tempat aplikasi dijalankan. Jenis autentikasi berbasis token diperlihatkan dalam diagram berikut.

A diagram that shows the recommended token-based authentication strategies for an app depending on where it's running.

  • Saat pengembang menjalankan aplikasi selama pengembangan lokal: Aplikasi mengautentikasi ke Azure dengan menggunakan perwakilan layanan aplikasi untuk pengembangan lokal atau kredensial Azure pengembang. Opsi ini dibahas di bagian Autentikasi selama pengembangan lokal.
  • Saat aplikasi dihosting di Azure: Aplikasi mengautentikasi ke sumber daya Azure dengan menggunakan identitas terkelola. Opsi ini dibahas di bagian Autentikasi di lingkungan server.
  • Saat aplikasi dihosting dan disebarkan secara lokal: Aplikasi mengautentikasi ke sumber daya Azure dengan menggunakan perwakilan layanan aplikasi. Opsi ini dibahas di bagian Autentikasi di lingkungan server.

DefaultAzureCredential

Kelas DefaultAzureCredential yang disediakan oleh Azure SDK memungkinkan aplikasi menggunakan metode autentikasi yang berbeda tergantung pada lingkungan tempat aplikasi dijalankan. Dengan cara ini, aplikasi dapat dipromosikan dari pengembangan lokal ke lingkungan pengujian ke produksi tanpa perubahan kode.

Anda mengonfigurasi metode autentikasi yang sesuai untuk setiap lingkungan, dan DefaultAzureCredential secara otomatis mendeteksi dan menggunakan metode autentikasi tersebut. Penggunaan DefaultAzureCredential lebih disukai daripada logika kondisional pengkodean manual atau bendera fitur untuk menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda.

Detail tentang menggunakan DefaultAzureCredential kelas dibahas di bagian Gunakan DefaultAzureCredential dalam aplikasi.

Keuntungan autentikasi berbasis token

Gunakan autentikasi berbasis token alih-alih menggunakan string koneksi saat Anda membuat aplikasi untuk Azure. Autentikasi berbasis token menawarkan keuntungan berikut daripada mengautentikasi dengan string koneksi:

  • Metode autentikasi berbasis token yang dijelaskan dalam artikel ini memungkinkan Anda membuat izin khusus yang diperlukan oleh aplikasi pada sumber daya Azure. Praktik ini mengikuti prinsip hak istimewa paling sedikit. Sebaliknya, string koneksi memberikan hak penuh untuk sumber daya Azure.
  • Siapa pun atau aplikasi apa pun dengan string koneksi dapat terhubung ke sumber daya Azure, tetapi metode autentikasi berbasis token mencakup akses ke sumber daya hanya ke aplikasi yang dimaksudkan untuk mengakses sumber daya.
  • Dengan identitas terkelola, tidak ada rahasia aplikasi untuk disimpan. Aplikasi ini lebih aman karena tidak ada string koneksi atau rahasia aplikasi yang dapat disusupi.
  • Paket azure.identity di Azure SDK mengelola token untuk Anda di belakang layar. Token terkelola membuat penggunaan autentikasi berbasis token mudah digunakan sebagai string koneksi.

Batasi penggunaan string koneksi ke aplikasi bukti konsep awal atau prototipe pengembangan yang tidak mengakses data produksi atau sensitif. Jika tidak, kelas autentikasi berbasis token yang tersedia di Azure SDK selalu lebih disukai saat mengautentikasi ke sumber daya Azure.

Autentikasi di lingkungan server

Saat Anda menghosting di lingkungan server, setiap aplikasi diberi identitas aplikasi unik per lingkungan tempat aplikasi berjalan. Di Azure, identitas aplikasi diwakili oleh perwakilan layanan. Jenis khusus prinsip keamanan ini mengidentifikasi dan mengautentikasi aplikasi ke Azure. Jenis perwakilan layanan yang akan digunakan untuk aplikasi Anda bergantung pada tempat aplikasi Anda berjalan:

Metode autentikasi Deskripsi
Aplikasi yang dihosting di Azure Aplikasi yang dihosting di Azure harus menggunakan perwakilan layanan identitas terkelola. Identitas terkelola dirancang untuk mewakili identitas aplikasi yang dihosting di Azure dan hanya dapat digunakan dengan aplikasi yang dihosting Azure.

Misalnya, aplikasi web Django yang dihosting di Azure App Service akan diberi identitas terkelola. Identitas terkelola yang ditetapkan ke aplikasi kemudian akan digunakan untuk mengautentikasi aplikasi ke layanan Azure lainnya.

Aplikasi yang berjalan di Azure Kubernetes Service (AKS) dapat menggunakan kredensial identitas Beban Kerja. Kredensial ini didasarkan pada identitas terkelola yang memiliki hubungan kepercayaan dengan akun layanan AKS.
,
Aplikasi yang dihosting di luar Azure
(misalnya, aplikasi lokal)
Aplikasi yang dihosting di luar Azure (misalnya, aplikasi lokal) yang perlu terhubung ke layanan Azure harus menggunakan perwakilan layanan aplikasi. Perwakilan layanan aplikasi mewakili identitas aplikasi di Azure dan dibuat melalui proses pendaftaran aplikasi.

Misalnya, pertimbangkan aplikasi web Django yang dihosting secara lokal yang menggunakan Azure Blob Storage. Anda akan membuat perwakilan layanan aplikasi untuk aplikasi dengan menggunakan proses pendaftaran aplikasi. AZURE_CLIENT_ID, , AZURE_TENANT_IDdan AZURE_CLIENT_SECRET semuanya akan disimpan sebagai variabel lingkungan untuk dibaca oleh aplikasi pada runtime dan memungkinkan aplikasi untuk mengautentikasi ke Azure dengan menggunakan perwakilan layanan aplikasi.

Autentikasi selama pengembangan lokal

Saat aplikasi berjalan di stasiun kerja pengembang selama pengembangan lokal, aplikasi masih harus mengautentikasi ke layanan Azure apa pun yang digunakan oleh aplikasi. Ada dua strategi utama untuk mengautentikasi aplikasi ke Azure selama pengembangan lokal:

Metode autentikasi Deskripsi
Buat objek perwakilan layanan aplikasi khusus yang akan digunakan selama pengembangan lokal. Dalam metode ini, objek perwakilan layanan aplikasi khusus disiapkan dengan menggunakan proses pendaftaran aplikasi untuk digunakan selama pengembangan lokal. Identitas perwakilan layanan kemudian disimpan sebagai variabel lingkungan untuk diakses oleh aplikasi saat dijalankan dalam pengembangan lokal.

Metode ini memungkinkan Anda menetapkan izin sumber daya tertentu yang diperlukan oleh aplikasi ke objek perwakilan layanan yang digunakan oleh pengembang selama pengembangan lokal. Praktik ini memastikan aplikasi hanya memiliki akses ke sumber daya tertentu yang dibutuhkan dan mereplikasi izin yang akan dimiliki aplikasi dalam produksi.

Kelemahan dari pendekatan ini adalah kebutuhan untuk membuat objek perwakilan layanan terpisah untuk setiap pengembang yang bekerja pada aplikasi.

Autentikasi aplikasi ke Azure dengan menggunakan kredensial pengembang selama pengembangan lokal. Dalam metode ini, pengembang harus masuk ke Azure dari Azure CLI, Azure PowerShell, atau Azure Developer CLI di stasiun kerja lokal mereka. Aplikasi kemudian dapat mengakses kredensial pengembang dari penyimpanan kredensial dan menggunakan kredensial tersebut untuk mengakses sumber daya Azure dari aplikasi.

Metode ini memiliki keuntungan dari penyiapan yang lebih mudah karena pengembang hanya perlu masuk ke akun Azure mereka melalui salah satu alat pengembang yang disebutkan di atas. Kerugian dari pendekatan ini adalah bahwa akun pengembang kemungkinan memiliki lebih banyak izin daripada yang diperlukan oleh aplikasi. Akibatnya, aplikasi tidak secara akurat mereplikasi izin yang akan dijalankannya dalam produksi.

Menggunakan DefaultAzureCredential dalam aplikasi

Untuk menggunakan DefaultAzureCredential di aplikasi Python, tambahkan paket azure.identity ke aplikasi Anda.

pip install azure-identity

Contoh kode berikut menunjukkan cara membuat DefaultAzureCredential instans objek dan menggunakannya dengan kelas klien Azure SDK. Dalam hal ini, ini adalah objek yang BlobServiceClient digunakan untuk mengakses Azure Blob Storage.

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Acquire a credential object
credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
        account_url="https://<my_account_name>.blob.core.windows.net",
        credential=credential)

Objek DefaultAzureCredential secara otomatis mendeteksi mekanisme autentikasi yang dikonfigurasi untuk aplikasi dan mendapatkan token yang diperlukan untuk mengautentikasi aplikasi ke Azure. Jika aplikasi menggunakan lebih dari satu klien SDK, Anda dapat menggunakan objek kredensial yang sama dengan setiap objek klien SDK.

Urutan metode autentikasi saat Anda menggunakan DefaultAzureCredential

Secara internal, DefaultAzureCredential menerapkan rantai penyedia info masuk untuk mengautentikasi aplikasi ke sumber daya Azure. Setiap penyedia info masuk dapat mendeteksi apakah kredensial jenis tersebut dikonfigurasi untuk aplikasi. Objek DefaultAzureCredential secara berurutan memeriksa setiap penyedia secara berurutan dan menggunakan kredensial dari penyedia pertama yang memiliki kredensial yang dikonfigurasi.

Urutan di mana DefaultAzureCredential mencari kredensial diperlihatkan dalam diagram dan tabel berikut:

A diagram that shows the sequence in which DefaultAzureCredential checks to see what authentication source is configured for an application.

Jenis Informasi masuk Deskripsi
Lingkungan Objek DefaultAzureCredential membaca sekumpulan variabel lingkungan untuk menentukan apakah perwakilan layanan aplikasi (pengguna aplikasi) diatur untuk aplikasi. Jika demikian, DefaultAzureCredential gunakan nilai-nilai ini untuk mengautentikasi aplikasi ke Azure.

Metode ini paling sering digunakan di lingkungan server, tetapi Anda juga dapat menggunakannya ketika Anda mengembangkannya secara lokal.
Identitas beban kerja Jika aplikasi disebarkan ke Azure Kubernetes Service (AKS) dengan identitas terkelola diaktifkan, DefaultAzureCredential mengautentikasi aplikasi ke Azure dengan menggunakan identitas terkelola tersebut. Identitas beban kerja mewakili trust relationahip antara identitas terkelola yang ditetapkan pengguna dan akun layanan AKS. Autentikasi dengan menggunakan identitas beban kerja dibahas dalam artikel AKS Menggunakan ID Beban Kerja Microsoft Entra dengan Azure Kubernetes Service.
Identitas Terkelola Jika aplikasi disebarkan ke host Azure dengan identitas terkelola diaktifkan, DefaultAzureCredential mengautentikasi aplikasi ke Azure dengan menggunakan identitas terkelola tersebut. Autentikasi dengan menggunakan identitas terkelola dibahas di bagian Autentikasi di lingkungan server.

Metode ini hanya tersedia saat aplikasi dihosting di Azure dengan menggunakan layanan seperti Azure App Service, Azure Functions, atau Azure Virtual Machines.
Azure CLI Jika Anda telah mengautentikasi ke Azure dengan menggunakan az login perintah di Azure CLI, DefaultAzureCredential mengautentikasi aplikasi ke Azure dengan menggunakan akun yang sama.
Azure PowerShell Jika Anda telah mengautentikasi ke Azure dengan menggunakan Connect-AzAccount cmdlet dari Azure PowerShell, DefaultAzureCredential autentikasi aplikasi ke Azure dengan menggunakan akun yang sama.
Azure Developer CLI Jika Anda telah mengautentikasi ke Azure dengan menggunakan azd auth login perintah di Azure Developer CLI, DefaultAzureCredential autentikasi aplikasi ke Azure dengan menggunakan akun yang sama.
Interaktif Jika diaktifkan, DefaultAzureCredential secara interaktif mengautentikasi Anda melalui browser default sistem saat ini. Secara default, opsi ini dinonaktifkan.

Catatan

Karena masalah yang diketahui, VisualStudioCodeCredential telah dihapus dari DefaultAzureCredential rantai token. Ketika masalah diselesaikan dalam rilis mendatang, perubahan ini akan dikembalikan. Untuk informasi selengkapnya, lihat Pustaka klien Azure Identity untuk Python.