Bagikan melalui


Tutorial: Mengamankan koneksi Cognitive Service dari Python 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 praktik. 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

Mempersiapkan 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. Buat 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 Python

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

# Clone and prepare sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/python
zip -r default.zip .

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

az appservice plan create --resource-group $groupName --name $appName --sku FREE --location $region --is-linux
az webapp create --resource-group $groupName --plan $appName --name $appName --runtime "python:3.11"
az webapp config appsettings set --resource-group $groupName --name $appName --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
az webapp deploy --resource-group $groupName --name $appName --src-path ./default.zip

Perintah sebelumnya:

  • Membuat paket layanan aplikasi linux
  • Membuat aplikasi web untuk Python 3.11
  • Mengonfigurasi aplikasi web untuk menginstal paket python pada penyebaran
  • Unggah file zip, dan instal paket python

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. Membuat 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-authorization mengatur 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

Di langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak 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 beberapa saat untuk dijalankan.

Langkah berikutnya