Bagikan melalui


Mengautentikasi aplikasi yang dihosting Azure ke sumber daya Azure dengan Azure SDK for Python

Saat Anda menghosting aplikasi di Azure menggunakan layanan seperti Azure App Service, Azure Virtual Machines, atau Azure Container Instances, pendekatan yang direkomendasikan untuk mengautentikasi aplikasi ke sumber daya Azure adalah dengan identitas terkelola.

Identitas terkelola menyediakan identitas untuk aplikasi Anda sehingga dapat terhubung ke sumber daya Azure lainnya tanpa perlu menggunakan kunci rahasia atau rahasia aplikasi lainnya. Secara internal, Azure mengetahui identitas aplikasi Anda dan sumber daya apa yang dapat disambungkannya. Azure menggunakan informasi ini untuk secara otomatis mendapatkan token Microsoft Entra untuk aplikasi guna memungkinkannya terhubung ke sumber daya Azure lainnya, semua tanpa Anda harus mengelola rahasia aplikasi apa pun.

Catatan

Aplikasi yang berjalan di Azure Kubernetes Service (AKS) dapat menggunakan identitas beban kerja untuk mengautentikasi dengan sumber daya Azure. Di AKS, identitas beban kerja mewakili hubungan kepercayaan antara identitas terkelola dan akun layanan Kubernetes. Jika aplikasi yang disebarkan ke AKS dikonfigurasi dengan akun layanan Kubernetes dalam hubungan seperti itu, DefaultAzureCredential mengautentikasi aplikasi ke Azure dengan menggunakan identitas terkelola. Autentikasi dengan menggunakan identitas beban kerja dibahas dalam Menggunakan ID Beban Kerja Microsoft Entra dengan Azure Kubernetes Service. Untuk langkah-langkah tentang cara mengonfigurasi identitas beban kerja, lihat Menyebarkan dan mengonfigurasi identitas beban kerja pada kluster Azure Kubernetes Service (AKS).

Tipe identitas terkelola

Ada dua jenis identitas terkelola:

  • Identitas terkelola yang ditetapkan sistem - Jenis identitas terkelola ini disediakan oleh dan diikat langsung ke sumber daya Azure. Saat Mengaktifkan identitas terkelola pada sumber daya Azure, Anda mendapatkan identitas terkelola yang ditetapkan sistem untuk sumber daya tersebut. Identitas terkelola yang ditetapkan sistem terkait dengan siklus hidup sumber daya Azure terkait. Jadi, ketika sumber daya dihapus, Azure akan secara otomatis menghapus identitas untuk Anda. Karena yang harus Anda lakukan adalah mengaktifkan identitas terkelola untuk sumber daya Azure yang menghosting kode Anda, pendekatan ini adalah jenis identitas terkelola termampukan untuk digunakan.
  • Identitas terkelola yang ditetapkan pengguna - Anda juga dapat membuat identitas terkelola sebagai sumber daya Azure mandiri. Pendekatan ini paling sering digunakan ketika solusi Anda memiliki beberapa beban kerja yang berjalan pada beberapa sumber daya Azure yang semuanya perlu berbagi identitas yang sama dan izin yang sama. Misalnya, jika solusi Anda memiliki komponen yang berjalan pada beberapa App Service dan instans komputer virtual yang semuanya memerlukan akses ke set sumber daya Azure yang sama, identitas terkelola yang ditetapkan pengguna yang digunakan di seluruh sumber daya tersebut masuk akal.

Artikel ini membahas langkah-langkah untuk mengaktifkan dan menggunakan identitas terkelola yang ditetapkan sistem untuk aplikasi. Jika Anda perlu menggunakan identitas terkelola yang ditetapkan pengguna, lihat artikel Mengelola identitas terkelola yang ditetapkan pengguna untuk melihat cara membuat identitas terkelola yang ditetapkan pengguna.

Mengaktifkan identitas terkelola di sumber daya Azure yang menghosting aplikasi

Langkah pertama adalah mengaktifkan identitas terkelola di sumber daya Azure yang menghosting aplikasi Anda. Misalnya, jika Anda menghosting aplikasi Django menggunakan Azure App Service, Anda perlu mengaktifkan identitas terkelola untuk aplikasi web App Service yang menghosting aplikasi Anda. Jika Anda menggunakan komputer virtual untuk menghosting aplikasi, Anda akan mengaktifkan VM untuk menggunakan identitas terkelola.

Anda dapat mengaktifkan identitas terkelola yang akan digunakan untuk sumber daya Azure menggunakan portal Microsoft Azure atau Azure CLI.

Perintah Azure CLI dapat dijalankan di Azure Cloud Shell atau pada stasiun kerja dengan Azure CLI terpasang.

Perintah Azure CLI yang digunakan untuk mengaktifkan identitas terkelola untuk sumber daya Azure adalah formulir az <command-group> identity --resource-group <resource-group-name> --name <resource-name>. Lihat perintah berikut untuk layanan Azure populer.

az webapp identity assign --resource-group <resource-group-name> --name <web-app-name>

Outputnya terlihat seperti berikut ini.

