Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak pomocí klientských knihoven Azure v kódu aplikace Pythonu nahrát soubor do kontejneru azure Blob Storage. V článku se předpokládá, že jste vytvořili prostředky uvedené v příkladu: Vytvoření služby Azure Storage.
Všechny příkazy v tomto článku fungují stejně v prostředích Bash pro Linux/macOS a Windows, pokud není uvedeno.
1. Nastavení místního vývojového prostředí
Pokud jste to ještě neudělali, nastavte prostředí, ve kterém můžete kód spustit. Zde je uvedeno několik možností:
Nakonfigurujte virtuální prostředí Pythonu pomocí
venvnebo s libovolným nástrojem podle vašeho výběru. Pokud chcete začít používat virtuální prostředí, nezapomeňte ho aktivovat. Pokud chcete nainstalovat Python, přečtěte si téma Instalace Pythonu.#!/bin/bash # Create a virtual environment python -m venv .venv # Activate the virtual environment source .venv/Scripts/activate # only required for Windows (Git Bash)Použijte kondové prostředí. Pokud chcete nainstalovat Conda, přečtěte si téma Instalace Miniconda.
Použijte Dev Container v Visual Studio Code nebo GitHub Codespaces.
2. Instalace balíčků knihovny
Do souboru requirements.txt přidejte řádky pro balíček klientské knihovny, který potřebujete, a soubor uložte.
azure-storage-blob
azure-identity
Potom v terminálu nebo příkazovém řádku nainstalujte požadavky.
pip install -r requirements.txt
3. Vytvoření souboru pro nahrání
Vytvořte zdrojový soubor s názvem sample-source.txt. Tento název souboru je to, co kód očekává.
Hello there, Azure Storage. I'm a friendly file ready to be stored in a blob.
4. Použití objektového úložiště blob z kódu aplikace
Tato část ukazuje dva způsoby přístupu k datům v kontejneru blob, který jste vytvořili v Příklad: Vytvoření úložiště Azure. Aby mohla vaše aplikace přistupovat k datům v kontejneru objektů blob, musí být schopná se ověřit v Azure a mít oprávnění pro přístup k datům v kontejneru. Tato část představuje dva způsoby, jak to udělat:
Metoda bezheslového přístupu (doporučeno) ověřuje aplikaci pomocí DefaultAzureCredential nebo jiného nástroje.
DefaultAzureCredentialje zřetězený přihlašovací údaj, který může ověřovat aplikaci (nebo uživatele) pomocí posloupnosti různých přihlašovacích údajů, včetně přihlašovacích údajů vývojářských nástrojů, instančních objektů aplikací a spravovaných identit.Metoda připojovacího řetězce používá k přímému přístupu k účtu úložiště připojovací řetězec.
Z následujících důvodů a dalších důvodů doporučujeme použít metodu bez hesla, kdykoli je to možné:
Autentizační řetězec autentizuje připojovacího agenta pomocí účtu úložiště, nikoli jednotlivými prostředky v rámci daného účtu. V důsledku toho připojovací řetězec uděluje širší autorizaci, než může být potřeba. Pomocí
DefaultAzureCredentialmůžete udělit podrobnější a nejméně privilegovaná oprávnění k prostředkům úložiště identitě, která využívá Azure RBAC, funkční identitou vaší aplikace.Připojovací řetězec obsahuje informace o přístupu ve formátu prostého textu, a proto představuje potenciální ohrožení zabezpečení, pokud není správně vytvořené nebo zabezpečené. Pokud je takový připojovací řetězec vystavený, můžete ho použít pro přístup k široké škále prostředků v rámci účtu úložiště.
Připojovací řetězec je obvykle uložený v proměnné prostředí, což ho činí zranitelným vůči kompromitaci, pokud útočník získá přístup k vašemu prostředí. Mnoho typů přihlašovacích údajů, které DefaultAzureCredential podporuje, nevyžadují ukládání tajných údajů ve vašem prostředí.
- Bez hesla (doporučeno)
- Připojovací řetězec
DefaultAzureCredential je předkonfigurovaný řetězec přihlašovacích údajů s předem definovanými preferencemi.
DefaultAzureCredential podporuje mnoho prostředí spolu s nejběžnějšími toky ověřování a vývojářskými nástroji. Instance DefaultAzureCredential určuje, které typy přihlašovacích údajů se mají pokusit získat token na základě kombinace jeho prostředí runtime, hodnot určitých známých proměnných prostředí a volitelně parametrů předaných do jeho konstruktoru.
V následujících krocích nakonfigurujete Principála služby aplikace jako identitu aplikace. Principály služby aplikací jsou vhodné pro místní vývoj i pro aplikace hostované v provozním prostředí. Pokud chcete nakonfigurovat DefaultAzureCredential pro použití instančního objektu aplikace, nastavte následující proměnné prostředí: AZURE_CLIENT_ID, AZURE_TENANT_ID a AZURE_CLIENT_SECRET.
Všimněte si, že je nakonfigurovaný tajný klíč klienta. Tajný klíč klienta je nezbytný pro instanční objekt aplikace, ale v závislosti na vašem scénáři můžete také nakonfigurovat DefaultAzureCredential použití přihlašovacích údajů, které nevyžadují nastavení tajného klíče nebo hesla v proměnné prostředí.
Pokud například při místním vývoji DefaultAzureCredential nemůže získat token pomocí nakonfigurovaných proměnných prostředí, pokusí se ho získat prostřednictvím uživatele, který je již přihlášený ve vývojových nástrojích, jako je Azure CLI. Pro aplikaci hostovanou v Azure lze DefaultAzureCredential nakonfigurovat pro použití spravované identity. Ve všech případech zůstane kód ve vaší aplikaci stejný, pouze se mění konfigurace a/nebo prostředí runtime.
Vytvořte soubor s názvem use_blob_auth.py s následujícím kódem. Komentáře vysvětlují kroky.
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}")Referenční odkazy:
- DefaultAzureCredential (azure.identity)
- BlobClient (azure.storage.blob)
Vytvořte proměnnou prostředí s názvem
AZURE_STORAGE_BLOB_URL:- Cmd
- bash
set AZURE_STORAGE_BLOB_URL=https://pythonazurestorage12345.blob.core.windows.netNahraďte "pythonazurestorage12345" názvem vašeho účtu úložiště.
Proměnná
AZURE_STORAGE_BLOB_URLprostředí se používá pouze v tomto příkladu. Knihovny Azure ji nepoužívají.Pomocí příkazu az ad sp create-for-rbac vytvořte pro aplikaci nový služební hlavní objekt. Příkaz vytvoří registraci aplikace pro aplikaci ve stejnou dobu. Instančnímu objektu dejte název podle vašeho výběru.
az ad sp create-for-rbac --name <service-principal-name>Výstup tohoto příkazu vypadá jako následující fragment kódu JSON. Poznamenejte si tyto hodnoty nebo nechte toto okno otevřené, protože je budete potřebovat v dalším kroku a nebudete moct znovu zobrazit hodnotu hesla (tajný klíč klienta). Můžete ale později přidat nové heslo bez zneplatnění identity nebo stávajících hesel.
{ "appId": "00001111-aaaa-2222-bbbb-3333cccc4444", "displayName": "<service-principal-name>", "password": "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2", "tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee" }Příkazy Azure CLI je možné spouštět v Azure Cloud Shellu nebo na pracovní stanici s nainstalovaným Azure CLI.
Vytvořte proměnné prostředí pro aplikaci služby principal:
Vytvořte následující proměnné prostředí s hodnotami z výstupu předchozího příkazu. Tyto proměnné instruují
DefaultAzureCredentialk použití aplikačního servisního objektu.-
AZURE_CLIENT_ID→ hodnota ID aplikace. -
AZURE_TENANT_ID→ hodnota ID nájemníka. -
AZURE_CLIENT_SECRET→ heslo/přihlašovací údaje generované pro aplikaci.
-
Pokus o spuštění kódu (který záměrně selže):
python use_blob_auth.pyPodívejte se na chybu "Tento požadavek nemá oprávnění k provedení této operace pomocí tohoto oprávnění". Tato chyba se očekává, protože místní instanční objekt, který používáte, ještě nemá oprávnění pro přístup ke kontejneru objektů blob.
Pomocí příkazu az role assignment create Azure CLI udělte instančnímu objektu oprávnění Storage Blob Data Contributor na kontejner s objekty blob služby.
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"Argument
--assigneeidentifikuje služební účet. Nahraďte <AZURE_CLIENT_ID> zástupný symbol ID aplikace vašeho služebního objektu.Argument
--scopeurčuje, kde se toto přiřazení role vztahuje. V tomto příkladu udělíte roli Přispěvatel dat úložiště objektů BLOB instančnímu objektu služby pro kontejner s názvem blob-container-01.Nahraďte
PythonAzureExample-Storage-rgnázvem skupiny prostředků, která obsahuje váš účet úložiště, apythonazurestorage12345přesným názvem vašeho účtu úložiště. V případě potřeby také upravte název blob kontejneru. Pokud použijete nesprávný název, zobrazí se chyba Nejde provést požadovanou operaci s vnořeným prostředkem. Nadřazený prostředek pythonazurestorage12345 nebyl nalezen.Nahraďte
zástupný symbol svým Azure předplatné ID. (Můžete spustit příkaz az account show a získat ID předplatného z vlastnosti ve výstupu.)
Návod
Pokud příkaz přiřazení role vrátí při použití prostředí Bash chybu „Nenašly se žádné adaptéry připojení“, zkuste nastavit
export MSYS_NO_PATHCONV=1, aby se zabránilo překladu cesty. Další informace najdete v tomto problému.Počkejte minutu nebo dvě, než se oprávnění rozšíří, a pak znovu spusťte kód a ověřte, že teď funguje. Pokud se chyba oprávnění zobrazí znovu, počkejte o něco déle a pak kód zkuste znovu.
Pro více informací o přiřazeních rolí si přečtěte Jak přiřadit oprávnění rolí pomocí Azure CLI.
Důležité
V předchozích krocích se vaše aplikace spustila pod aplikačním servisním principálem. Aplikační služební objekt vyžaduje v konfiguraci klientské tajemství. Stejný kód ale můžete použít ke spuštění aplikace v různých typech přihlašovacích údajů, které nevyžadují explicitní konfiguraci hesla nebo tajného kódu v prostředí. Během vývoje může například DefaultAzureCredential použít přihlašovací údaje vývojářského nástroje, jako jsou přihlašovací údaje, které používáte k přihlášení přes Azure CLI; nebo pro aplikace hostované v Azure může použít spravovanou identitu. Další informace najdete v tématu Ověřování aplikací Python ve službách Azure pomocí sady Azure SDK pro Python.
5. Ověřte vytvoření blobu
Po spuštění kódu některé z metod přejděte na Azure portal, pak do kontejneru objektů blob a ověřte, že existuje nový objekt blob s názvem sample-blob-{random}.txt se stejným obsahem jako soubor sample-source.txt:
Stránka portálu Azure pro kontejneru blob, která zobrazuje nahraný soubor
Pokud jste vytvořili proměnnou prostředí s názvem AZURE_STORAGE_CONNECTION_STRING, můžete také ověřit existenci objektu blob pomocí příkazu Azure CLI az storage blob list:
az storage blob list --container-name blob-container-01
Pokud jste postupovali podle pokynů pro použití ověřování bez hesla, můžete přidat parametr --connection-string do předchozího příkazu s připojovacím řetězcem pro váš účet úložiště. K získání připojovacího řetězce použijte příkaz az storage account show-connection-string.
az storage account show-connection-string --resource-group PythonAzureExample-Storage-rg --name pythonazurestorage12345 --output tsv
Jako hodnotu parametru --connection-string použijte celý připojovací řetězec.
Poznámka:
Pokud má váš uživatelský účet Azure v kontejneru roli „Přispěvatel k datům objektů BLOB“, můžete použít následující příkaz ke zobrazení objektů BLOB v kontejneru:
az storage blob list --container-name blob-container-01 --account-name pythonazurestorage12345 --auth-mode login
6. Vyčištění prostředků
Pokud v tomto příkladu nepotřebujete zachovat skupinu prostředků a prostředky úložiště, spusťte příkaz az group delete. Ve vašem předplatném se za skupiny prostředků neúčtují žádné průběžné poplatky, ale za prostředky, jako jsou účty úložiště, se ve skupině prostředků můžou dál účtovat poplatky. Je vhodné vyčistit jakoukoli skupinu, kterou aktivně nepoužíváte. Argument --no-wait umožňuje příkazu okamžitě skončit místo čekání na dokončení operace.
az group delete -n PythonAzureExample-Storage-rg --no-wait
Můžete také použít metodu ResourceManagementClient.resource_groups.begin_delete k odstranění skupiny prostředků z kódu. Kód v Příklad: Vytvoření skupiny prostředků demonstruje použití.
Pokud jste postupovali podle pokynů k používání ověřování bez hesla, je vhodné odstranit instanční objekt aplikace, který jste vytvořili. Můžete použít příkaz az ad app delete. Nahraďte zástupný symbol <AZURE_CLIENT_ID> identifikátorem aplikace vaší hlavní služby.
az ad app delete --id <AZURE_CLIENT_ID>
Viz také
- Rychlý start: Klientská knihovna azure Blob Storage pro Python
- Příklad: Vytvoření skupiny prostředků
- Příklad: Seznam skupin prostředků v předplatném
- Příklad: Vytvoření webové aplikace a nasazení kódu
- Příklad: Vytvoření Azure Storage
- Příklad: Vytvoření a dotazování databáze
- Příklad: Vytvoření virtuálního počítače
- Používejte Spravované disky Azure s virtuálními počítači.
- Vyplňte krátký dotazník o sadě Azure SDK pro Python