Share via


Python ile blob için kullanıcı temsilcisi SAS'i oluşturma

Paylaşılan erişim imzası (SAS), depolama hesabınızdaki kapsayıcılara ve bloblara sınırlı erişim vermenizi sağlar. SAS oluşturduğunuzda, istemcinin erişmesine izin verilen Azure Depolama kaynakları, bu kaynaklar üzerinde sahip oldukları izinler ve SAS'nin ne kadar süre geçerli olduğu gibi sınırlamalarını belirtirsiniz.

Her SAS bir anahtarla imzalanır. SAS'i iki yoldan biriyle imzalayabilirsiniz:

  • Microsoft Entra kimlik bilgileri kullanılarak oluşturulan bir anahtarla. Microsoft Entra kimlik bilgileriyle imzalanan SAS, kullanıcı temsilcisi SAS'dir. Kullanıcı temsilcisi SAS oluşturan bir istemciye Microsoft.Depolama içeren bir Azure RBAC rolü atanmalıdır/storageAccounts/blobServices/generateUserDelegationKey eylemi. Daha fazla bilgi edinmek için bkz . Kullanıcı temsilcisi SAS'ı oluşturma.
  • Depolama hesabı anahtarıyla. Hem hizmet SAS'i hem de hesap SAS'i depolama hesabı anahtarıyla imzalanmıştır. Hizmet SAS'si oluşturan istemcinin hesap anahtarına doğrudan erişimi olmalıdır veya Microsoft.Depolama/storageAccounts/listkeys/action izni. Daha fazla bilgi edinmek için bkz . Hizmet SAS'i oluşturma veya Hesap SAS'ı oluşturma.

Dekont

Kullanıcı temsilcisi SAS,depolama hesabı anahtarıyla imzalanmış bir SAS için üstün güvenlik sunar. Microsoft mümkün olduğunda kullanıcı temsilcisi SAS'sini kullanmanızı önerir. Daha fazla bilgi için bkz . Paylaşılan erişim imzalarıyla (SAS) verilere sınırlı erişim verme.

Bu makalede, Python için Azure Depolama istemci kitaplığını kullanarak blob için kullanıcı temsilcisi SAS'i oluşturmak üzere Microsoft Entra kimlik bilgilerinin nasıl kullanılacağı gösterilmektedir.

Kullanıcı temsilcisi SAS hakkında

Kapsayıcıya veya bloba erişim için SAS belirteci, Microsoft Entra kimlik bilgileri veya hesap anahtarı kullanılarak güvenli hale getirilebilir. SAS'yi imzalamak için kullanılan OAuth 2.0 belirteci kullanıcı adına istendiğinden, Microsoft Entra kimlik bilgileriyle güvenliği sağlanan sas kullanıcı temsilcisi SAS olarak adlandırılır.

Microsoft, mümkün olduğunda microsoft Entra kimlik bilgilerini daha kolay ele geçirilebilen hesap anahtarını kullanmak yerine en iyi güvenlik uygulaması olarak kullanmanızı önerir. Uygulama tasarımınız paylaşılan erişim imzaları gerektirdiğinde, üstün güvenlik için kullanıcı temsilcisi SAS'ı oluşturmak için Microsoft Entra kimlik bilgilerini kullanın. Kullanıcı temsilcisi SAS'i hakkında daha fazla bilgi için bkz . Kullanıcı temsilcisi SAS'i oluşturma.

Dikkat

Geçerli bir SAS'ye sahip olan tüm istemciler, bu SAS'nin izin verdiği şekilde depolama hesabınızdaki verilere erişebilir. SAS'yi kötü amaçlı veya istenmeyen kullanıma karşı korumak önemlidir. SAS dağıtmak için isteğe bağlılığı kullanın ve güvenliği aşılmış SAS'yi iptal etmek için bir planınız var.

Paylaşılan erişim imzaları hakkında daha fazla bilgi için bkz. Paylaşılan erişim imzalarını (SAS) kullanarak Azure Depolama kaynaklarına sınırlı erişim verme.

Verilere erişim için Azure rolleri atama

Bir Microsoft Entra güvenlik sorumlusu blob verilerine erişmeye çalıştığında, bu güvenlik sorumlusunun kaynak için izinleri olmalıdır. Güvenlik sorumlusunun Azure'da yönetilen bir kimlik veya geliştirme ortamında kod çalıştıran bir Microsoft Entra kullanıcı hesabı olması fark etmeksizin, güvenlik sorumlusuna blob verilerine erişim izni veren bir Azure rolü atanmalıdır. Azure RBAC aracılığıyla izin atama hakkında bilgi için bkz . Blob verilerine erişim için Azure rolü atama.

Projenizi ayarlama

Bu makaledeki kod örnekleriyle çalışmak için projenizi ayarlamak için bu adımları izleyin.

Paketleri yükleme

kullanarak pip installaşağıdaki paketleri yükleyin:

pip install azure-storage-blob azure-identity

Uygulama kodunu ayarlama

Aşağıdaki import yönergeleri ekleyin:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
    BlobServiceClient,
    ContainerClient,
    BlobClient,
    BlobSasPermissions,
    ContainerSasPermissions,
    UserDelegationKey,
    generate_container_sas,
    generate_blob_sas
)

Kimliği doğrulanmış belirteç kimlik bilgilerini alma

Kodunuzun Blob Depolama istekleri yetkilendirmek için kullanabileceği bir belirteç kimlik bilgisi almak için DefaultAzureCredential sınıfının bir örneğini oluşturun. Yönetilen kimliği Blob Depolama erişmek üzere yetkilendirmek üzere DefaultAzureCredential sınıfını kullanma hakkında daha fazla bilgi için bkz. Python için Azure Identity istemci kitaplığı.

