Megosztás a következőn keresztül:


Példa: Az Azure Storage elérése a Pythonhoz készült Azure-kódtárak használatával

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 DefaultAzureCredentialhitelesí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.

  1. 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:

  2. 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.

  3. 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.

  4. 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
    
  5. Próbálja meg futtatni a kódot (amely szándékosan meghiúsul):

    python use_blob_auth.py
    
  6. 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.

  7. 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 a pythonazurestorage12345 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.

  8. 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:

Azure portal page for the blob container, showing the uploaded fileA 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_STRINGaz 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