Tutorial: Membuat aplikasi fungsi yang terhubung ke layanan Azure menggunakan identitas, bukan rahasia

Tutorial ini menunjukkan kepada Anda cara mengonfigurasi aplikasi fungsi menggunakan identitas Microsoft Entra alih-alih rahasia atau string koneksi, jika memungkinkan. Menggunakan identitas membantu Anda menghindari kebocoran rahasia sensitif secara tidak sengaja dan dapat memberikan visibilitas yang lebih baik tentang cara data diakses. Untuk mempelajari selengkapnya tentang koneksi berbasis identitas, lihat mengonfigurasi koneksi berbasis identitas.

Meski prosedur yang ditampilkan umumnya berfungsi untuk semua bahasa, saat ini tutorial ini secara khusus mendukung fungsi pustaka kelas C # di Windows.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat aplikasi fungsi di Azure menggunakan templat ARM
  • Mengaktifkan identitas terkelola yang ditetapkan sistem dan yang ditetapkan pengguna di aplikasi fungsi
  • Membuat penetapan peran yang memberikan izin ke sumber daya lain
  • Memindahkan rahasia yang tidak dapat diganti dengan identitas ke Azure Key Vault
  • Mengonfigurasi aplikasi untuk terhubung ke penyimpanan host default menggunakan identitas terkelola

Setelah menyelesaikan tutorial ini, Anda harus menyelesaikan tutorial lanjutan yang menunjukkan cara menggunakan koneksi berbasis identitas alih-alih rahasia dengan pemicu dan ikatan.

Prasyarat

Mengapa menggunakan identitas?

Mengelola rahasia dan kredensial adalah tantangan umum bagi tim dengan berbagai ukuran. Rahasia perlu diamankan dari pencurian atau pengungkapan yang tidak disengaja, dan mungkin perlu dirotasi secara berkala. Banyak layanan Azure memungkinkan Anda menggunakan identitas di ID Microsoft Entra untuk mengautentikasi klien dan memeriksa izin yang dapat dimodifikasi dan dicabut dengan cepat. Hal ini memungkinkan kontrol yang lebih besar atas keamanan aplikasi dengan overhead operasional yang lebih sedikit. Identitas bisa menjadi pengguna manusia, seperti pengembang aplikasi, atau aplikasi yang berjalan di Azure dengan identitas terkelola.

Beberapa layanan tidak mendukung autentikasi Microsoft Entra, sehingga rahasia mungkin masih diperlukan oleh aplikasi Anda. Namun, rahasia dapat disimpan di Azure Key Vault, yang membantu menyederhanakan siklus hidup manajemen untuk rahasia Anda. Akses ke brankas kunci juga dikendalikan dengan identitas.

Dengan memahami cara menggunakan identitas alih-alih rahasia, jika bisa, dan menggunakan Key Vault jika tidak bisa, Anda akan dapat mengurangi risiko, mengurangi overhead operasional, dan meningkatkan postur keamanan untuk aplikasi Anda secara umum.

Membuat aplikasi fungsi yang menggunakan Key Vault untuk rahasia yang diperlukan

Azure Files adalah contoh layanan yang belum mendukung autentikasi Microsoft Entra untuk berbagi file SMB. Azure Files adalah sistem file default untuk penyebaran Windows pada paket Premium dan Konsumsi. Meski kita dapat menghapus Azure Files sepenuhnya, tindakan ini menghadirkan batasan yang mungkin tidak Anda inginkan. Sebagai gantinya, Anda akan memindahkan string koneksi Azure Files ke Azure Key Vault. Dengan begitu, Azure Files dikelola secara terpusat, dengan akses yang dikontrol oleh identitas.

Membuat Azure Key Vault

Pertama Anda akan membutuhkan brankas kunci untuk menyimpan rahasia. Anda akan mengonfigurasinya untuk menggunakan Kontrol akses berbasis peran (RBAC) Azure untuk menentukan siapa yang dapat membaca rahasia dari brankas.

  1. Di portal Microsoft Azure, pilih Buat sumber daya(+).

  2. Pada halaman Buat sumber daya, pilih Keamanan>Brankas Kunci.

  3. Di halaman Dasar, gunakan tabel berikut untuk mengonfigurasi brankas kunci.

    Opsi Nilai yang disarankan Deskripsi
    Langganan Langganan Anda Langganan sebagai dasar aplikasi fungsi baru ini dibuat.
    Grup Sumber Daya myResourceGroup Nama untuk grup sumber daya baru tempat Anda akan membuat aplikasi fungsi.
    Nama brankas kunci Nama unik secara global Nama yang mengidentifikasi brankas kunci baru. Nama brankas hanya boleh berisi karakter alfanumerik dan tanda hubung, serta tidak dapat dimulai dengan angka.
    Tingkatan harga Standard Opsi untuk penagihan. Standar sudah cukup untuk tutorial ini.
    Wilayah Wilayah pilihan Pilih wilayah di dekat Anda atau di dekat layanan lain yang diakses fungsi Anda.

    Gunakan pilihan default untuk bagian "Opsi pemulihan".

  4. Catat nama yang Anda gunakan, karena Anda memerlukannya nanti.

  5. Klik Berikutnya: Kebijakan Akses untuk menavigasi ke tab Kebijakan Akses.

  6. Di bawah Model izin, pilih Kontrol akses berbasis peran Azure

  7. Pilih Tinjau + buat. Tinjau konfigurasi, lalu klik Buat.

