Aracılığıyla paylaş


Örnek: Python için Azure kitaplıklarını kullanarak Azure Depolama'ya erişme

Bu makalede Python uygulama kodundaki Azure istemci kitaplıklarını kullanarak azure blob depolama kapsayıcısına dosya yüklemeyi öğreneceksiniz. Makalede Örnek: Azure Depolama Oluşturma bölümünde gösterilen kaynakları oluşturduğunuz varsayılır.

Bu makaledeki tüm komutlar, not edilmediği sürece Linux/macOS bash ve Windows komut kabuklarında aynı şekilde çalışır.

1. Yerel geliştirme ortamınızı ayarlama

Henüz yapmadıysanız kodu çalıştırabileceğiniz bir ortam ayarlayın. Aşağıda bazı seçenekleri görebilirsiniz:

  • venv veya seçtiğiniz aracı kullanarak bir Python sanal ortamı yapılandırın. Sanal ortamı kullanmaya başlamak için etkinleştirmeyi unutmayın. Python'ı yüklemek için bkz. Python'ı yükleme.

    #!/bin/bash
    # Create a virtual environment
    python -m venv .venv
    # Activate the virtual environment
    source .venv/Scripts/activate # only required for Windows (Git Bash)
    
  • Conda ortamı kullanın. Conda'yı yüklemek için bkz. Miniconda'yı yükleme.

  • Visual Studio Code'da veya GitHub Codespaces'ta bir Geliştirme Kapsayıcısı kullanın.

2. Kitaplık paketlerini yükleme

requirements.txt dosyanızda, ihtiyacınız olan istemci kitaplığı yazılımını eklemek için gerekli satırları ekleyin ve dosyayı kaydedin.

azure-storage-blob
azure-identity

Ardından, terminal veya komut isteminizde gereksinimleri yükleyin.

pip install -r requirements.txt

3. Karşıya yüklemek için bir dosya oluşturun

"sample-source.txt adlı bir kaynak dosyası oluşturun." Bu dosya adı, kodun beklediği addır.

Hello there, Azure Storage. I'm a friendly file ready to be stored in a blob.

4. Uygulama kodundan blob depolama kullanın

Bu bölümde, `Azure Depolama Oluşturma Örneği`nde oluşturduğunuz blob kapsayıcısındaki verilere erişmenin iki yolu gösterilmektedir. Blob kapsayıcısında verilere erişmek için uygulamanızın Azure'da kimlik doğrulaması yapabilmesi ve kapsayıcıdaki verilere erişme yetkisine sahip olması gerekir. Bu bölümde bunu yapmanın iki yolu vardır:

  • Parolasız (Önerilen) yöntemi, DefaultAzureCredential kullanarak uygulamanın kimliğini doğrular. DefaultAzureCredential geliştirilmiş araç kimlik bilgileri, uygulama hizmet sorumluları ve yönetilen kimlikler dahil olmak üzere farklı kimlik bilgileri dizisi kullanarak bir uygulamanın (veya kullanıcının) kimliğini doğrulayabilen zincirli bir kimlik bilgisidir.

  • Bağlantı dizesi yöntemi, depolama hesabına doğrudan erişmek için bir bağlantı dizesi kullanır.