{
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned",
  "userAssignedIdentities": null
}

Nilai principalId adalah ID unik dari identitas terkelola. Simpan salinan output ini karena Anda akan membutuhkan nilai-nilai ini di langkah berikutnya.

Menetapkan peran ke identitas terkelola

Selanjutnya, Anda perlu menentukan peran (izin) apa yang dibutuhkan aplikasi Anda dan menetapkan identitas terkelola ke peran tersebut di Azure. Identitas terkelola dapat ditetapkan peran di sumber daya, grup sumber daya, atau cakupan langganan. Contoh ini menunjukkan cara menetapkan peran di cakupan grup sumber daya karena sebagian besar aplikasi mengelompokkan semua sumber daya Azure mereka ke dalam satu grup sumber daya.

Perintah az role assignment create menetapkan peran ke identitas terkelola. Untuk penerima tugas, gunakan principalId yang Anda salin di langkah 1.

az role assignment create --assignee <managedIdentityprincipalId> \
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
    --role "<roleName>" 

Untuk mendapatkan nama peran yang dapat ditetapkan oleh perwakilan layanan, gunakan perintah az role definition list.

az role definition list \
    --query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
    --output table

Misalnya, untuk mengizinkan identitas terkelola dengan ID aaaaaaaa-bbbb-cccc-1111-222222222222 untuk membaca, menulis, dan menghapus akses ke kontainer blob dan data Azure Storage di semua akun penyimpanan dalam grup sumber daya msdocs-python-sdk-auth-example dalam langganan dengan ID aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e, Anda akan menetapkan principal layanan aplikasi ke peran Kontributor Data BLOB Penyimpanan menggunakan perintah berikut.

az role assignment create --assignee aaaaaaaa-bbbb-cccc-1111-222222222222 \
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"

Untuk informasi tentang menetapkan izin di tingkat sumber daya atau langganan menggunakan Azure CLI, lihat artikel Menetapkan peran Azure menggunakan Azure CLI.

Menerapkan DefaultAzureCredential di aplikasi Anda

Saat kode Anda berjalan di Azure dan identitas terkelola diaktifkan pada sumber daya Azure yang menghosting aplikasi Anda, DefaultAzureCredential menentukan kredensial yang akan digunakan dalam urutan berikut:

  1. Periksa lingkungan untuk perwakilan layanan seperti yang didefinisikan oleh variabel lingkungan AZURE_CLIENT_ID, AZURE_TENANT_ID, dan baik AZURE_CLIENT_SECRET atau AZURE_CLIENT_CERTIFICATE_PATH serta (opsional) AZURE_CLIENT_CERTIFICATE_PASSWORD.
  2. Periksa parameter kata kunci untuk identitas terkelola yang ditetapkan pengguna. Anda dapat meneruskan identitas yang dikelola yang ditetapkan oleh pengguna dengan menentukan ID klien dalam parameter managed_identity_client_id.
  3. Periksa variabel lingkungan AZURE_CLIENT_ID untuk ID klien dari identitas terkelola yang ditetapkan pengguna.
  4. Jika identitas terkelola diaktifkan pada sumber daya Azure, gunakan identitas terkelola yang ditetapkan sistem.

Anda dapat mengecualikan identitas terkelola dari kredensial dengan mengatur exclude_managed_identity_credential parameter Truekata kunci .

Artikel ini menggunakan identitas terkelola yang ditetapkan sistem untuk aplikasi web Azure App Service. Dengan pendekatan ini, Anda tidak perlu mengonfigurasi identitas terkelola di lingkungan atau mengalihkannya sebagai parameter. Langkah-langkah berikut menunjukkan kepada Anda cara menggunakan DefaultAzureCredential.

Pertama, tambahkan paket azure.identity ke aplikasi Anda.

pip install azure-identity

Selanjutnya, untuk kode Python apa pun yang membuat objek klien Azure SDK di aplikasi Anda:

  1. Impor kelas DefaultAzureCredential dari modul azure.identity.
  2. Buat objek DefaultAzureCredential.
  3. Teruskan DefaultAzureCredential objek ke konstruktor objek klien Azure SDK.

Contoh langkah-langkah ini ditampilkan di segmen kode berikut.

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

# Acquire a credential object
token_credential = DefaultAzureCredential()

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

Seperti yang dibahas dalam artikel gambaran umum autentikasi Azure SDK for Python, DefaultAzureCredential mendukung beberapa metode autentikasi dan menentukan metode autentikasi yang digunakan saat runtime. Manfaat dari pendekatan ini adalah aplikasi Anda dapat menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda tanpa menerapkan kode khusus lingkungan. Saat kode sebelumnya dijalankan di stasiun kerja Anda selama pengembangan secara lokal, DefaultAzureCredential menggunakan prinsipal layanan aplikasi, bergantung pada pengaturan lingkungan, atau kredensial alat pengembang untuk mengautentikasi dengan sumber daya Azure lainnya. Dengan demikian, kode yang sama dapat digunakan untuk mengautentikasi aplikasi Anda ke sumber daya Azure selama pengembangan lokal dan saat disebarkan ke Azure.