Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ebből a cikkből megtudhatja, hogyan tölthet fel fájlokat egy Azure Blob Storage-tárolóba az Azure-ügyfélkódtárak Python-alkalmazáskódban való használatával. A cikk feltételezi, hogy létrehozta az Azure Storage létrehozása című példában látható erőforrásokat.
A cikkben szereplő összes parancs ugyanúgy működik a Linux/macOS bash és a Windows parancshéjakban, hacsak fel nem jegyezzük.
1. A helyi fejlesztési környezet beállítása
Ha még nem tette meg, hozzon létre egy környezetet, ahol futtathatja ezt a kódot. Íme néhány lehetőség:
Python virtuális környezetet konfigurálhat a választott eszközzel vagy használatával
venv
. A virtuális környezet használatának megkezdéséhez feltétlenül aktiválja azt. A Python telepítéséhez lásd a Python telepítését.#!/bin/bash # Create a virtual environment python -m venv .venv # Activate the virtual environment source .venv/Scripts/activate # only required for Windows (Git Bash)
Használjon conda környezetet. A Conda telepítéséhez lásd a Miniconda telepítése című témakört.
Használjon Dev-tárolót a Visual Studio Code-ban vagy a GitHub Codespace-ben.
2. Kódtárcsomagok telepítése
A requirements.txt fájlban adjon hozzá sorokat a szükséges ügyfélkódtár-csomaghoz, és mentse a fájlt.
azure-storage-blob
azure-identity
Ezután telepítse a követelményeket a terminálban vagy a parancssorban.
pip install -r requirements.txt
3. Feltöltendő fájl létrehozása
Hozzon létre egy sample-source.txt nevű forrásfájlt. Ez a fájlnév az, amit a kód elvár.
Hello there, Azure Storage. I'm a friendly file ready to be stored in a blob.
4. Blob Storage használata alkalmazáskódból
Ez a szakasz két módszert mutat be az adatok elérésére a blobtárolóban, amelyet például az Azure Storage létrehozása című cikkben hozott létre. A blobtárolóban lévő adatok eléréséhez az alkalmazásnak képesnek kell lennie az Azure-ral való hitelesítésre, és jogosultnak kell lennie a tárolóban lévő adatok elérésére. Ez a szakasz a következő két módszert mutatja be:
A Jelszó nélküli (ajánlott) metódus a használatával
DefaultAzureCredential
hitelesíti az alkalmazást.DefaultAzureCredential
Egy olyan láncolt hitelesítő adat, amely különböző hitelesítő adatok sorozatával hitelesíthet egy alkalmazást (vagy felhasználót), beleértve a fejlesztői eszközök hitelesítő adatait, az alkalmazásszolgáltatás-tagokat és a felügyelt identitásokat.A kapcsolati sztringmetódus egy kapcsolati sztring használ a tárfiók közvetlen eléréséhez.
A következő okokból és egyebek miatt javasoljuk, hogy amikor csak lehetséges, használja a jelszó nélküli módszert:
Egy kapcsolati sztring hitelesíti a csatlakozó ügynököt a Storage-fiókkal, nem pedig az adott fiókon belüli egyes erőforrásokkal. Ennek eredményeképpen egy kapcsolati sztring a szükségesnél szélesebb körű engedélyezést biztosít. Ezzel
DefaultAzureCredential
részletesebb, legkevésbé kiemelt engedélyeket adhat a tárolási erőforrások felett ahhoz az identitáshoz, amelyen az alkalmazás az Azure RBAC használatával fut.A kapcsolati sztring egyszerű szövegben tartalmazzák a hozzáférési adatokat, ezért potenciális biztonsági réseket jelentenek, ha nem megfelelően vannak kialakítva vagy védve. Ha egy ilyen kapcsolati sztring elérhetővé válnak, a Tárfiókon belüli erőforrások széles skáláját érheti el.
A kapcsolati sztring általában egy környezeti változóban vannak tárolva, ami sebezhetővé teszi, ha egy támadó hozzáfér a környezethez. Számos olyan hitelesítő adattípus, amelyet
DefaultAzureCredential
támogat, nem igényel titkos kulcsok tárolását a környezetben.
DefaultAzureCredential
a hitelesítő adatok véleményezett, előre konfigurált lánca. Számos környezetet támogat, a leggyakoribb hitelesítési folyamatokkal és fejlesztői eszközökkel együtt. Egy példány DefaultAzureCredential
határozza meg, hogy mely hitelesítő adattípusokhoz próbál meg jogkivonatot lekérni a futtatókörnyezet kombinációja, bizonyos jól ismert környezeti változók értéke és opcionálisan a konstruktornak átadott paraméterek alapján.
Az alábbi lépésekben egy alkalmazásszolgáltatásnevet konfigurálhat alkalmazás-identitásként. Az alkalmazásszolgáltatás-tagok a helyi fejlesztés során és a helyszínen üzemeltetett alkalmazásokhoz egyaránt alkalmasak. Az alkalmazásszolgáltatásnév használatára való konfiguráláshoz DefaultAzureCredential
állítsa be a következő környezeti változókat: AZURE_CLIENT_ID
, AZURE_TENANT_ID
és AZURE_CLIENT_SECRET
.
Figyelje meg, hogy az ügyfélkulcs konfigurálva van. Ez az alkalmazásszolgáltatás-tagok esetében szükséges, de a forgatókönyvtől függően olyan hitelesítő adatok használatára is konfigurálható DefaultAzureCredential
, amelyekhez nincs szükség titkos kulcs vagy jelszó beállítására egy környezeti változóban.
Például a helyi fejlesztésben, ha DefaultAzureCredential
nem tud jogkivonatot lekérni konfigurált környezeti változók használatával, megpróbál lekérni egyet az Azure CLI-hez hasonló fejlesztői eszközökbe bejelentkezett felhasználó (már) használatával, DefaultAzureCredential
egy Azure-ban üzemeltetett alkalmazáshoz pedig konfigurálható felügyelt identitás használatára. Az alkalmazásban lévő kód minden esetben ugyanaz marad, csak a konfiguráció és/vagy a futtatókörnyezet változik.
Hozzon létre egy use_blob_auth.py nevű fájlt a következő kóddal. A megjegyzések ismertetik a lépéseket.
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}")
Referenciákra mutató hivatkozások:
Hozzon létre egy környezeti változót:
AZURE_STORAGE_BLOB_URL
set AZURE_STORAGE_BLOB_URL=https://pythonazurestorage12345.blob.core.windows.net
Cserélje le a "pythonazurestorage12345" kifejezést a tárfiók nevére.
A
AZURE_STORAGE_BLOB_URL
környezeti változót csak ez a példa használja. Az Azure-kódtárak nem használják.Az az ad sp create-for-rbac paranccsal hozzon létre egy új szolgáltatásnevet az alkalmazáshoz. A parancs egyidejűleg létrehozza az alkalmazás regisztrációját az alkalmazáshoz. Adja meg a szolgáltatásnévnek az Ön által választott nevet.
az ad sp create-for-rbac --name <service-principal-name>
A parancs kimenete a következőhöz hasonlóan fog kinézni. Jegyezze fel ezeket az értékeket, vagy tartsa nyitva ezt az ablakot, mivel a következő lépésben szüksége lesz ezekre az értékekre, és nem fogja tudni újra megtekinteni a jelszó (titkos ügyfélkód) értékét. Később azonban hozzáadhat új jelszót anélkül, hogy szükség esetén érvénytelenítenék a szolgáltatásnevet vagy a meglévő jelszavakat.
{ "appId": "00001111-aaaa-2222-bbbb-3333cccc4444", "displayName": "<service-principal-name>", "password": "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2", "tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee" }
Az Azure CLI-parancsok futtathatók az Azure Cloud Shellben vagy egy munkaállomáson, amelyen telepítve van az Azure CLI.
Hozzon létre környezeti változókat az application service principal számára:
Hozza létre az alábbi környezeti változókat az előző parancs kimenetéből származó értékekkel. Ezek a változók az application service principal használatát jelzik
DefaultAzureCredential
.AZURE_CLIENT_ID
→ Az alkalmazásazonosító értéke.AZURE_TENANT_ID
→ a bérlőazonosító értékét.AZURE_CLIENT_SECRET
→ Az alkalmazáshoz létrehozott jelszó/hitelesítő adatok.
set AZURE_CLIENT_ID=00001111-aaaa-2222-bbbb-3333cccc4444 set AZURE_TENANT_ID=aaaabbbb-0000-cccc-1111-dddd2222eeee set AZURE_CLIENT_SECRET=Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2
Próbálja meg futtatni a kódot (amely szándékosan meghiúsul):
python use_blob_auth.py
Figyelje meg a következő hibaüzenetet: "Ez a kérés nem jogosult a művelet végrehajtására ezzel az engedéllyel". A hiba azért várható, mert a helyi szolgáltatásnév, amelyet használ, még nem rendelkezik engedéllyel a blobtároló eléréséhez.
Adjon a blobtárolón a Storage Blob Data Contributor engedélyeit a szolgáltatásnévnek az az szerepkör-hozzárendelés létrehozása Azure CLI-parancs használatával:
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"
Az
--assignee
argumentum azonosítja a szolgáltatásnevet. Cserélje le <AZURE_CLIENT_ID> helyőrzőt a szolgáltatásnév alkalmazásazonosítójára.Az
--scope
argumentum azonosítja a szerepkör-hozzárendelés helyét. Ebben a példában a "Blob-container-01" nevű tároló szolgáltatásnévének adja meg a "Storage Blob Data Contributor" szerepkört.Cserélje le
PythonAzureExample-Storage-rg
apythonazurestorage12345
tárfiókot tartalmazó erőforráscsoportot és a tárfiók pontos nevét. Szükség esetén módosítsa a blobtároló nevét is. Ha nem a megfelelő nevet használja, a következő hibaüzenet jelenik meg: "Nem lehet végrehajtani a kért műveletet a beágyazott erőforráson. A "pythonazurestorage12345" szülőerőforrás nem található."Cserélje le a <AZURE_SUBSCRIPTION_ID> helyőrzőt az Azure-előfizetés azonosítójára. (Futtathatja az az account show parancsot, és lekérheti az előfizetés azonosítóját a
id
kimenetben lévő tulajdonságból.)
Tipp.
Ha a szerepkör-hozzárendelési parancs "Nem található kapcsolati adapter" hibaüzenetet ad vissza a Bash-rendszerhéj használatakor, próbálja meg beállítani
export MSYS_NO_PATHCONV=1
az elérési út fordításának elkerülését. További információkért tekintse meg ezt a problémát.Várjon egy-két percet az engedélyek propagálására, majd futtassa újra a kódot annak ellenőrzéséhez, hogy működik-e. Ha ismét megjelenik az engedélyhiba, várjon egy kicsit tovább, majd próbálkozzon újra a kóddal.
A szerepkör-hozzárendelésekkel kapcsolatos további információkért lásd : Szerepkör-engedélyek hozzárendelése az Azure CLI használatával.
Fontos
Az előző lépésekben az alkalmazás egy alkalmazásszolgáltatásnév alatt futott. Az alkalmazásszolgáltatás-tagok konfigurációjában szükség van egy titkos ügyfélkódra. Ugyanezzel a kóddal azonban futtathatja az alkalmazást különböző hitelesítőadat-típusok esetén, amelyek nem igénylik, hogy explicit módon konfiguráljon egy jelszót vagy titkos kulcsot a környezetben. A fejlesztés során például használhatja a fejlesztői eszközök hitelesítő adatait, DefaultAzureCredential
például az Azure CLI-vel való bejelentkezéshez használt hitelesítő adatokat, vagy az Azure-ban üzemeltetett alkalmazások esetében használhat felügyelt identitást. További információ: Python-alkalmazások hitelesítése az Azure-szolgáltatásokban az Azure SDK for Python használatával.
5. Blob létrehozásának ellenőrzése
A metódus kódjának futtatása után lépjen az Azure Portalra, és lépjen a blobtárolóba, és ellenőrizze, hogy létezik-e egy új blob, amely a sample-blob-{random}.txt ugyanazzal a tartalommal rendelkezik, mint a sample-source.txt fájl:
A blobtároló Azure Portal-oldala, amelyen a feltöltött fájl látható
Ha létrehozott egy környezeti változót, AZURE_STORAGE_CONNECTION_STRING
az Azure CLI-vel is ellenőrizheti, hogy a blob létezik-e az az storage bloblista paranccsal:
az storage blob list --container-name blob-container-01
Ha követte a jelszó nélküli hitelesítés használatára vonatkozó utasításokat, hozzáadhatja a paramétert az --connection-string
előző parancshoz a tárfiók kapcsolati sztring. A kapcsolati sztring lekéréséhez használja az az storage account show-connection-string parancsot.
az storage account show-connection-string --resource-group PythonAzureExample-Storage-rg --name pythonazurestorage12345 --output tsv
Használja a teljes kapcsolati sztring a --connection-string
paraméter értékeként.
Feljegyzés
Ha az Azure-felhasználói fiókja rendelkezik a tárolón a "Storage Blob Data Contributor" szerepkörével, a következő paranccsal listázhatja a tárolóban lévő blobokat:
az storage blob list --container-name blob-container-01 --account-name pythonazurestorage12345 --auth-mode login
6. Erőforrások tisztítása
Futtassa az az group delete parancsot, ha nem kell megtartania az ebben a példában használt erőforráscsoportot és tárerőforrásokat. Az erőforráscsoportok nem számolnak fel folyamatos díjakat az előfizetésben, de az erőforráscsoportban lévő erőforrások, például a tárfiókok továbbra is díjakat vonhatnak maga után. Ajánlott minden olyan csoportot megtisztítani, amelyet nem használ aktívan. Az --no-wait
argumentum lehetővé teszi, hogy a parancs azonnal visszatérjen a művelet befejezésére való várakozás helyett.
az group delete -n PythonAzureExample-Storage-rg --no-wait
A metódussal ResourceManagementClient.resource_groups.begin_delete
egy erőforráscsoportot is törölhet a kódból. A példakód : Erőforráscsoport létrehozása a használatot mutatja be.
Ha követte a jelszó nélküli hitelesítés használatára vonatkozó utasításokat, érdemes törölnie a létrehozott alkalmazás-szolgáltatásnevet. Az az ad app delete parancsot használhatja. Cserélje le a <AZURE_CLIENT_ID> helyőrzőt a szolgáltatásnév alkalmazásazonosítójára.
az ad app delete --id <AZURE_CLIENT_ID>
Lásd még
- Rövid útmutató: Azure Blob Storage-ügyfélkódtár Pythonhoz
- Példa: Erőforráscsoport létrehozása
- Példa: Erőforráscsoportok listázása előfizetésben
- Példa: Webalkalmazás létrehozása és kód üzembe helyezése
- Példa: Azure Storage létrehozása
- Példa: Adatbázis létrehozása és lekérdezése
- Példa: Virtuális gép létrehozása
- Azure Managed Disks használata virtuális gépekkel
- Rövid felmérés befejezése a Pythonhoz készült Azure SDK-ról