Aşağıdaki nedenlerle ve daha fazlası için mümkün olduğunda parolasız yöntemi kullanmanızı öneririz:

  • Bağlantı dizesi, bu hesaptaki tek tek kaynaklar yerine Depolama hesabıyla bağlantı yapan aracının kimliğini doğrular. Sonuç olarak, bir bağlantı dizesi gerekenden daha geniş bir yetkilendirme verir. kullanarak, uygulamanızın altında çalıştığı kimliğe, depolama kaynaklarınız üzerinde daha detaylı ve en az ayrıcalıklı izinler verebilirsiniz Azure RBAC.

  • Bağlantı dizesi düz metin olarak erişim bilgileri içerir ve bu nedenle düzgün bir şekilde yapılandırılmamış veya güvenli hale getirilmemişse olası güvenlik açıklarını gösterir. Böyle bir bağlantı dizesi kullanıma sunulursa Depolama hesabı içindeki çok çeşitli kaynaklara erişmek için kullanılabilir.

  • bir bağlantı dizesi genellikle bir ortam değişkeninde depolanır ve bu da bir saldırganın ortamınıza erişim sağlaması durumunda güvenliği tehlikeye atılmasına neden olur. DefaultAzureCredential tarafından desteklenen kimlik bilgisi türlerinin çoğu, ortamınızda gizli bilgiler depolamayı gerektirmez.

DefaultAzureCredential, belirli görüşleri olan, önceden yapılandırılmış bir kimlik bilgileri zinciridir. DefaultAzureCredential en yaygın kimlik doğrulama akışları ve geliştirici araçlarıyla birlikte birçok ortamı destekler. Bir DefaultAzureCredential örneği, çalışma zamanı ortamının bir kombinasyonuna, bilinen belirli ortam değişkenlerinin değerlerine ve isteğe bağlı olarak oluşturucusuna geçirilen parametrelere göre hangi kimlik bilgisi türlerinin bir belirteç almayı deneyeceğini belirler.

Aşağıdaki adımlarda, bir uygulama hizmet sorumlusunu uygulama kimliği olarak yapılandıracaksınız. Uygulama hizmet sorumluları hem yerel geliştirme sırasında hem de şirket içinde barındırılan uygulamalar için kullanıma uygundur. DefaultAzureCredential'i uygulama hizmet ilkesi kullanacak şekilde yapılandırmak için şu ortam değişkenlerini ayarlarsınız: AZURE_CLIENT_ID, AZURE_TENANT_ID ve AZURE_CLIENT_SECRET.

İstemci sırrının yapılandırıldığına dikkat edin. Bir uygulama hizmet birimi için istemci gizliliği gereklidir, ancak senaryonuza bağlı olarak, ortam değişkeninde bir gizlilik veya parola ayarlamadan kullanılabilecek kimlik bilgilerini kullanacak şekilde de DefaultAzureCredential yapılandırabilirsiniz.

