Python ile kapsayıcı veya blob için hizmet 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, bir istemcinin erişmesine izin verilen Azure Depolama kaynakları, bu kaynaklar üzerinde sahip olduğu 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.Storage/storageAccounts/blobServices/generateUserDelegationKey eylemini içeren bir Azure RBAC rolü atanmalıdır. 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.Storage/storageAccounts/listkeys/action izni atanmış olmalıdır. Daha fazla bilgi edinmek için bkz . Hizmet SAS'i oluşturma veya Hesap SAS'ı oluşturma.
Not
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 Blob Depolama istemci kitaplığıyla bir kapsayıcı veya blob için hizmet SAS'i oluşturmak üzere depolama hesabı anahtarının nasıl kullanılacağı gösterilmektedir.
Hizmet SAS'i hakkında
Depolama hesabı erişim anahtarıyla bir hizmet SAS'i imzalanır. Hizmet SAS'i, Blob Depolama gibi tek bir Azure Depolama hizmetindeki bir kaynağa erişim yetkisi verir.
SAS'nin izinlerini ve süresini tanımlamak için bir depolanmış erişim ilkesi de kullanabilirsiniz. Mevcut bir depolanmış erişim ilkesinin adı sağlanırsa, bu ilke SAS ile ilişkilendirilir. Depolanan erişim ilkeleri hakkında daha fazla bilgi edinmek için bkz . Saklı erişim ilkesi tanımlama. Depolanmış erişim ilkesi sağlanmazsa, bu makaledeki kod örneklerinde SAS için izinleri ve süreyi tanımlama gösterilmektedir.
Hizmet SAS’si oluşturma
Uygulamanızın gereksinimlerine göre kapsayıcı veya blob için hizmet SAS'i oluşturabilirsiniz.
Aşağıdaki yöntemi kullanarak kapsayıcı kaynağına sınırlı erişim yetkisi vermek için bir hizmet SAS'i oluşturabilirsiniz:
SAS'yi imzalamak için kullanılan depolama hesabı erişim anahtarı yöntemine bağımsız değişken olarak account_key
geçirilir. İzin verilen izinler bağımsız değişken olarak permission
yöntemine geçirilir ve ContainerSasPermissions sınıfında tanımlanır.
Aşağıdaki kod örneği, bir kapsayıcı kaynağı için okuma izinlerine sahip bir hizmet SAS'sinin nasıl oluşturulacağını gösterir:
def create_service_sas_container(self, container_client: ContainerClient, account_key: str):
# 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_container_sas(
account_name=container_client.account_name,
container_name=container_client.container_name,
account_key=account_key,
permission=ContainerSasPermissions(read=True),
expiry=expiry_time,
start=start_time
)
return sas_token
İstemci nesnesini yetkilendirmek için hizmet SAS'si kullanma
Bir istemci nesnesini SAS tarafından verilen izinlere göre kapsayıcı veya blob üzerinde işlem gerçekleştirme yetkisi vermek için bir hizmet SAS'si kullanabilirsiniz.
Aşağıdaki kod örneği, bir ContainerClient nesnesini yetkilendirmek için önceki örnekte oluşturulan hizmet SAS'sinin nasıl kullanılacağını gösterir. Bu istemci nesnesi, SAS tarafından verilen izinlere göre kapsayıcı kaynağında işlemler 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"{container_client.url}?{sas_token}"
# Create a ContainerClient object with SAS authorization
container_client_sas = ContainerClient.from_container_url(container_url=sas_url)
Kaynaklar
Python için Azure Blob Depolama istemci kitaplığını kullanma hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.