Menyiapkan identitas dan izin untuk aplikasi

Untuk menggunakan Azure Key Vault, aplikasi Anda harus memiliki identitas yang dapat diberikan izin untuk membaca rahasia. Aplikasi ini akan menggunakan identitas yang ditetapkan pengguna sehingga izin dapat disiapkan bahkan sebelum aplikasi dibuat. Anda dapat mempelajari selengkapnya tentang identitas terkelola untuk Azure Functions dalam topik Cara menggunakan identitas terkelola dalam Azure Functions.

  1. Di portal Microsoft Azure, pilih Buat sumber daya(+).

  2. Pada halaman Buat sumber daya, pilih Identitas>Identitas Terkelola yang Ditetapkan Pengguna.

  3. Di halaman Dasar, gunakan tabel berikut untuk mengonfigurasi identitas.

    Opsi Nilai yang disarankan Deskripsi
    Langganan Langganan Anda Langganan sebagai dasar aplikasi fungsi baru ini dibuat.
    Grup Sumber Daya myResourceGroup Nama untuk grup sumber daya baru tempat Anda akan membuat aplikasi fungsi.
    Wilayah Wilayah pilihan Pilih wilayah di dekat Anda atau di dekat layanan lain yang diakses fungsi Anda.
    Nama Nama unik secara global Nama yang mengidentifikasi identitas baru yang ditetapkan pengguna Anda.
  4. Pilih Tinjau + buat. Tinjau konfigurasi, lalu klik Buat.

  5. Setelah dibuat, buka identitas di portal. Pilih Properti, dan catat ID Sumber Daya, karena Anda akan memerlukannya nanti.

  6. Di panel Penetapan Peran Azure, pilih Tambahkan penetapan peran (Pratinjau).

  7. Di halaman Tambahkan penetapan peran (Pratinjau), gunakan opsi seperti yang ditampilkan pada tabel di bawah ini.

    Opsi Nilai yang disarankan Deskripsi
    Cakupan Key Vault Cakupan adalah kumpulan sumber daya yang menerapkan penetapan peran. Cakupan memiliki tingkat yang diwariskan pada tingkat yang lebih rendah. Misalnya, jika Anda memilih cakupan langganan, penetapan peran berlaku untuk semua grup sumber daya dan sumber daya dalam langganan.
    Langganan Langganan Anda Langganan sebagai dasar aplikasi fungsi baru ini dibuat.
    Sumber daya Brankas kunci Anda Brankas kunci yang Anda buat sebelumnya.
    Peran Pengguna Rahasia Key Vault Peran adalah kumpulan izin yang diberikan. Pengguna Rahasia Key Vault memberikan izin untuk identitas guna membaca nilai-nilai rahasia dari brankas.
  8. Pilih Simpan. Mungkin diperlukan satu atau dua menit agar peran muncul saat Anda menyegarkan daftar penetapan peran untuk identitas.

Sekarang identitas akan dapat membaca rahasia yang tersimpan di brankas kunci. Nanti dalam tutorial ini, Anda akan menambahkan penetapan peran tambahan untuk tujuan yang berbeda.

Membuat templat untuk membuat aplikasi fungsi

Pengalaman portal untuk membuat aplikasi fungsi tidak berinteraksi dengan Azure Key Vault, jadi Anda perlu membuat dan mengedit templat Azure Resource Manager. Anda kemudian dapat menggunakan templat ini untuk membuat aplikasi fungsi merujuk string koneksi Azure Files dari brankas kunci.

Penting