Örneğin, yerel geliştirmede, yapılandırılmış ortam değişkenlerini kullanarak belirteç alamıyorsa DefaultAzureCredential , Azure CLI gibi geliştirme araçlarında oturum açmış olan kullanıcıyı (zaten) kullanarak bir belirteç almaya çalışır; Azure'da barındırılan bir uygulama için yönetilen DefaultAzureCredential kimlik kullanacak şekilde yapılandırılabilir. Her durumda, uygulamanızdaki kod aynı kalır, yalnızca yapılandırma ve/veya çalışma zamanı ortamı değişir.

  1. use_blob_auth.py adlı bir dosya oluşturun ve aşağıdaki kodu kullanın. Açıklamalar adımları açıklar.

    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}")
    

    Referans bağlantıları:

  2. AZURE_STORAGE_BLOB_URL adlı bir ortam değişkeni oluşturun:

    set AZURE_STORAGE_BLOB_URL=https://pythonazurestorage12345.blob.core.windows.net
    

    "pythonazurestorage12345" yerine depolama hesabınızın adını yazın.

    Bu AZURE_STORAGE_BLOB_URL ortam değişkeni yalnızca bu örnek tarafından kullanılır. Azure kitaplıkları tarafından kullanılmaz.

  3. Uygulama için yeni bir hizmet birimi oluşturmak için az ad sp create-for-rbac komutunu kullanın. komutu, uygulama için uygulama kaydını aynı anda oluşturur. Hizmet sorumlusuna seçtiğiniz adı verin.

    az ad sp create-for-rbac --name <service-principal-name>
    

    Bu komutun çıktısı aşağıdaki JSON kod parçacığına benzer. Bu değerleri not alın veya sonraki adımda bu değerlere ihtiyacınız olacağı ve parola (istemci gizli dizisi) değerini yeniden görüntüleyemeyeceğiniz için bu pencereyi açık tutun. Ancak, gerekirse hizmet sorumlusunu veya mevcut parolaları geçersiz hale getirmeden daha sonra yeni bir parola ekleyebilirsiniz.

    {
      "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "displayName": "<service-principal-name>",
      "password": "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2",
      "tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
    }
    

    Azure CLI komutları, Azure Cloud Shell'de veya Azure CLI yüklü bir iş istasyonunda çalıştırılabilir.

  4. Uygulama hizmet sorumlusu için ortam değişkenleri oluşturun:

    Önceki komutun çıkışındaki değerlerle aşağıdaki ortam değişkenlerini oluşturun. Bu değişkenler DefaultAzureCredential 'e uygulama hizmet sorumlusunu kullanması gerektiğini belirtir.

    • AZURE_CLIENT_ID Uygulama kimliği değeri.
    • AZURE_TENANT_ID Kiracı kimliği değeri.
    • AZURE_CLIENT_SECRET → Uygulama için oluşturulan parola/kimlik bilgisi.
    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. Kodu çalıştırma girişimi (kasıtlı olarak başarısız olur):

    python use_blob_auth.py
    
  6. "Bu isteğin bu izni kullanarak bu işlemi gerçekleştirme yetkisi yok" hatasını gözlemleyin. Kullandığınız yerel hizmet sorumlusu henüz blob kapsayıcısına erişim iznine sahip olmadığından hata beklenir.

  7. Azure CLI komutu az role assignment create kullanarak blob kapsayıcısı üzerinde Depolama Blob Verileri Katkıda Bulunanı izinlerini hizmet sorumlusuna verin.

    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"
    

    --assignee bağımsız değişkeni hizmet sorumlusunu tanımlar. <AZURE_CLIENT_ID> yer tutucusunu hizmet sorumlunuzun uygulama kimliğiyle değiştirin.

    Bağımsız değişken, --scope bu rol atamasının nerede uygulanacağını tanımlar. Bu örnekte, "blob-container-01" adlı kapsayıcının hizmet sorumlusuna "Depolama Blob Verileri Katkıda Bulunanı" rolünü verirsiniz.

    • PythonAzureExample-Storage-rg ve pythonazurestorage12345 öğelerini, depolama hesabınızı içeren kaynak grubunun adı ve depolama hesabınızın tam adı ile değiştirin. Ayrıca gerekirse blob kapsayıcısının adını ayarlayın. Yanlış ad kullanırsanız, "İç içe kaynakta istenen işlem gerçekleştirilemiyor." 'pythonazurestorage12345' ana kaynak bulunamadı."

    • <AZURE_SUBSCRIPTION_ID> yer tutucusunu Azure abonelik kimliğiniz ile değiştirin. (az account show komutunu çalıştırabilir ve çıktıdaki ilgili özellikten abonelik kimliğinizi alabilirsiniz.)

    İpucu

    Rol atama komutu bash kabuğu kullanılırken "Bağlantı bağdaştırıcısı bulunamadı" hatası döndürüyorsa, yol çevirisini önlemek için export MSYS_NO_PATHCONV=1 ayarını yapmayı deneyin. Daha fazla bilgi için bu soruna bakın.

  8. İzinlerin yayılması için bir veya iki dakika bekleyin, ardından şimdi çalıştığını doğrulamak için kodu yeniden çalıştırın. İzinler hatasını yeniden görürseniz, biraz daha bekleyin ve kodu yeniden deneyin.

Rol atamaları hakkında daha fazla bilgi için, Azure CLI kullanarak rol izinlerini nasıl atayacağınızı öğrenmek için bkz.

Önemli

