Tutorial: Mengamankan koneksi Cognitive Service dari .NET App Service menggunakan Key Vault

Azure App Service dapat menggunakan identitas terkelola untuk tersambung ke layanan ujung belakang tanpa string koneksi, yang menghilangkan rahasia koneksi untuk mengelola dan menjaga konektivitas ujung belakang Anda tetap aman di lingkungan produksi. Untuk layanan ujung belakang yang tidak mendukung identitas terkelola dan masih memerlukan rahasia koneksi, Anda dapat menggunakan Key Vault untuk mengelola rahasia koneksi. Tutorial ini menggunakan layanan Azure AI sebagai contoh untuk menunjukkan kepada Anda bagaimana hal itu dilakukan dalam praktiknya. Setelah selesai, Anda memiliki aplikasi yang melakukan panggilan terprogram ke layanan Azure AI, tanpa menyimpan rahasia koneksi apa pun di dalam App Service.

Tip

Layanan Azure AI mendukung autentikasi melalui identitas terkelola, tetapi tutorial ini menggunakan autentikasi kunci langganan untuk menunjukkan bagaimana Anda dapat terhubung ke layanan Azure yang tidak mendukung identitas terkelola dari App Services.

Diagram arsitektur untuk skenario tutorial.

Dengan arsitektur ini:

  • Konektivitas ke Key Vault diamankan dengan identitas yang dikelola
  • App Service mengakses rahasia menggunakan referensi Key Vault sebagai pengaturan aplikasi.
  • Akses ke brankas kunci dibatasi untuk aplikasi. Kontributor aplikasi, seperti admin, mungkin memiliki kontrol penuh atas sumber daya App Service, dan pada saat yang sama tidak memiliki akses ke rahasia Key Vault.
  • Jika kode aplikasi Anda sudah mengakses rahasia koneksi dengan pengaturan aplikasi, tidak diperlukan perubahan.

Apa yang akan Anda pelajari:

  • Mengaktifkan identitas terkelola
  • Menggunakan identitas terkelola untuk tersambung ke Key Vault
  • Menggunakan referensi Key Vault
  • Mengakses layanan Azure AI

Prasyarat

Persiapkan lingkungan Anda untuk Azure CLI.

Membuat aplikasi dengan konektivitas ke layanan Azure AI

  1. Buat grup sumber daya untuk menampung semua sumber daya Anda:

    # Save resource group name as variable for convenience
    groupName=myKVResourceGroup
    region=westeurope
    
    az group create --name $groupName --location $region
    
  2. Membuat sumber daya layanan Azure AI. Ganti <cs-resource-name> dengan nama yang unik pilihan Anda.

    # Save resource name as variable for convenience. 
    csResourceName=<cs-resource-name>
    
    az cognitiveservices account create --resource-group $groupName --name $csResourceName --location $region --kind TextAnalytics --sku F0 --custom-domain $csResourceName
    

    Catatan

    --sku F0 membuat sumber daya layanan Azure AI tingkat gratis. Setiap langganan dibatasi pada kuota satu sumber daya TextAnalytics tingkat gratis. Jika Anda sudah melebihi kuota, gunakan --sku S sebagai gantinya.

Mengonfigurasi aplikasi .NET

Mengkloning repositori sampel secara lokal dan menyebarkan aplikasi contoh ke App Service. Ganti <app-name> dengan nama yang unik.

# Save app name as variable for convenience
appName=<app-name>

# Clone sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/dotnet

az webapp up --sku F1 --resource-group $groupName --name $appName --plan $appName --location $region

Mengonfigurasi rahasia sebagai pengaturan aplikasi

  1. Konfigurasikan rahasia layanan Azure AI sebagai pengaturan CS_ACCOUNT_NAME aplikasi dan CS_ACCOUNT_KEY.

    # Get subscription key for Cognitive Services resource
    csKey1=$(az cognitiveservices account keys list --resource-group $groupName --name $csResourceName --query key1 --output tsv)
    
    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="$csResourceName" CS_ACCOUNT_KEY="$csKey1"
    
  2. Di browser, navigasikan ke aplikasi penyebaran Anda di <app-name>.azurewebsites.net dan coba pendeteksi bahasa dengan string dalam berbagai bahasa.

    Cuplikan layar yang menunjukkan aplikasi pendeteksi bahasa yang disebarkan di App Service.

    Jika melihat kode aplikasi, Anda dapat melihat output debug untuk hasil deteksi dalam warna font yang sama dengan latar belakang. Anda dapat melihat hasil deteksi dengan mencoba menyorot spasi kosong langsung di bawah hasil.

Konektivitas ujung belakang yang aman

Saat ini, rahasia koneksi disimpan sebagai pengaturan aplikasi di aplikasi App Service Anda. Pendekatan ini sudah mengamankan rahasia koneksi dari dasar kode aplikasi Anda. Tetapi, setiap kontributor yang dapat mengelola aplikasi Anda juga dapat melihat pengaturan aplikasi. Pada langkah ini, Anda memindahkan rahasia koneksi ke brankas kunci, dan mengunci akses sehingga hanya Anda yang dapat mengelolanya dan hanya aplikasi App Service yang dapat membacanya menggunakan identitas terkelola.

  1. Buat brankas kunci. Ganti <vault-name> dengan nama yang unik.

    # Save app name as variable for convenience
    vaultName=<vault-name>
    
    az keyvault create --resource-group $groupName --name $vaultName --location $region --sku standard --enable-rbac-authorization
    

    Parameter --enable-rbac-authorizationmengatur kontrol akses berbasis peran (RBAC) Azure sebagai model izin. Pengaturan ini secara default membatalkan semua izin kebijakan akses.

  2. Beri diri Anda peran RBAC Petugas Rahasia Key Vault untuk brankas.

    vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv)
    myId=$(az ad signed-in-user show --query id --output tsv)
    az role assignment create --role "Key Vault Secrets Officer" --assignee-object-id $myId --assignee-principal-type User --scope $vaultResourceId
    
  3. Aktifkan identitas terkelola yang ditetapkan sistem untuk aplikasi Anda, dan berikan peran RBAC Pengguna Rahasia Key Vault untuk brankas.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Tambahkan nama sumber daya layanan Azure AI dan kunci langganan sebagai rahasia ke vault, dan simpan ID mereka sebagai variabel lingkungan untuk langkah berikutnya.

    csResourceKVUri=$(az keyvault secret set --vault-name $vaultName --name csresource --value $csResourceName --query id --output tsv)
    csKeyKVUri=$(az keyvault secret set --vault-name $vaultName --name cskey --value $csKey1 --query id --output tsv)
    
  5. Sebelumnya, Anda mengatur rahasia sebagai pengaturan aplikasi CS_ACCOUNT_NAME dan CS_ACCOUNT_KEY di aplikasi. Sekarang, atur sebagai referensi brankas kunci.

    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
    
  6. Di browser, navigasikan ke <app-name>.azurewebsites.net lagi. Jika Anda mendapatkan hasil deteksi kembali, maka Anda menyambungkan ke titik akhir layanan Azure AI dengan referensi brankas kunci.

Selamat, aplikasi Anda sekarang terhubung ke layanan Azure AI menggunakan rahasia yang disimpan di brankas kunci Anda, tanpa perubahan apa pun pada kode aplikasi Anda.

Membersihkan sumber daya

Dalam langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak ingin membutuhkan sumber daya ini di masa mendatang, hapus grup sumber daya dengan menjalankan perintah berikut ini di Cloud Shell:

az group delete --name $groupName

Perintah ini mungkin perlu waktu satu menit untuk dijalankan.

Langkah berikutnya