Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam tutorial ini, Anda menyebarkan kode Python Flask untuk membuat dan menyebarkan aplikasi web yang berjalan di Azure App Service. Aplikasi web menggunakan identitas terkelola yang ditetapkan sistem (koneksi tanpa kata sandi) dengan kontrol akses berbasis peran Azure untuk mengakses Azure Storage dan Azure Database for PostgreSQL - sumber daya Server Fleksibel. Kode ini menggunakan kelas DefaultAzureCredential dari pustaka klien Azure Identity untuk Python. Kelas secara DefaultAzureCredential otomatis mendeteksi bahwa identitas terkelola ada untuk App Service dan menggunakannya untuk mengakses sumber daya Azure lainnya.
Anda dapat mengonfigurasi koneksi tanpa kata sandi ke layanan Azure menggunakan Konektor Layanan atau Anda dapat mengonfigurasinya secara manual. Tutorial ini menunjukkan cara menggunakan Konektor Layanan. Untuk informasi selengkapnya tentang koneksi tanpa kata sandi, lihat Koneksi tanpa kata sandi untuk layanan Azure. Untuk informasi tentang Konektor Layanan, lihat dokumentasi Konektor Layanan.
Tutorial ini menunjukkan cara membuat dan menyebarkan aplikasi web Python menggunakan Azure CLI. Jalankan perintah dalam tutorial ini di lingkungan Bash apa pun dengan Azure CLI yang diinstal, seperti lingkungan lokal Anda atau Azure Cloud Shell.
Untuk contoh penggunaan identitas terkelola yang ditetapkan pengguna, lihat Membuat dan menyebarkan aplikasi web Django ke Azure dengan identitas terkelola yang ditetapkan pengguna.
Mendapatkan aplikasi sampel
Sampel aplikasi Python menggunakan kerangka kerja Flask tersedia untuk membantu Anda mengikuti tutorial ini. Unduh atau kloning salah satu aplikasi sampel ke workstation lokal Anda.
Kloning sampel dalam sesi Azure Cloud Shell.
git clone https://github.com/Azure-Samples/msdocs-flask-web-app-managed-identity.gitNavigasikan ke folder aplikasi.
cd msdocs-flask-web-app-managed-identity
Memeriksa kode autentikasi
Contoh aplikasi web perlu mengautentikasi ke dua penyimpanan data yang berbeda:
- Server penyimpanan blob Azure tempatnya menyimpan dan mengambil foto yang dikirimkan oleh peninjau.
- Database Azure for PostgreSQL - Database Server Fleksibel tempat database menyimpan restoran dan ulasan.
Ini menggunakan DefaultAzureCredential untuk mengautentikasi ke kedua penyimpanan data. Dengan DefaultAzureCredential, aplikasi dapat dikonfigurasi untuk berjalan di bawah identitas perwakilan layanan yang berbeda, tergantung pada lingkungan tempatnya berjalan, tanpa membuat perubahan pada kode. Misalnya, di lingkungan pengembangan lokal, aplikasi dapat berjalan di bawah identitas pengembang yang masuk ke Azure CLI, sementara di Azure, seperti dalam tutorial ini, aplikasi dapat berjalan di bawah identitas terkelola yang ditetapkan sistemnya.
Dalam kedua kasus, prinsip keamanan yang dijalankan aplikasi harus memiliki peran pada setiap sumber daya Azure yang digunakan aplikasi yang mengizinkannya melakukan tindakan pada sumber daya yang diperlukan aplikasi. Dalam tutorial ini, Anda menggunakan konektor layanan untuk mengaktifkan identitas terkelola yang ditetapkan sistem secara otomatis pada aplikasi Anda di Azure dan untuk menetapkan peran yang sesuai identitas tersebut di akun penyimpanan Azure dan server Azure Database for PostgreSQL.
Setelah identitas terkelola yang ditetapkan sistem diaktifkan dan diberi peran yang sesuai pada penyimpanan data, Anda dapat menggunakan DefaultAzureCredential untuk mengautentikasi dengan sumber daya Azure yang diperlukan.
Kode berikut digunakan untuk membuat klien penyimpanan blob untuk mengunggah foto di app.py. Instans DefaultAzureCredential diberikan kepada klien, yang digunakannya untuk memperoleh token akses untuk melakukan operasi terhadap penyimpanan Azure.
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
azure_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url=account_url,
credential=azure_credential)
Instans DefaultAzureCredential juga digunakan untuk mendapatkan token akses untuk Azure Database for PostgreSQL di ./azureproject/get_conn.py. Dalam hal ini, token diperoleh langsung dengan memanggil get_token pada instans kredensial dan meneruskannya nilai yang sesuai scope . Token kemudian digunakan di tempat kata sandi di URI koneksi PostgreSQL yang dikembalikan ke pemanggil.
azure_credential = DefaultAzureCredential()
token = azure_credential.get_token("https://ossrdbms-aad.database.windows.net")
conn = str(current_app.config.get('DATABASE_URI')).replace('PASSWORDORTOKEN', token.token)
Untuk mempelajari selengkapnya tentang mengautentikasi aplikasi Anda dengan layanan Azure, lihat Mengautentikasi aplikasi Python ke layanan Azure dengan menggunakan Azure SDK untuk Python. Untuk mempelajari selengkapnya tentang DefaultAzureCredential, termasuk cara menyesuaikan rantai kredensial yang dievaluasi untuk lingkungan Anda, lihat Gambaran umum DefaultAzureCredential.
Membuat server Azure PostgreSQL
Siapkan variabel lingkungan yang diperlukan untuk tutorial.
LOCATION="eastus" RAND_ID=$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" ADMIN_USER="demoadmin" ADMIN_PW="ChAnG33#ThsPssWD$RAND_ID"Penting
ADMIN_PWharus berisi 8 hingga 128 karakter dari tiga kategori berikut: huruf besar bahasa Inggris, huruf kecil bahasa Inggris, angka, dan karakter non-nufanumerik. Saat membuat nama pengguna atau kata sandi jangan menggunakan karakter$. Kemudian Anda membuat variabel lingkungan dengan nilai-nilai ini di mana karakter$memiliki arti khusus dalam kontainer Linux yang digunakan untuk menjalankan aplikasi Python.Buat grup sumber daya dengan perintah az group create.
az group create --location $LOCATION --name $RESOURCE_GROUP_NAMEBuat server PostgreSQL dengan perintah az postgres flexible-server create . (Perintah ini dan berikutnya menggunakan karakter kelanjutan baris untuk Bash Shell ('\'). Ubah karakter kelanjutan baris untuk shell Anda jika diperlukan.)
az postgres flexible-server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --location $LOCATION \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --sku-name Standard_D2ds_v4Nama sku adalah nama tingkat harga dan konfigurasi komputasi. Untuk informasi selengkapnya, lihat penentuan harga Azure Database untuk for PostgreSQL. Untuk mencantumkan SKU yang tersedia, gunakan
az postgres flexible-server list-skus --location $LOCATION.Buat database bernama
restaurantmenggunakan perintah az postgres flexible-server execute .az postgres flexible-server execute \ --name $DB_SERVER_NAME \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --database-name postgres \ --querytext 'create database restaurant;'
Membuat Azure App Service dan menyebarkan kode
Buat layanan aplikasi menggunakan perintah az webapp up .
az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.9 \ --sku B1Sku menentukan ukuran (CPU, memori) dan biaya paket layanan aplikasi. Paket layanan B1 (Dasar) dikenakan biaya kecil dalam langganan Azure Anda. Untuk daftar lengkap paket App Service, lihat halaman harga App Service.
Konfigurasikan App Service untuk menggunakan start.sh di repositori dengan perintah az webapp config set .
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Membuat konektor tanpa kata sandi ke sumber daya Azure
Perintah Konektor Layanan mengonfigurasi sumber daya Azure Storage dan Azure Database for PostgreSQL untuk menggunakan identitas terkelola dan kontrol akses berbasis peran Azure. Perintah membuat pengaturan aplikasi di App Service yang menghubungkan aplikasi web Anda ke sumber daya ini. Output dari perintah mencantumkan tindakan konektor layanan yang diambil untuk mengaktifkan kemampuan tanpa kata sandi.
Tambahkan konektor layanan PostgreSQL dengan perintah az webapp connection create postgres-flexible . Identitas terkelola yang ditetapkan sistem digunakan untuk mengautentikasi aplikasi web ke sumber daya target, PostgreSQL dalam hal ini.
az webapp connection create postgres-flexible \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --server $DB_SERVER_NAME \ --database restaurant \ --client-type python \ --system-identityTambahkan konektor layanan penyimpanan dengan perintah az webapp connection create storage-blob .
Perintah ini juga menambahkan akun penyimpanan dan menambahkan aplikasi web dengan peran Kontributor Data Blob Penyimpanan ke akun penyimpanan.
STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \ --new true \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --client-type python \ --system-identity \ --query configurations[].value \ --output tsv) STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))
Membuat kontainer di akun penyimpanan
Contoh aplikasi Python menyimpan foto yang dikirimkan oleh peninjau sebagai blob dalam kontainer di akun penyimpanan Anda.
Saat pengguna mengirimkan foto dengan ulasan mereka, aplikasi sampel menulis gambar ke kontainer menggunakan identitas terkelola yang ditetapkan sistem untuk autentikasi dan otorisasi. Anda mengonfigurasi fungsionalitas ini di bagian terakhir.
Saat pengguna melihat ulasan untuk restoran, aplikasi mengembalikan tautan ke foto dalam penyimpanan blob untuk setiap ulasan yang memiliki satu yang terkait dengannya. Agar browser menampilkan foto, browser harus dapat mengaksesnya di akun penyimpanan Anda. Data blob harus tersedia untuk dibaca secara publik melalui akses anonim (tidak diaturentikasi).
Untuk meningkatkan keamanan, akun penyimpanan dibuat dengan akses anonim ke data blob yang dinonaktifkan secara default. Di bagian ini, Anda mengaktifkan akses baca anonim di akun penyimpanan Anda lalu membuat kontainer bernama foto yang menyediakan akses publik (anonim) ke blob-nya.
Perbarui akun penyimpanan untuk memungkinkan akses baca anonim ke blob dengan perintah az storage account update .
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --allow-blob-public-access trueMengaktifkan akses anonim pada akun penyimpanan tidak memengaruhi akses untuk blob individual. Anda harus secara eksplisit mengaktifkan akses publik ke blob di tingkat kontainer.
Buat kontainer yang disebut foto di akun penyimpanan dengan perintah az storage container create. Izinkan akses baca anonim (publik) ke blob di kontainer yang baru dibuat.
az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --account-key $(az storage account keys list --account-name $STORAGE_ACCOUNT_NAME \ --query [0].value --output tsv)Catatan
Untuk brevity, perintah ini menggunakan kunci akun penyimpanan untuk mengotorisasi dengan akun penyimpanan. Untuk sebagian besar skenario, pendekatan yang direkomendasikan Microsoft adalah menggunakan peran ID Microsoft Entra dan kontrol akses berbasis peran Azure (Azure RBAC). Untuk sekumpulan instruksi cepat, lihat Mulai Cepat: Membuat, mengunduh, dan mencantumkan blob dengan Azure CLI. Beberapa peran Azure memungkinkan Anda membuat kontainer di akun penyimpanan, termasuk Pemilik, Kontributor, Pemilik Data Blob Penyimpanan, dan Kontributor Data Blob Penyimpanan.
Untuk mempelajari selengkapnya tentang akses baca anonim ke data blob, lihat Mengonfigurasi akses baca anonim untuk kontainer dan blob.
Menguji aplikasi web Python di Azure
Contoh aplikasi Python menggunakan paket azure.identity dan kelasnya DefaultAzureCredential . Saat aplikasi berjalan di Azure, DefaultAzureCredential secara otomatis mendeteksi apakah identitas terkelola ada untuk App Service dan, jika demikian, menggunakannya untuk mengakses sumber daya Azure lainnya (penyimpanan dan PostgreSQL dalam hal ini). Tidak perlu menyediakan kunci penyimpanan, sertifikat, atau kredensial ke App Service untuk mengakses sumber daya ini.
Telusuri ke aplikasi yang disebarkan di URL
http://$APP_SERVICE_NAME.azurewebsites.net.Diperlukan waktu satu atau dua menit agar aplikasi dapat dimulai. Jika Anda melihat halaman aplikasi default yang bukan halaman aplikasi sampel default, tunggu sebentar dan refresh browser.
Uji fungsionalitas aplikasi sampel dengan menambahkan restoran dan beberapa ulasan dengan foto untuk restoran.
Informasi restoran dan ulasan disimpan di Azure Database for PostgreSQL dan foto disimpan di Azure Storage. Berikut adalah contoh cuplikan layar:
Penghapusan
Dalam tutorial ini, semua sumber daya Azure dibuat dalam grup sumber daya yang sama. Menghapus grup sumber daya akan dihapus dengan perintah az group delete akan menghapus semua sumber daya dalam grup sumber daya dan merupakan cara tercepat untuk menghapus semua sumber daya Azure yang digunakan untuk aplikasi Anda.
az group delete --name $RESOURCE_GROUP_NAME
Anda dapat secara opsional menambahkan --no-wait argumen untuk mengizinkan perintah kembali sebelum operasi selesai.
Cuplikan layar aplikasi sampel memperlihatkan fungsionalitas ulasan restoran menggunakan Azure App Service, Azure PostgreSQL Database, dan Azure Storage.