Önceki adımlarda, uygulamanız bir uygulama hizmet sorumlusu altında çalıştı. Uygulama hizmet asıl nesnesi yapılandırmasında bir istemci sırrı gerektirir. Ancak, uygulamayı ortamda açıkça parola veya gizli dizi yapılandırmanızı gerektirmeyen farklı kimlik bilgileri türleri altında çalıştırmak için aynı kodu kullanabilirsiniz. Örneğin, geliştirme sırasında, DefaultAzureCredential Azure CLI aracılığıyla oturum açmak için kullandığınız kimlik bilgileri gibi geliştirici aracı kimlik bilgilerini kullanabilir; veya Azure'da barındırılan uygulamalar için bir yönetilen kimlik kullanabilir. Daha fazla bilgi edinmek için bkz . Python için Azure SDK'sını kullanarak Azure hizmetlerinde Python uygulamalarının kimliğini doğrulama.

5. Blob oluşturmayı doğrulama

İki yöntemden herhangi birinin kodunu çalıştırdıktan sonra Azure portalına gidin, blob kapsayıcısına gidin ve sample-source.txt dosyasıyla aynı içeriğe sahip olan yeni bir sample-blob-{random}.txt adında bir blobun mevcut olduğunu doğrulayın.

Azure portal page for the blob container, showing the uploaded fileYüklenen dosyanın gösterildiği blob kapsayıcısı için Azure portal sayfası

Eğer adına AZURE_STORAGE_CONNECTION_STRING sahip bir ortam değişkeni oluşturduysanız, az storage blob list komutunu kullanarak blob'un mevcut olduğunu doğrulamak için Azure CLI'yi de kullanabilirsiniz.

az storage blob list --container-name blob-container-01

Parolasız kimlik doğrulamasını kullanmak için yönergeleri izlediyseniz, --connection-string parametresini depolama hesabınızın bağlantı dizesiyle birlikte önceki komuta ekleyebilirsiniz. Bağlantı dizesini almak için `az storage account show-connection-string` komutunu kullanın.

az storage account show-connection-string --resource-group PythonAzureExample-Storage-rg --name pythonazurestorage12345 --output tsv

--connection-string parametresinin değeri olarak tüm bağlantı dizisini kullanın.

Not

Azure kullanıcı hesabınızın kapsayıcıda "Depolama Blob Verileri Katkıda Bulunanı" rolü varsa, kapsayıcıdaki blobları listelemek için aşağıdaki komutu kullanabilirsiniz:

az storage blob list --container-name blob-container-01 --account-name pythonazurestorage12345 --auth-mode login

6. Kaynakları temizleme

"Eğer bu örnekte kullanılan kaynak grubunu ve depolama kaynaklarını tutmanız gerekmiyorsa az group delete komutunu çalıştırın." Kaynak grupları aboneliğinizde devam eden bir ücret ödemez, ancak kaynak grubundaki depolama hesapları gibi kaynaklar ücretlendirilmeye devam edebilir. Etkin olarak kullanmadığınız tüm grupları temizlemek iyi bir uygulamadır. --no-wait bağımsız değişkeni, işlemin bitmesini beklemek yerine komutun hemen geri dönmesini sağlar.

az group delete -n PythonAzureExample-Storage-rg  --no-wait

Bir kaynak grubunu koddan silmek için ResourceManagementClient.resource_groups.begin_delete yöntemini de kullanabilirsiniz. Örnek: Kaynak grubu oluşturma kodunda kullanım gösterilmektedir.

Parolasız kimlik doğrulamasını kullanmak için yönergeleri izlediyseniz, oluşturduğunuz uygulama hizmet sorumlusunu silmek iyi bir fikirdir. az ad app delete komutunu kullanabilirsiniz. AZURE_CLIENT_ID yer tutucusunu hizmet temsilcinizin uygulama kimliğiyle değiştirin.

az ad app delete --id <AZURE_CLIENT_ID>

Ayrıca bkz.