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 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 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. Berikut ini adalah beberapa opsi:
Konfigurasikan lingkungan virtual Python menggunakan
venvatau alat pilihan Anda. Untuk mulai menggunakan lingkungan virtual, pastikan untuk mengaktifkannya. Untuk menginstal python, lihat Menginstal Python.#!/bin/bash # Create a virtual environment python -m venv .venv # Activate the virtual environment source .venv/Scripts/activate # only required for Windows (Git Bash)Gunakan lingkungan conda. Untuk menginstal Conda, lihat Menginstal Miniconda.
Gunakan Dev Container di Visual Studio Code atau GitHub Codespaces.
2. Pasang paket perpustakaan
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 command prompt Anda, instal persyaratan yang dibutuhkan.
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 .
DefaultAzureCredentialadalah kredensial berantai yang mengautentikasi aplikasi atau pengguna menggunakan urutan kredensial yang beragam, 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, bukan dengan sumber daya individual dalam akun tersebut. Akibatnya, string koneksi memberikan otorisasi yang lebih luas daripada yang mungkin diperlukan. Dengan
DefaultAzureCredentialAnda dapat memberikan izin yang lebih rinci dan dengan hak istimewa terbatas atas sumber daya penyimpanan Anda ke identitas yang dijalankan oleh 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
DefaultAzureCredentialtidak memerlukan penyimpanan rahasia di lingkungan Anda.
DefaultAzureCredential adalah rantai kredensial yang berprinsip dan telah dikonfigurasi sebelumnya.
DefaultAzureCredential mendukung banyak lingkungan, bersama dengan alur autentikasi dan alat pengembang yang paling umum. Instans DefaultAzureCredential menentukan jenis kredensial mana yang akan dicoba untuk mendapatkan token berdasarkan kombinasi lingkungan tempat implementasi, nilai dari variabel lingkungan yang dikenal, dan, secara opsional, parameter yang diteruskan ke konstruktornya.
Dalam langkah-langkah berikut, Anda mengonfigurasi prinsipal layanan aplikasi sebagai identitas aplikasi. Prinsipal layanan aplikasi cocok untuk digunakan baik selama pengembangan lokal maupun untuk aplikasi yang dihosting di tempat. 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 sebuah rahasia klien telah dikonfigurasi. Rahasia klien 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:
- DefaultAzureCredential (azure.identity)
- BlobClient (azure.storage.blob)
Buat variabel lingkungan bernama
AZURE_STORAGE_BLOB_URL:Ganti "pythonazurestorage12345" dengan nama akun penyimpanan Anda.
Variabel lingkungan
AZURE_STORAGE_BLOB_URLhanya 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 untuk aplikasi pada saat yang sama. Beri nama perwakilan layanan yang Anda pilih.
az ad sp create-for-rbac --name <service-principal-name>Output perintah ini terlihat seperti cuplikan JSON berikut. 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 membuat prinsip layanan atau kata sandi yang ada menjadi tidak valid, 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 komputer kerja dengan Azure CLI terpasang.
Buat variabel lingkungan sistem untuk service principal aplikasi.
Buat variabel lingkungan berikut dengan nilai dari output perintah sebelumnya. Variabel ini memberi tahu
DefaultAzureCredentialuntuk menggunakan prinsipal layanan aplikasi.AZURE_CLIENT_ID→ Nilai ID aplikasi.AZURE_TENANT_ID→ Nilai ID penyewa (Tenant ID).AZURE_CLIENT_SECRET→ Kata sandi/kredensial yang dihasilkan untuk aplikasi.
Coba jalankan kode (yang gagal dengan sengaja):
python use_blob_auth.pyPerhatikan kesalahan "Permintaan ini tidak berwenang untuk melakukan operasi ini menggunakan izin ini." Kesalahan ini diharapkan karena perwakilan layanan lokal yang Anda gunakan belum memiliki izin untuk mengakses wadah blob.
Berikan izin Kontributor Data Blob Penyimpanan pada kontainer blob kepada prinsipal 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
--assigneemengidentifikasi entitas layanan. Ganti <AZURE_CLIENT_ID> dengan ID aplikasi perwakilan layanan Anda.Argumen
--scopemengidentifikasi tempat penerapan penetapan peran ini. Dalam contoh ini, Anda memberikan peran "Kontributor Data Blob Penyimpanan" kepada perwakilan layanan untuk kontainer bernama "blob-container-01".Ganti
PythonAzureExample-Storage-rgdanpythonazurestorage12345dengan 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 <AZURE_SUBSCRIPTION_ID> dengan ID langganan Azure Anda. (Anda dapat menjalankan perintah az account show dan mendapatkan ID langganan Anda dari properti
iddi output.)
Petunjuk / Saran
Jika perintah penetapan peran mengembalikan kesalahan "Tidak ada adaptor koneksi yang ditemukan" saat menggunakan shell bash, coba atur
export MSYS_NO_PATHCONV=1untuk menghindari terjemahan jalur. Untuk informasi selengkapnya, lihat isu 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 lebih lanjut mengenai penetapan peran, lihat Cara menetapkan izin peran menggunakan Azure CLI.
Penting
Pada langkah-langkah sebelumnya, aplikasi Anda dijalankan oleh prinsip 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 lebih lanjut, 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, navigasi ke dalam kontainer blob untuk memverifikasi bahwa ada blob baru yang bernama sample-blob-{random}.txt dengan konten yang sama dengan file sample-source.txt.
halaman portal Azure untuk kontainer blob, yang menampilkan file yang diunggah
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 parameter --connection-string 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 mengembalikan hasil segera 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 menampilkan penggunaannya.
Jika Anda mengikuti petunjuk untuk menggunakan autentikasi tanpa kata sandi, baiknya menghapus prinsipal layanan aplikasi yang Anda buat. Anda dapat menggunakan perintah az ad app delete. Ganti placeholder <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 menjalankan kueri pada database
- Contoh: Membuat mesin virtual
- Gunakan Azure Managed Disks dengan mesin virtual
- Menyelesaikan survei singkat tentang SDK Azure untuk Python