Jangan membuat aplikasi fungsi hingga Anda selesai mengedit templat ARM. Konfigurasi Azure Files perlu disiapkan pada waktu pembuatan aplikasi.

  1. Di portal Microsoft Azure, pilih Buat sumber daya(+).

  2. Di halaman Buat sumber daya, pilih Komputasi>Aplikasi Fungsi.

  3. Di halaman Dasar, gunakan tabel berikut untuk mengonfigurasi aplikasi fungsi.

    Opsi Nilai yang disarankan Deskripsi
    Langganan Langganan Anda Langganan sebagai dasar aplikasi fungsi baru ini dibuat.
    Grup Sumber Daya myResourceGroup Nama untuk grup sumber daya baru tempat Anda akan membuat aplikasi fungsi.
    Nama Aplikasi Fungsi Nama unik secara global Nama yang akan mengidentifikasi aplikasi fungsi baru Anda. Karakter yang valid a-z (peka huruf besar dan kecil), 0-9, dan -.
    Mempublikasikan Kode Opsi untuk menerbitkan file kode atau kontainer Docker.
    Tumpukan runtime .NET Tutorial ini menggunakan .NET.
    Wilayah Wilayah pilihan Pilih wilayah di dekat Anda atau di dekat layanan lain yang diakses fungsi Anda.
  4. Pilih Tinjau + buat. Aplikasi Anda menggunakan nilai default pada halaman Hosting dan Pemantauan. Anda dipersilakan untuk meninjau opsi default, dan opsi ini akan disertakan dalam templat ARM yang Anda buat.

  5. Alih-alih membuat aplikasi fungsi Anda di sini, pilih Unduh template untuk otomatisasi yang ada di sebelah kanan tombol Berikutnya.

  6. Di halaman templat, pilih Sebarkan, lalu di halaman Penyebaran kustom, pilih Edit templat.

    Screenshot of where to find the deploy button at the top of the template screen.

Mengedit templat

Anda sekarang akan mengedit templat untuk menyimpan string koneksi Azure Files di Key Vault dan memungkinkan aplikasi fungsi Anda untuk mereferensikannya. Pastikan Anda memiliki nilai-nilai berikut dari bagian sebelumnya sebelum melanjutkan:

  • ID sumber daya identitas yang ditetapkan pengguna
  • Nama brankas kunci Anda

Catatan

Jika membuat templat lengkap untuk otomatisasi, Anda perlu menyertakan definisi untuk sumber daya identitas dan penetapan peran, dengan klausa dependsOn yang sesuai. Ini akan menggantikan langkah-langkah sebelumnya yang menggunakan portal. Konsultasikan panduan Azure Resource Manager dan dokumentasi untuk setiap layanan.

  1. Di editor, temukan di mana array resources dimulai. Sebelum definisi aplikasi fungsi, tambahkan bagian berikut yang menempatkan string koneksi Azure Files ke Key Vault. Ganti "VAULT_NAME" dengan nama brankas kunci Anda.

    {
        "type": "Microsoft.KeyVault/vaults/secrets",
        "apiVersion": "2016-10-01",
        "name": "VAULT_NAME/azurefilesconnectionstring",
        "properties": {
            "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
        },
        "dependsOn": [
            "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]"
        ]
    },
    
  2. Dalam definisi untuk sumber daya aplikasi fungsi (dengan type diatur ke Microsoft.Web/sites), tambahkan Microsoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring ke array dependsOn. Ganti lagi "VAULT_NAME" dengan nama brankas kunci Anda. Tindakan ini membuat aplikasi Anda tidak akan dibuat sebelum rahasia ditentukan. Array dependsOn akan terlihat seperti contoh berikut.

        {
            "type": "Microsoft.Web/sites",
            "apiVersion": "2018-11-01",
            "name": "[parameters('name')]",
            "location": "[parameters('location')]",
            "tags": null,
            "dependsOn": [
                "microsoft.insights/components/idcxntut",
                "Microsoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring",
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]"
            ],
            // ...
        }
    
  3. Tambahkan blok identitydari contoh berikut ke dalam definisi untuk sumber daya aplikasi fungsi Anda. Ganti "IDENTITY_RESOURCE_ID" untuk ID sumber daya identitas yang ditetapkan pengguna Anda.

    {
        "apiVersion": "2018-11-01",
        "name": "[parameters('name')]",
        "type": "Microsoft.Web/sites",
        "kind": "functionapp",
        "location": "[parameters('location')]",
        "identity": {
            "type": "SystemAssigned,UserAssigned",
            "userAssignedIdentities": {
                "IDENTITY_RESOURCE_ID": {}
            }
        },
        "tags": null,
        // ...
    }
    

    Blok identity ini juga menyiapkan identitas yang ditetapkan sistem yang akan Anda gunakan nanti dalam tutorial ini.

  4. Tambahkan properti keyVaultReferenceIdentity ke objek properties untuk aplikasi fungsi seperti pada contoh di bawah ini. Ganti "IDENTITY_RESOURCE_ID" untuk ID sumber daya identitas yang ditetapkan pengguna Anda.

    {
        // ...
         "properties": {
                "name": "[parameters('name')]",
                "keyVaultReferenceIdentity": "IDENTITY_RESOURCE_ID",
                // ...
         }
    }
    

    Anda memerlukan konfigurasi ini karena aplikasi dapat memiliki konfigurasi beberapa identitas yang ditetapkan pengguna. Setiap kali Anda ingin menggunakan identitas yang ditetapkan pengguna, Anda harus menentukan identitas melalui beberapa ID. Ini tidak berlaku untuk identitas yang ditetapkan sistem, karena sebuah aplikasi hanya akan memiliki satu. Banyak fitur yang menggunakan identitas terkelola yang menganggap mereka harus menggunakan identitas yang ditetapkan sistem secara default.

  5. Sekarang temukan objek JSON yang mendefinisikan pengaturan aplikasi WEBSITE_CONTENTAZUREFILECONNECTIONSTRING, yang seharusnya terlihat seperti contoh berikut:

    {
        "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
    },
    
  6. Ganti bidang value dengan referensi ke rahasia seperti yang ditampilkan pada contoh berikut. Ganti "VAULT_NAME" dengan nama brankas kunci Anda.

    {
        "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
        "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(resourceId('Microsoft.KeyVault/vaults/secrets', 'VAULT_NAME', 'azurefilesconnectionstring')).secretUri, ')')]"
    },
    
  7. Pilih Simpan untuk menyimpan templat ARM yang diperbarui.

