Contoh: Mengakses Azure Storage menggunakan pustaka Azure untuk Python
Dalam artikel ini, Anda mempelajari cara menggunakan pustaka klien Azure dalam kode aplikasi Python untuk mengunggah file ke kontainer penyimpanan Azure Blob. Artikel ini mengasumsikan Anda telah membuat sumber daya yang ditampilkan di Contoh: Membuat Azure Storage.
Semua perintah dalam artikel ini bekerja secara sama di bash Linux/macOS dan shell perintah Windows kecuali ada catatan.
1. Siapkan lingkungan pengembangan lokal Anda
Jika Anda belum melakukannya, siapkan lingkungan tempat Anda dapat menjalankan kode ini. Berikut ini adalah beberapa opsi:
Konfigurasikan lingkungan virtual Python menggunakan
venv
atau alat pilihan Anda. Anda dapat membuat lingkungan virtual secara lokal atau di Azure Cloud Shell dan menjalankan kode di sana. Pastikan untuk mengaktifkan lingkungan virtual untuk mulai menggunakannya.Gunakan lingkungan conda.
Gunakan Kontainer Dev di Visual Studio Code atau GitHub Codespaces.
2. Instal paket pustaka
Dalam file requirements.txt Anda, tambahkan baris untuk paket pustaka klien yang Anda butuhkan dan simpan file.
azure-storage-blob
azure-identity
Kemudian, di terminal atau prompt perintah Anda, instal persyaratannya.
pip install -r requirements.txt
3. Buat file untuk diunggah
Buat file sumber bernama sample-source.txt. Nama file ini adalah apa yang diharapkan kode.
Hello there, Azure Storage. I'm a friendly file ready to be stored in a blob.
4. Gunakan penyimpanan blob dari kode aplikasi
Bagian ini menunjukkan dua cara untuk mengakses data dalam kontainer blob yang Anda buat di Contoh: Membuat Azure Storage. Untuk mengakses data dalam kontainer blob, aplikasi Anda harus dapat mengautentikasi dengan Azure dan diotorisasi untuk mengakses data dalam kontainer. Bagian ini menyajikan dua cara untuk melakukan ini:
Metode Tanpa Kata Sandi (Disarankan) mengautentikasi aplikasi dengan menggunakan
DefaultAzureCredential
.DefaultAzureCredential
adalah kredensial berantai yang dapat mengautentikasi aplikasi (atau pengguna) menggunakan urutan kredensial yang berbeda, termasuk kredensial alat pengembang, perwakilan layanan aplikasi, dan identitas terkelola.Metode String koneksi menggunakan string koneksi untuk mengakses akun penyimpanan secara langsung.
Untuk alasan berikut dan banyak lagi, sebaiknya gunakan metode tanpa kata sandi jika memungkinkan:
string koneksi mengautentikasi agen penghubung dengan akun Penyimpanan daripada dengan sumber daya individual dalam akun tersebut. Akibatnya, string koneksi memberikan otorisasi yang lebih luas daripada yang mungkin diperlukan. Dengan
DefaultAzureCredential
Anda dapat memberikan izin yang lebih terperinci dan paling tidak istimewa atas sumber daya penyimpanan Anda ke identitas yang dijalankan aplikasi Anda menggunakan Azure RBAC.string koneksi berisi info akses dalam teks biasa dan oleh karena itu menyajikan potensi kerentanan jika tidak dibangun atau diamankan dengan benar. Jika string koneksi seperti itu terekspos, string koneksi dapat digunakan untuk mengakses berbagai sumber daya dalam akun Penyimpanan.
string koneksi biasanya disimpan dalam variabel lingkungan, yang membuatnya rentan terhadap kompromi jika penyerang mendapatkan akses ke lingkungan Anda. Banyak jenis kredensial yang didukung oleh
DefaultAzureCredential
tidak memerlukan penyimpanan rahasia di lingkungan Anda.
DefaultAzureCredential
adalah rantai kredensial yang telah dikonfigurasi sebelumnya. Ini dirancang untuk mendukung banyak lingkungan, bersama dengan alur autentikasi dan alat pengembang yang paling umum. Instans DefaultAzureCredential
menentukan jenis kredensial mana yang akan mencoba mendapatkan token berdasarkan kombinasi lingkungan runtimenya, nilai variabel lingkungan tertentu yang terkenal, dan, secara opsional, parameter yang diteruskan ke konstruktornya.
Dalam langkah-langkah berikut, Anda mengonfigurasi perwakilan layanan aplikasi sebagai identitas aplikasi. Perwakilan layanan aplikasi cocok untuk digunakan baik selama pengembangan lokal maupun untuk aplikasi yang dihosting secara lokal. Untuk mengonfigurasi DefaultAzureCredential
untuk menggunakan perwakilan layanan aplikasi, Anda mengatur variabel lingkungan berikut: AZURE_CLIENT_ID
, , AZURE_TENANT_ID
dan AZURE_CLIENT_SECRET
.
Perhatikan bahwa rahasia klien dikonfigurasi. Ini diperlukan untuk perwakilan layanan aplikasi, tetapi, tergantung pada skenario Anda, Anda juga dapat mengonfigurasi DefaultAzureCredential
untuk menggunakan kredensial yang tidak memerlukan pengaturan rahasia atau kata sandi dalam variabel lingkungan.
Misalnya, dalam pengembangan lokal, jika DefaultAzureCredential
tidak bisa mendapatkan token menggunakan variabel lingkungan yang dikonfigurasi, ia mencoba mendapatkannya menggunakan pengguna (sudah) masuk ke alat pengembangan seperti Azure CLI; untuk aplikasi yang dihosting di Azure, DefaultAzureCredential
dapat dikonfigurasi untuk menggunakan identitas terkelola. Dalam semua kasus, kode di aplikasi Anda tetap sama, hanya konfigurasi dan/atau lingkungan runtime yang berubah.
Buat file bernama use_blob_auth.py dengan kode berikut. Komentar menjelaskan langkah-langkahnya.
import os import uuid from azure.identity import DefaultAzureCredential # Import the client object from the SDK library from azure.storage.blob import BlobClient credential = DefaultAzureCredential() # Retrieve the storage blob service URL, which is of the form # https://<your-storage-account-name>.blob.core.windows.net/ storage_url = os.environ["AZURE_STORAGE_BLOB_URL"] # Create the client object using the storage URL and the credential blob_client = BlobClient( storage_url, container_name="blob-container-01", blob_name=f"sample-blob-{str(uuid.uuid4())[0:5]}.txt", credential=credential, ) # Open a local file and upload its contents to Blob Storage with open("./sample-source.txt", "rb") as data: blob_client.upload_blob(data) print(f"Uploaded sample-source.txt to {blob_client.url}")
Tautan referensi:
Buat variabel lingkungan bernama
AZURE_STORAGE_BLOB_URL
:Ganti "pythonazurestorage12345" dengan nama akun penyimpanan Anda.
Variabel
AZURE_STORAGE_BLOB_URL
lingkungan hanya digunakan oleh contoh ini. Ini tidak digunakan oleh pustaka Azure.Gunakan perintah az ad sp create-for-rbac untuk membuat perwakilan layanan baru untuk aplikasi. Perintah membuat pendaftaran aplikasi untuk aplikasi secara bersamaan. Beri nama perwakilan layanan yang Anda pilih.
az ad sp create-for-rbac --name <service-principal-name>
Output perintah ini akan terlihat seperti berikut ini. Catat nilai-nilai ini atau biarkan jendela ini terbuka karena Anda akan memerlukan nilai-nilai ini di langkah berikutnya dan tidak akan dapat melihat nilai kata sandi (rahasia klien) lagi. Namun, Anda dapat menambahkan kata sandi baru nanti tanpa membatalkan perwakilan layanan atau kata sandi yang ada jika diperlukan.
{ "appId": "00001111-aaaa-2222-bbbb-3333cccc4444", "displayName": "<service-principal-name>", "password": "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2", "tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee" }
Perintah Azure CLI dapat dijalankan di Azure Cloud Shell atau pada stasiun kerja dengan Azure CLI terpasang.
Buat variabel lingkungan untuk perwakilan layanan aplikasi:
Buat variabel lingkungan berikut dengan nilai dari output perintah sebelumnya. Variabel ini memberi tahu
DefaultAzureCredential
untuk menggunakan perwakilan layanan aplikasi.AZURE_CLIENT_ID
→ Nilai ID aplikasi.AZURE_TENANT_ID
→ Nilai ID penyewa.AZURE_CLIENT_SECRET
→ Kata sandi/mandat yang dihasilkan untuk aplikasi.
Coba jalankan kode (yang gagal dengan sengaja):
python use_blob_auth.py
Amati kesalahan "Permintaan ini tidak berwenang untuk melakukan operasi ini menggunakan izin ini." Kesalahan diharapkan karena perwakilan layanan lokal yang Anda gunakan belum memiliki izin untuk mengakses kontainer blob.
Berikan izin Kontributor Data Blob Penyimpanan pada kontainer blob ke perwakilan layanan menggunakan perintah az role assignment create Azure CLI:
az role assignment create --assignee <AZURE_CLIENT_ID> \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/<AZURE_SUBSCRIPTION_ID>/resourceGroups/PythonAzureExample-Storage-rg/providers/Microsoft.Storage/storageAccounts/pythonazurestorage12345/blobServices/default/containers/blob-container-01"
Argumen
--assignee
mengidentifikasi perwakilan layanan. Ganti <tempat penampung AZURE_CLIENT_ID> dengan ID aplikasi perwakilan layanan Anda.Argumen
--scope
mengidentifikasi lokasi penetapan peran ini berlaku. Dalam contoh ini, Anda memberikan peran "Kontributor Data Blob Penyimpanan" kepada perwakilan layanan untuk kontainer bernama "blob-container-01".Ganti
PythonAzureExample-Storage-rg
danpythonazurestorage12345
dengan grup sumber daya yang berisi akun penyimpanan Anda dan nama yang tepat dari akun penyimpanan Anda. Selain itu, sesuaikan nama kontainer blob, jika perlu. Jika Anda menggunakan nama yang salah, Anda akan melihat kesalahan, "Tidak dapat melakukan operasi yang diminta pada sumber daya berlapis. Sumber daya induk 'pythonazurestorage12345' tidak ditemukan."Ganti tempat <penampung AZURE_SUBSCRIPTION_ID> dengan ID langganan Azure Anda. (Anda dapat menjalankan perintah az account show dan mendapatkan ID langganan Anda dari
id
properti di output.)
Tip
Jika perintah penetapan peran mengembalikan kesalahan "Tidak ada adaptor koneksi yang ditemukan" saat menggunakan shell bash, coba atur
export MSYS_NO_PATHCONV=1
untuk menghindari terjemahan jalur. Untuk informasi selengkapnya, lihat masalah ini.Tunggu satu atau dua menit agar izin menyebar, lalu jalankan kode lagi untuk memverifikasi bahwa kode tersebut sekarang berfungsi. Jika Anda melihat kesalahan izin lagi, tunggu sedikit lebih lama, lalu coba kode lagi.
Untuk informasi selengkapnya tentang penetapan peran, lihat Cara menetapkan izin peran menggunakan Azure CLI.
Penting
Pada langkah-langkah sebelumnya, aplikasi Anda berjalan di bawah perwakilan layanan aplikasi. Perwakilan layanan aplikasi memerlukan rahasia klien dalam konfigurasinya. Namun, Anda dapat menggunakan kode yang sama untuk menjalankan aplikasi di bawah berbagai jenis kredensial yang tidak mengharuskan Anda mengonfigurasi kata sandi atau rahasia secara eksplisit di lingkungan. Misalnya, selama pengembangan, DefaultAzureCredential
dapat menggunakan kredensial alat pengembang seperti kredensial yang Anda gunakan untuk masuk melalui Azure CLI; atau, untuk aplikasi yang dihosting di Azure, itu dapat menggunakan identitas terkelola. Untuk mempelajari selengkapnya, lihat Mengautentikasi aplikasi Python ke layanan Azure dengan menggunakan Azure SDK untuk Python.
5. Verifikasi pembuatan blob
Setelah menjalankan kode salah satu metode, buka portal Azure, navigasikan ke kontainer blob untuk memverifikasi bahwa blob baru ada bernama sample-blob-{random}.txt dengan konten yang sama dengan file sample-source.txt:
Jika Anda membuat variabel lingkungan bernama AZURE_STORAGE_CONNECTION_STRING
, Anda juga dapat menggunakan Azure CLI untuk memverifikasi bahwa blob ada menggunakan perintah az storage blob list :
az storage blob list --container-name blob-container-01
Jika Anda mengikuti instruksi untuk menggunakan autentikasi tanpa kata sandi, Anda dapat menambahkan --connection-string
parameter ke perintah sebelumnya dengan string koneksi untuk akun penyimpanan Anda. Untuk mendapatkan string koneksi, gunakan perintah az storage account show-connection-string.
az storage account show-connection-string --resource-group PythonAzureExample-Storage-rg --name pythonazurestorage12345 --output tsv
Gunakan seluruh string koneksi sebagai nilai untuk --connection-string
parameter .
Catatan
Jika akun pengguna Azure Anda memiliki peran "Kontributor Data Blob Penyimpanan" pada kontainer, Anda dapat menggunakan perintah berikut untuk mencantumkan blob dalam kontainer:
az storage blob list --container-name blob-container-01 --account-name pythonazurestorage12345 --auth-mode login
6. Membersihkan sumber daya
Jalankan perintah az group delete jika Anda tidak perlu menyimpan grup sumber daya dan sumber daya penyimpanan yang digunakan dalam contoh ini. Grup sumber daya tidak dikenakan biaya berkelanjutan dalam langganan Anda, tetapi sumber daya, seperti akun penyimpanan, dalam grup sumber daya mungkin terus dikenakan biaya. Ini adalah praktik yang baik untuk membersihkan grup apa pun yang tidak Anda gunakan secara aktif. Argumen --no-wait
memungkinkan perintah untuk segera kembali alih-alih menunggu operasi selesai.
az group delete -n PythonAzureExample-Storage-rg --no-wait
Anda juga dapat menggunakan metode ResourceManagementClient.resource_groups.begin_delete
untuk menghapus grup sumber daya dari kode. Kode dalam Contoh: Membuat grup sumber daya menunjukkan penggunaan.
Jika Anda mengikuti instruksi untuk menggunakan autentikasi tanpa kata sandi, ada baiknya untuk menghapus perwakilan layanan aplikasi yang Anda buat. Anda dapat menggunakan perintah az ad app delete . <Ganti tempat penampung AZURE_CLIENT_ID> dengan ID aplikasi perwakilan layanan Anda.
az ad app delete --id <AZURE_CLIENT_ID>
Lihat juga
- Mulai cepat: Pustaka klien Azure Blob Storage untuk Python
- Contoh: Membuat grup sumber daya
- Contoh: Cantumkan grup sumber daya dalam langganan
- Contoh: Membuat aplikasi web dan menyebarkan kode
- Contoh: Membuat Azure Storage
- Contoh: Membuat dan mengkueri database
- Contoh: Membuat komputer virtual
- Gunakan Azure Managed Disks dengan mesin virtual
- Menyelesaikan survei singkat tentang SDK Azure untuk Python