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, bu kodu çalıştırabileceğiniz bir ortam ayarlayın. Aşağıda bazı seçenekleri görebilirsiniz:

  • veya seçtiğiniz aracı kullanarak venv bir Python sanal ortamı yapılandırın. Sanal ortamı yerel olarak veya Azure Cloud Shell'de oluşturabilir ve kodu orada çalıştırabilirsiniz. Kullanmaya başlamak için sanal ortamı etkinleştirdiğinizden emin olun.

  • Conda ortamı kullanın.

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

2. Kitaplık paketlerini yükleme

requirements.txt dosyanızda, ihtiyacınız olan istemci kitaplığı paketi için 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üklenecek bir dosya oluşturma

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, Örnekte oluşturduğunuz blob kapsayıcısında verilere erişmenin iki yolu gösterilmektedir: Azure Depolama Oluşturma. 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 kullanarak DefaultAzureCredentialuygulamanın kimliğini doğrular. DefaultAzureCredential geliştirici aracı kimlik bilgileri, uygulama hizmet sorumluları ve yönetilen kimlikler gibi farklı kimlik bilgileri dizisi kullanarak bir uygulamanın (veya kullanıcının) kimliğini doğrulayan zincirlenmiş 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ı aracısının kimliğini doğrular. Sonuç olarak, bir bağlantı dizesi gerekenden daha geniş bir yetkilendirme verir. Bununla birlikteDefaultAzureCredential, Azure RBAC kullanarak uygulamanızın altında çalıştırıldığı kimliğe depolama kaynaklarınız üzerinde daha ayrıntılı, en az ayrıcalıklı izinler verilmektedir.

  • 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. tarafından DefaultAzureCredential desteklenen kimlik bilgisi türlerinin çoğu ortamınızda gizli dizileri depolamayı gerektirmez.

DefaultAzureCredential , önceden yapılandırılmış, önceden yapılandırılmış bir kimlik bilgileri zinciridir. En yaygın kimlik doğrulama akışları ve geliştirici araçlarının yanı sıra birçok ortamı destekleyecek şekilde tasarlanmıştır. Örneği DefaultAzureCredential , çalışma zamanı ortamının bir bileşimine, belirli iyi bilinen ortam değişkenlerinin değerine ve isteğe bağlı olarak oluşturucusuna geçirilen parametrelere göre belirteci almaya çalışacak kimlik bilgisi türlerini 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. Uygulama hizmet sorumlusunu kullanacak şekilde yapılandırmak DefaultAzureCredential için aşağıdaki ortam değişkenlerini ayarlarsınız: AZURE_CLIENT_ID, AZURE_TENANT_IDve AZURE_CLIENT_SECRET.

İstemci gizli dizisinin yapılandırıldığına dikkat edin. Bu bir uygulama hizmet sorumlusu için gereklidir, ancak senaryonuza bağlı olarak, ortam değişkeninde gizli dizi veya parola ayarlama gerektirmeyen kimlik bilgilerini kullanacak şekilde de yapılandırabilirsiniz DefaultAzureCredential .

Ö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. Aşağıdaki kodla use_blob_auth.py adlı bir dosya oluşturun. 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}")
    

    Başvuru bağlantıları:

  2. adlı AZURE_STORAGE_BLOB_URLbir 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.

    Ortam AZURE_STORAGE_BLOB_URL 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 sorumlusu 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 çıkışı aşağıdaki gibi görünür. 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 uygulama hizmet sorumlusunu kullanmayı söyler DefaultAzureCredential .

    • AZURE_CLIENT_ID Uygulama kimliği değerini →.
    • AZURE_TENANT_ID kiracı kimliği değerini →.
    • 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. Az role assignment create Azure CLI komutunu kullanarak blob kapsayıcısı üzerinde hizmet sorumlusuna Depolama Blob Verileri Katkıda Bulunanı izinleri 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 nereye uygulanacağı tanımlar. Bu örnekte, "blob-container-01" adlı kapsayıcının hizmet sorumlusuna "Depolama Blob Verileri Katkıda Bulunanı" rolünü verirsiniz.

    • ve pythonazurestorage12345 değerini depolama hesabınızı ve depolama hesabınızın tam adını içeren kaynak grubuyla değiştirinPythonAzureExample-Storage-rg. 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' üst kaynağı bulunamadı."

    • <AZURE_SUBSCRIPTION_ID> yer tutucusunu Azure abonelik kimliğiniz ile değiştirin. (az account show komutunu çalıştırabilir ve çıkıştaki id özelliğinden 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 ayarı export MSYS_NO_PATHCONV=1 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 bkz . Azure CLI kullanarak rol izinleri atama.

Önemli

Önceki adımlarda, uygulamanız bir uygulama hizmet sorumlusu altında çalıştı. Uygulama hizmet sorumlusu yapılandırmasında bir istemci gizli dizisi 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 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öntemin kodunu çalıştırdıktan sonra Azure portalına gidin, blob kapsayıcısına gidin ve sample-source.txt dosyasıyla aynı içerikle .txt sample-blob-{random}adlı yeni bir blob bulunduğunu doğrulayın:

Karşıya yüklenen dosyayı gösteren blob kapsayıcısı için Azure portal sayfası

adlı AZURE_STORAGE_CONNECTION_STRINGbir ortam değişkeni oluşturduysanız az storage blob list komutunu kullanarak blob'un mevcut olduğunu doğrulamak için Azure CLI'yı da kullanabilirsiniz:

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

Parolasız kimlik doğrulamasını kullanmak için yönergeleri izlediyseniz, depolama hesabınızın bağlantı dizesi ile parametresini önceki komuta ekleyebilirsiniz--connection-string. bağlantı dizesi 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

parametresinin değeri --connection-string olarak tüm bağlantı dizesi 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

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 döndürülmesini sağlar.

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

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

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 sorumlunuzun uygulama kimliğiyle değiştirin.

az ad app delete --id <AZURE_CLIENT_ID>

Ayrıca bkz.