Menyebarkan templat yang dimodifikasi

  1. Pastikan opsi buat Anda, termasuk Grup Sumber Daya, masih benar dan pilih Tinjau + buat.

  2. Setelah templat Anda memvalidasi, catat Nama Akun Penyimpanan karena Anda akan menggunakan akun ini nanti. Terakhir, pilih Buat untuk membuat sumber daya Azure dan menyebarkan kode ke aplikasi fungsi.

  3. Setelah penyebaran selesai, pilih Buka grup sumber daya lalu pilih aplikasi fungsi baru.

Selamat! Anda telah berhasil membuat aplikasi fungsi untuk mereferensikan string koneksi Azure Files dari Azure Key Vault.

Setiap kali aplikasi Anda perlu menambahkan referensi ke rahasia, Anda hanya perlu menentukan pengaturan aplikasi baru yang menunjuk ke nilai yang tersimpan di Key Vault. Anda dapat mempelajari lebih lanjut tentang ini di Referensi Key Vault untuk Azure Functions.

Tip

String koneksi Application Insights dan kunci instrumentasi yang disertakan tidak dianggap rahasia dan dapat diambil dari App Insights menggunakan izin Pembaca. Anda tidak perlu memindahkannya ke Key Vault, meski Anda pasti bisa melakukannya.

Menggunakan identitas terkelola untuk AzureWebJobsStorage

Selanjutnya Anda akan menggunakan identitas yang ditetapkan sistem yang dikonfigurasi pada langkah-langkah sebelumnya untuk koneksi AzureWebJobsStorage. AzureWebJobsStorage digunakan oleh runtime Functions serta oleh beberapa pemicu dan ikatan untuk mengoordinasikan beberapa instans yang berjalan. Hal ini diperlukan agar aplikasi fungsi dapat beroperasi, dan seperti Azure Files, dikonfigurasi dengan string koneksi secara default ketika Anda membuat aplikasi fungsi baru.

Memberikan akses identitas yang ditetapkan sistem ke akun penyimpanan