Aşağıdaki kod parçacığında kimliği doğrulanmış belirteç kimlik bilgilerinin nasıl alınacağı ve Blob depolama için bir hizmet istemcisi oluşturmak için nasıl kullanılacağı gösterilmektedir:

# Construct the blob endpoint from the account name
account_url = "https://<storage-account-name>.blob.core.windows.net"

#Create a BlobServiceClient object using DefaultAzureCredential
blob_service_client = BlobServiceClient(account_url, credential=DefaultAzureCredential())

Python SDK ile uygulamalarınızdan Blob Depolama erişimi yetkilendirme hakkında daha fazla bilgi edinmek için bkz. Azure hizmetlerinde Python uygulamalarının kimliğini doğrulama.

Kullanıcı temsilcisi anahtarını alma

Her SAS bir anahtarla imzalanır. Kullanıcı temsilcisi SAS'ı oluşturmak için, önce SAS'yi imzalamak için kullanılan bir kullanıcı temsilcisi anahtarı istemeniz gerekir. Kullanıcı temsilcisi anahtarı, Microsoft Entra kimlik bilgilerinize bağlı olması dışında hizmet SAS'sini veya hesap SAS'sini imzalamak için kullanılan hesap anahtarına benzer. İstemci OAuth 2.0 belirteci kullanarak kullanıcı temsilcisi anahtarı istediğinde, Blob Depolama kullanıcı adına kullanıcı temsilci anahtarını döndürür.

Kullanıcı temsilcisi anahtarına sahip olduktan sonra, anahtarın ömrü boyunca istediğiniz sayıda kullanıcı temsilcisi paylaşılan erişim imzası oluşturmak için bu anahtarı kullanabilirsiniz. Kullanıcı temsilcisi anahtarı, anahtarı almak için kullanılan OAuth 2.0 belirtecinin bağımsız olduğundan, anahtar hala geçerliyse belirtecin yenilenmesi gerekmez. Anahtarın en fazla yedi güne kadar geçerli kalacağı süreyi belirtebilirsiniz.

Kullanıcı temsilci anahtarını istemek için aşağıdaki yöntemlerden birini kullanın:

Aşağıdaki kod örneği, kullanıcı temsilcisi anahtarının nasıl isteneceklerini gösterir:

def request_user_delegation_key(self, blob_service_client: BlobServiceClient) -> UserDelegationKey:
    # Get a user delegation key that's valid for 1 day
    delegation_key_start_time = datetime.datetime.now(datetime.timezone.utc)
    delegation_key_expiry_time = delegation_key_start_time + datetime.timedelta(days=1)

    user_delegation_key = blob_service_client.get_user_delegation_key(
        key_start_time=delegation_key_start_time,
        key_expiry_time=delegation_key_expiry_time
    )

    return user_delegation_key

Blob için kullanıcı temsilcisi SAS'i oluşturma

Kullanıcı temsilcisi anahtarını aldıktan sonra bir kullanıcı temsilcisi SAS'ı oluşturabilirsiniz. Aşağıdaki yöntemi kullanarak bir blob kaynağına sınırlı erişim yetkisi vermek için kullanıcı temsilcisi SAS'ı oluşturabilirsiniz:

SAS'yi imzalamak için kullanıcı temsilcisi anahtarı yöntemine bağımsız değişken olarak user_delegation_key geçirilir. İzin verilen izinler yöntemine bağımsız değişken olarak permission geçirilir ve BlobSasPermissions sınıfında tanımlanır.

Aşağıdaki kod örneğinde blob için kullanıcı temsilcisi SAS'sinin nasıl oluşturulacağı gösterilmektedir:

def create_user_delegation_sas_blob(self, blob_client: BlobClient, user_delegation_key: UserDelegationKey):
    # Create a SAS token that's valid for one day, as an example
    start_time = datetime.datetime.now(datetime.timezone.utc)
    expiry_time = start_time + datetime.timedelta(days=1)

    sas_token = generate_blob_sas(
        account_name=blob_client.account_name,
        container_name=blob_client.container_name,
        blob_name=blob_client.blob_name,
        user_delegation_key=user_delegation_key,
        permission=BlobSasPermissions(read=True),
        expiry=expiry_time,
        start=start_time
    )

    return sas_token

İstemci nesnesini yetkilendirmek için kullanıcı temsilcisi SAS'si kullanma

Aşağıdaki kod örneği, bir BlobClient nesnesini yetkilendirmek için önceki örnekte oluşturulan kullanıcı temsilcisi SAS'sinin nasıl kullanılacağını gösterir. Bu istemci nesnesi, SAS tarafından verilen izinlere göre blob kaynağında işlem gerçekleştirmek için kullanılabilir.

# The SAS token string can be appended to the resource URL with a ? delimiter
# or passed as the credential argument to the client constructor
sas_url = f"{blob_client.url}?{sas_token}"

# Create a BlobClient object with SAS authorization
blob_client_sas = BlobClient.from_blob_url(blob_url=sas_url)

Kaynaklar

Python için Azure Blob Depolama istemci kitaplığını kullanarak kullanıcı temsilcisi SAS'ı oluşturma hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.

REST API işlemleri

Python için Azure SDK, Azure REST API'sinin üzerinde derlenmiş kitaplıklar içerir ve tanıdık Python paradigmalarıyla REST API işlemleriyle etkileşim kurmanızı sağlar. Kullanıcı temsilci anahtarı almak için istemci kitaplığı yöntemi aşağıdaki REST API işlemlerini kullanır:

Kod örnekleri

İstemci kitaplığı kaynakları

Ayrıca bkz.