Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel leert u hoe u de Azure-clientbibliotheken in Python-toepassingscode gebruikt om een bestand te uploaden naar een Azure Blob Storage-container. In het artikel wordt ervan uitgegaan dat u de resources hebt gemaakt die worden weergegeven in voorbeeld: Azure Storage maken.
Alle opdrachten in dit artikel werken hetzelfde in Linux-/macOS-bash- en Windows-opdrachtshells, tenzij vermeld.
1. Uw lokale ontwikkelomgeving instellen
Als u dit nog niet hebt gedaan, stelt u een omgeving in waarin u deze code kunt uitvoeren. Hieronder volgen een aantal opties:
Configureer een virtuele Python-omgeving met behulp van
venv
of het hulpprogramma van uw keuze. Als u de virtuele omgeving wilt gaan gebruiken, moet u deze activeren. Om Python te installeren, raadpleeg Python installeren.#!/bin/bash # Create a virtual environment python -m venv .venv # Activate the virtual environment source .venv/Scripts/activate # only required for Windows (Git Bash)
Gebruik een Conda-omgeving. Zie Miniconda installeren om Conda te installeren.
Gebruik een Dev Container in Visual Studio Code of GitHub Codespaces.
2. Bibliotheekpakketten installeren
Voeg in uw requirements.txt-bestand regels toe voor de clientbibliotheek die u nodig hebt en sla het bestand op.
azure-storage-blob
azure-identity
Installeer vervolgens de vereisten in de terminal of opdrachtprompt.
pip install -r requirements.txt
3. Maak een bestand om te uploaden
Maak een bronbestand met de naam sample-source.txt. Deze bestandsnaam is wat de code verwacht.
Hello there, Azure Storage. I'm a friendly file ready to be stored in a blob.
4. Blob Storage gebruiken vanuit app-code
In deze sectie worden twee manieren gedemonstreerd om toegang te krijgen tot gegevens in de blobcontainer die u heeft aangemaakt in Voorbeeld: Azure Storage aanmaken. Als u toegang wilt krijgen tot gegevens in de blobcontainer, moet uw app zich kunnen verifiëren met Azure en gemachtigd zijn om toegang te krijgen tot gegevens in de container. In deze sectie worden twee manieren beschreven om dit te doen:
De methode Wachtwoordloos (Aanbevolen) verifieert de app met behulp van
DefaultAzureCredential
.DefaultAzureCredential
is een gekoppelde referentie die een app (of een gebruiker) kan verifiëren met behulp van een reeks verschillende referenties, waaronder referenties voor ontwikkelaarshulpprogramma's, toepassingsservice-principals en beheerde identiteiten.De methode Verbindingsreeks maakt gebruik van een verbindingsreeks om rechtstreeks toegang te krijgen tot het opslagaccount.
Om de volgende redenen en meer raden we u aan om waar mogelijk de methode zonder wachtwoord te gebruiken:
Een verbindingsreeks verifieert de verbindingsagent met het Storage-account in plaats van met afzonderlijke resources binnen dat account. Als gevolg hiervan verleent een verbindingsreeks bredere autorisatie dan nodig is. Met
DefaultAzureCredential
kunt u gedetailleerdere, minst bevoegde machtigingen toekennen over uw opslagbronnen aan de identiteit waarmee uw app wordt uitgevoerd, met behulp van Azure RBAC.Een verbindingsreeks bevat toegangsgegevens in tekst zonder opmaak en biedt daarom potentiële beveiligingsproblemen als deze niet goed zijn samengesteld of beveiligd. Als een dergelijk verbindingsreeks beschikbaar wordt gesteld, kan deze worden gebruikt voor toegang tot een breed scala aan resources binnen het opslagaccount.
Een verbindingsreeks wordt meestal opgeslagen in een omgevingsvariabele, waardoor deze kwetsbaar is voor inbreuk als een aanvaller toegang krijgt tot uw omgeving. Veel authenticatietypen die worden ondersteund door
DefaultAzureCredential
vereisen niet dat geheimen in uw omgeving worden opgeslagen.
DefaultAzureCredential
is een opiniërende, vooraf geconfigureerde keten van referenties. Het is ontworpen om veel omgevingen te ondersteunen, samen met de meest voorkomende verificatiestromen en ontwikkelhulpprogramma's. Een instantie van DefaultAzureCredential
bepaalt welke referentietypen een token moet verkrijgen, gebaseerd op een combinatie van zijn runtime-omgeving, de waarde van bepaalde bekende omgevingsvariabelen en, optioneel, parameters die aan zijn constructor zijn doorgegeven.
In de volgende stappen configureert u een serviceprincipe van de toepassing als de toepassingsidentiteit. Toepassingsservice-principals zijn geschikt voor gebruik tijdens lokale ontwikkeling en voor apps die on-premises worden gehost. Als u DefaultAzureCredential
wilt configureren voor het gebruik van de service-principal van de toepassing, stelt u de volgende omgevingsvariabelen in: AZURE_CLIENT_ID
, AZURE_TENANT_ID
, en AZURE_CLIENT_SECRET
.
U ziet dat een clientgeheim is geconfigureerd. Dit is noodzakelijk voor een service-principal van een toepassing, maar afhankelijk van uw specifieke scenario kunt u DefaultAzureCredential
ook configureren om gebruik te maken van referenties waarvoor geen geheim of wachtwoord in een omgevingsvariabele is vereist.
Als in lokale ontwikkeling DefaultAzureCredential
bijvoorbeeld geen token kan worden opgehaald met behulp van geconfigureerde omgevingsvariabelen, wordt er een opgehaald met behulp van de gebruiker die al is aangemeld bij ontwikkelhulpprogramma's zoals Azure CLI. DefaultAzureCredential
kan worden geconfigureerd voor het gebruik van een beheerde identiteit voor een app die in Azure wordt gehost. In alle gevallen blijft de code in uw app hetzelfde, alleen de configuratie en/of de runtime-omgeving verandert.
Maak een bestand met de naam use_blob_auth.py met de volgende code. In de opmerkingen worden de stappen uitgelegd.
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}")
Referentielinks:
Maak een omgevingsvariabele aan met de naam
AZURE_STORAGE_BLOB_URL
:- cmd
- Bash
set AZURE_STORAGE_BLOB_URL=https://pythonazurestorage12345.blob.core.windows.net
Vervang 'pythonazurestorage12345' door de naam van uw opslagaccount.
De
AZURE_STORAGE_BLOB_URL
-omgevingsvariabele wordt alleen in dit voorbeeld gebruikt. Het wordt niet gebruikt door de Azure-bibliotheken.Gebruik de opdracht `az ad sp create-for-rbac` om een nieuwe service-principal voor de app te maken. Met de opdracht maakt u tegelijkertijd de app-registratie voor de app. Geef de service-principal een naam van uw keuze.
az ad sp create-for-rbac --name <service-principal-name>
De uitvoer van deze opdracht ziet er als volgt uit. Noteer deze waarden of houd dit venster open omdat u deze waarden in de volgende stap nodig hebt en de waarde voor het wachtwoord (clientgeheim) niet opnieuw kunt weergeven. U kunt echter later een nieuw wachtwoord toevoegen zonder de service-principal of bestaande wachtwoorden indien nodig ongeldig te maken.
{ "appId": "00001111-aaaa-2222-bbbb-3333cccc4444", "displayName": "<service-principal-name>", "password": "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2", "tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee" }
Azure CLI-opdrachten kunnen worden uitgevoerd in Azure Cloud Shell of op een werkstation waarop de Azure CLI is geïnstalleerd.
Omgevingsvariabelen maken voor de service-principal van de toepassing:
Maak de volgende omgevingsvariabelen met de waarden uit de uitvoer van de vorige opdracht. Deze variabelen geven aan
DefaultAzureCredential
dat de service-principal van de toepassing gebruikt moet worden.AZURE_CLIENT_ID
→ de waarde van de app-id.AZURE_TENANT_ID
→ De waarde van de Tenant-ID.-
AZURE_CLIENT_SECRET
→ Het wachtwoord/de referentie die voor de app is gegenereerd.
- cmd
- Bash
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
Probeer de code uit te voeren (die opzettelijk mislukt):
python use_blob_auth.py
Bekijk de fout 'Deze aanvraag is niet gemachtigd om deze bewerking uit te voeren met behulp van deze machtiging'. De fout wordt verwacht omdat de lokale service-principal die u gebruikt nog geen machtiging heeft voor toegang tot de blobcontainer.
Verleen machtigingen voor Storage Blob Data Contributor voor de blobcontainer aan de service-principal met de opdracht '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"
Het
--assignee
argument identificeert de service-principal. Vervang de tijdelijke aanduiding <AZURE_CLIENT_ID> door de app-id van uw service principal.Het
--scope
argument geeft aan waar deze roltoewijzing van toepassing is. In dit voorbeeld verleent u de rol 'Inzender voor opslagblobgegevens' aan de service-principal voor de container met de naam 'blob-container-01'.Vervang `
PythonAzureExample-Storage-rg
` door de resourcegroep die uw opslagaccount bevat en `pythonazurestorage12345
` door de exacte naam van uw opslagaccount. Pas indien nodig ook de naam van de blobcontainer aan. Als u de verkeerde naam gebruikt, ziet u de fout: 'Kan aangevraagde bewerking niet uitvoeren op geneste resource.' Bovenliggende bron 'pythonazurestorage12345' is niet gevonden.Vervang de <AZURE_SUBSCRIPTION_ID> tijdelijke aanduiding door uw Azure-abonnement-ID. (U kunt het commando `az account show` uitvoeren en uw abonnements-id ophalen uit de eigenschap in de uitvoer.)
Aanbeveling
Als de opdracht voor roltoewijzing de fout 'Er zijn geen verbindingsadapters gevonden' retourneert bij gebruik van de bash-shell, stel dan
export MSYS_NO_PATHCONV=1
in om padomzetting te voorkomen. Zie dit probleem voor meer informatie.Wacht enkele minuten totdat de machtigingen zijn doorgegeven en voer de code opnieuw uit om te controleren of deze nu werkt. Als u de machtigingsfout opnieuw ziet, wacht u iets langer en probeert u de code opnieuw.
Voor meer informatie over roltoewijzingen, zie Hoe u rolmachtigingen toewijst met behulp van de Azure CLI.
Belangrijk
In de voorgaande stappen is uw app uitgevoerd onder een toepassingsservice-principal. Een application service principal vereist een clientgeheim in de configuratie. U kunt echter dezelfde code gebruiken om de app uit te voeren onder verschillende referentietypen waarvoor u niet expliciet een wachtwoord of geheim in de omgeving hoeft te configureren. Tijdens de ontwikkeling kan DefaultAzureCredential
bijvoorbeeld gebruikmaken van ontwikkelaarstoolreferenties, zoals de referenties die u gebruikt om u aan te melden via de Azure CLI; of voor apps die in Azure worden gehost, kan het een managed identity gebruiken. Zie Python-apps voor Azure-services authenticeren met behulp van de Azure SDK voor Python voor meer informatie.
5. Het maken van een blob controleren
Nadat u de code van een van beide methoden hebt uitgevoerd, gaat u naar de Azure portal en navigeert u naar de blobcontainer om te controleren of er een nieuwe blob bestaat met de naam sample-blob-{random}.txt met dezelfde inhoud als het sample-source.txt bestand:
Azure-portalpagina van de blobcontainer, waarop het geüploade bestand wordt getoond
Als u een omgevingsvariabele met de naam AZURE_STORAGE_CONNECTION_STRING
hebt gemaakt, kunt u ook de Azure CLI gebruiken om met het az storage blob list-commando te controleren of de blob bestaat.
az storage blob list --container-name blob-container-01
Als u de instructies voor het gebruik van wachtwoordloze authenticatie hebt gevolgd, kunt u de parameter --connection-string
toevoegen aan de eerder genoemde opdracht, samen met de verbindingsreeks voor uw opslagaccount. Gebruik de opdracht az storage account show-connection-string om de verbindingsreeks op te halen.
az storage account show-connection-string --resource-group PythonAzureExample-Storage-rg --name pythonazurestorage12345 --output tsv
Gebruik de volledige verbindingsreeks als de waarde voor de --connection-string
parameter.
Notitie
Als uw Azure-gebruikersaccount de rol 'Inzender voor opslagblobgegevens' in de container heeft, kunt u de volgende opdracht gebruiken om de blobs in de container weer te geven:
az storage blob list --container-name blob-container-01 --account-name pythonazurestorage12345 --auth-mode login
6. De resources opschonen
Voer de opdracht az group delete uit als u de resourcesgroep en opslagmiddelen die in dit voorbeeld worden gebruikt, niet hoeft te bewaren. Voor resourcegroepen worden geen doorlopende kosten in uw abonnement in rekening gebracht, maar resources, zoals opslagaccounts, in de resourcegroep kunnen mogelijk kosten in rekening brengen. Het is een goede gewoonte om een groep op te schonen die u niet actief gebruikt. Het --no-wait
argument zorgt ervoor dat de opdracht onmiddellijk terugkeert in plaats van te wachten tot de bewerking is voltooid.
az group delete -n PythonAzureExample-Storage-rg --no-wait
U kunt ook de methode ResourceManagementClient.resource_groups.begin_delete gebruiken om een resourcegroep vanuit code te verwijderen. De code in Voorbeeld: Een resourcegroep maken demonstreert gebruik.
Als u de instructies voor het gebruik van wachtwoordloze authenticatie hebt gevolgd, is het verstandig om de service-principal van de toepassing te verwijderen die u hebt gemaakt. U kunt de az ad app delete opdracht gebruiken. Vervang de <AZURE_CLIENT_ID> placeholder door de app-ID van uw service-principal.
az ad app delete --id <AZURE_CLIENT_ID>
Zie ook
- Quickstart: Azure Blob Storage-clientbibliotheek voor Python
- Voorbeeld: Een resourcegroep maken
- Voorbeeld: Resourcegroepen weergeven in een abonnement
- Voorbeeld: Een web-app maken en code implementeren
- Voorbeeld: Azure Storage maken
- Voorbeeld: Een database maken en er query's op uitvoeren
- Voorbeeld: Een virtuele machine maken
- Azure Beheerde Schijven gebruiken met virtuele machines
- Een korte enquête over de Azure SDK voor Python voltooien