Mirip dengan langkah-langkah yang Anda ambil sebelumnya dengan identitas yang ditetapkan pengguna dan brankas kunci, Anda sekarang akan membuat penetapan peran yang memberikan akses identitas yang ditetapkan sistem ke akun penyimpanan Anda.

  1. Di portal Microsoft Azure, navigasikan ke akun penyimpanan yang telah dibuat dengan aplikasi fungsi Anda.

  2. Pilih Kontrol Akses (IAM) . Di sinilah Anda dapat melihat dan mengonfigurasi siapa yang memiliki akses ke sumber daya.

  3. Pilih Tambahkan, lalu pilih Tambahkan penetapan peran.

  4. Cari Pemilik Data Penyimpanan Blob, pilih, dan klik Berikutnya

  5. Pada tab Anggota, di bagian Tetapkan akses ke, pilih Identitas Terkelola

  6. Klik Pilih anggota untuk membuka panel Pilih identitas terkelola.

  7. Konfirmasikan bahwa Langganan adalah tempat Anda sebelumnya membuat sumber daya.

  8. Di pemilih Identitas terkelola, pilih Aplikasi Fungsi dari kategori Identitas terkelola yang ditetapkan sistem. Label "Aplikasi Fungsi" mungkin memiliki sejumlah tanda kurung di sebelahnya, menunjukkan jumlah aplikasi dalam langganan dengan identitas yang ditetapkan sistem.

  9. Aplikasi Anda akan muncul dalam daftar di bawah bidang input. Jika tidak melihatnya, Anda dapat menggunakan kotak Pilih untuk memfilter hasil dengan nama aplikasi Anda.

  10. Klik aplikasi Anda. Tindakan ini seharunsya pindah ke bagian Anggota yang dipilih. Klik Pilih.

  11. Kembali di layar Tambahkan penetapan peran, klik Tinjau + tetapkan. Tinjau konfigurasi, lalu klik Tinjau + tetapkan.

Tip

Jika Anda berniat menggunakan aplikasi fungsi untuk fungsi pemicu blob, Anda harus mengulangi langkah-langkah berikut untuk peran Kontributor Akun Penyimpanan dan Kontributor Penyimpanan Data Antrean atas akun yang digunakan oleh AzureWebJobsStorage. Untuk mempelajari selengkapnya, lihat Koneksi berbasis identitas pemicu blob.

Edit konfigurasi AzureWebJobsStorage

Selanjutnya Anda akan memperbarui aplikasi fungsi untuk menggunakan identitas yang ditetapkan sistem saat menggunakan layanan blob untuk penyimpanan host.

Penting

Konfigurasi AzureWebJobsStorage ini digunakan oleh beberapa pemicu dan ikatan, serta ekstensi tersebut harus dapat menggunakan koneksi berbasis identitas juga. Aplikasi yang menggunakan pemicu blob atau pemicu hub peristiwa mungkin perlu memperbarui ekstensi tersebut. Belum ada kekhawatiran karena belum ada fungsi yang ditetapkan untuk aplikasi ini. Untuk mempelajari selengkapnya tentang persyaratan ini, lihat Koneksi untuk menghosting penyimpanan dengan identitas.

Demikian pula, AzureWebJobsStorage digunakan untuk artefak penyebaran saat menggunakan build sisi server di Linux Consumption. Saat Anda mengaktifkan koneksi berbasis identitas untuk AzureWebJobsStorage di Linux Consumption, Anda harus melakukan penyebaran melalui paket penyebaran eksternal.

  1. Di portal Microsoft Azure, navigasikan ke aplikasi fungsi Anda.

  2. Di bawah Pengaturan, pilih Konfigurasi.

  3. Pilih tombol Edit di samping pengaturan aplikasi AzureWebJobsStorage, dan ubah berdasarkan nilai berikut.

    Opsi Nilai yang disarankan Deskripsi
    Nama AzureWebJobsStorage__accountName Perbarui nama dari AzureWebJobsStorage menjadi nama AzureWebJobsStorage__accountName. Pengaturan ini memberitahu host untuk menggunakan identitas alih-alih mencari rahasia yang tersimpan. Pengaturan baru menggunakan garis bawah ganda (__), yang merupakan karakter khusus dalam pengaturan aplikasi.
    Nilai Nama akun Anda Perbarui nama string koneksi menjadi StorageAccountName.

    Konfigurasi ini akan memberi tahu sistem agar menggunakan identitas untuk terhubung ke sumber daya.

  4. Pilih OKE lalu pilih Simpan>Lanjutkan untuk menyimpan perubahan Anda.

Anda telah menghapus persyaratan string koneksi penyimpanan untuk AzureWebJobsStorage dengan mengonfigurasi aplikasi Anda untuk terhubung ke blob menggunakan identitas terkelola.

Catatan

Sintaksis __accountName khusus untuk koneksi AzureWebJobsStorage dan tidak dapat digunakan untuk koneksi penyimpanan lainnya. Untuk mempelajari cara menetapkan koneksi lainnya, lihat referensi untuk setiap pemicu dan pengikatan data yang digunakan aplikasi Anda.

Langkah berikutnya

Tutorial ini menunjukkan cara membuat aplikasi fungsi tanpa menyimpan rahasia dalam konfigurasinya.

Dalam tutorial berikutnya, Anda akan belajar cara menggunakan identitas dalam koneksi pemicu dan ikatan.