Share via


Felhasználói delegálási SAS létrehozása blobhoz Pythonnal

A közös hozzáférésű jogosultságkód (SAS) lehetővé teszi, hogy korlátozott hozzáférést biztosítson a tárfiókban lévő tárolókhoz és blobokhoz. Sas létrehozásakor meg kell adnia annak korlátait, beleértve az ügyfelek számára engedélyezett Azure Storage-erőforrásokat, az ezen erőforrásokra vonatkozó engedélyeiket és az SAS érvényességének érvényességét.

Minden SAS egy kulccsal van aláírva. SAS-t kétféleképpen írhat alá:

  • A Microsoft Entra hitelesítő adataival létrehozott kulccsal. A Microsoft Entra hitelesítő adataival aláírt SAS egy felhasználódelegálási SAS. A felhasználói delegálási SAS-t létrehozó ügyfélhez olyan Azure RBAC-szerepkört kell hozzárendelni, amely tartalmazza a Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey műveletet. További információ: Felhasználói delegálási SAS létrehozása.
  • A tárfiók kulccsal. A szolgáltatás SAS és a fiók SAS is a tárfiók kulccsal van aláírva. A szolgáltatás SAS-t létrehozó ügyfélnek közvetlen hozzáféréssel kell rendelkeznie a fiókkulcshoz, vagy hozzá kell rendelnie a Microsoft.Storage/storageAccounts/listkeys/action engedélyt. További információ: Szolgáltatás SAS létrehozása vagy fiók SAS létrehozása.

Megjegyzés:

A felhasználói delegálási SAS kiváló biztonságot nyújt a tárfiók kulccsal aláírt SAS-nek. A Microsoft javasolja, hogy lehetőség szerint használjon felhasználói delegálási SAS-t. További információ: Korlátozott hozzáférés biztosítása megosztott hozzáférésű jogosultságkódokkal (SAS) rendelkező adatokhoz.

Ez a cikk bemutatja, hogyan hozhat létre felhasználói delegálási SAS-t egy blobhoz a Microsoft Entra hitelesítő adataival a PythonHoz készült Azure Storage ügyfélkódtár használatával.

Tudnivalók a felhasználói delegálási SAS-ről

A tárolóhoz vagy blobhoz való hozzáféréshez szükséges SAS-jogkivonatot a Microsoft Entra hitelesítő adataival vagy egy fiókkulcskal lehet védeni. A Microsoft Entra hitelesítő adataival védett SAS-t felhasználói delegálási SAS-nek nevezzük, mivel az SAS aláírásához használt OAuth 2.0 jogkivonatot a felhasználó nevében kéri a rendszer.

A Microsoft azt javasolja, hogy ha lehetséges, használja a Microsoft Entra hitelesítő adatait biztonsági ajánlott eljárásként a fiókkulcs használata helyett, amely könnyebben feltörhető. Ha az alkalmazás tervezése közös hozzáférésű jogosultságkódokat igényel, a Microsoft Entra hitelesítő adataival hozzon létre egy felhasználói delegálási SAS-t a magasabb szintű biztonság érdekében. További információ a felhasználói delegálási SAS-ről: Felhasználói delegálási SAS létrehozása.

Figyelem

Minden olyan ügyfél, amely rendelkezik érvényes SAS-szel, hozzáférhet a tárfiókban lévő adatokhoz az adott SAS által engedélyezett módon. Fontos, hogy megvédje az SAS-t a rosszindulatú vagy nem szándékos használattól. Használja a diszkréciót egy SAS terjesztéséhez, és rendelkezik egy tervvel a feltört SAS visszavonásához.

A megosztott hozzáférésű jogosultságkódokkal kapcsolatos további információkért lásd : Korlátozott hozzáférés biztosítása az Azure Storage-erőforrásokhoz közös hozzáférésű jogosultságkódok (SAS) használatával.

Azure-szerepkörök hozzárendelése az adatokhoz való hozzáféréshez

Amikor egy Microsoft Entra biztonsági tag megpróbál hozzáférni a blobadatokhoz, annak a biztonsági tagnak engedélyekkel kell rendelkeznie az erőforráshoz. Függetlenül attól, hogy a biztonsági tag felügyelt identitás-e az Azure-ban, vagy egy, a fejlesztési környezetben kódot futtató Microsoft Entra-felhasználói fiók, a biztonsági tagnak hozzá kell rendelnie egy Azure-szerepkört, amely hozzáférést biztosít a blobadatokhoz. Az engedélyek Azure RBAC-en keresztüli hozzárendelésével kapcsolatos információkért lásd : Azure-szerepkör hozzárendelése a blobadatokhoz való hozzáféréshez.

A projekt beállítása

A jelen cikkben szereplő példakódok használatához kövesse az alábbi lépéseket a projekt beállításához.

Install packages

Telepítse a következő csomagokat a következő használatával pip install:

pip install azure-storage-blob azure-identity

Az alkalmazáskód beállítása

Adja hozzá a következő import irányelveket:

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

Hitelesített jogkivonat hitelesítő adatainak lekérése

Ha olyan jogkivonat hitelesítő adatait szeretné lekérni, amelyet a kód a Blob Storage-kérelmek engedélyezésére használhat, hozza létre a DefaultAzureCredential osztály egy példányát. A DefaultAzureCredential osztálynak a Blob Storage-hoz való hozzáférés engedélyezésére szolgáló DefaultAzureCredential osztály használatával kapcsolatos további információkért tekintse meg a Pythonhoz készült Azure Identity ügyfélkódtárat.

Az alábbi kódrészlet bemutatja, hogyan szerezheti be a hitelesített jogkivonat hitelesítő adatait, és hogyan hozhat létre szolgáltatásügyfélt a Blob Storage számára:

# 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())

Ha többet szeretne megtudni a Blob Storage-hoz való hozzáférés engedélyezéséről az alkalmazásokból a Python SDK-val, olvassa el a Python-alkalmazások Hitelesítése az Azure-szolgáltatásokban című témakört.

A felhasználói delegálási kulcs lekérése

Minden SAS egy kulccsal van aláírva. Felhasználói delegálási SAS létrehozásához először egy felhasználói delegálási kulcsot kell kérnie, amelyet a rendszer az SAS aláírására használ. A felhasználói delegálási kulcs hasonló a szolgáltatás SAS vagy fiók SAS aláírásához használt fiókkulcshoz, azzal a kivétellel, hogy az a Microsoft Entra hitelesítő adataira támaszkodik. Amikor egy ügyfél egy OAuth 2.0-jogkivonat használatával kér felhasználói delegálási kulcsot, a Blob Storage a felhasználó nevében adja vissza a felhasználó delegálási kulcsát.

Ha már rendelkezik a felhasználói delegálási kulccsal, ezzel a kulccsal tetszőleges számú felhasználói delegálási megosztott hozzáférési aláírást hozhat létre a kulcs élettartama alatt. A felhasználói delegálási kulcs független a beszerzéséhez használt OAuth 2.0-jogkivonattól, így a jogkivonatot nem kell megújítani, ha a kulcs még érvényes. Megadhatja a kulcs érvényességének időtartamát, legfeljebb hét napig.

A felhasználói delegálási kulcs kéréséhez használja az alábbi módszerek egyikét:

Az alábbi példakód bemutatja, hogyan kérheti le a felhasználó delegálási kulcsát:

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

Felhasználói delegálási SAS létrehozása blobhoz

Miután beszerezte a felhasználódelegálási kulcsot, létrehozhat egy felhasználói delegálási SAS-t. A bloberőforráshoz való korlátozott hozzáférés delegálásához létrehozhat egy felhasználói delegálási SAS-t a következő módszerrel:

Az SAS aláírásához szükséges felhasználódelegálási kulcsot a rendszer argumentumként továbbítja a metódusnak user_delegation_key . Az engedélyezett engedélyek argumentumként kerülnek átadásra a permission metódusnak, és a BlobSasPermissions osztályban vannak definiálva.

Az alábbi példakód bemutatja, hogyan hozhat létre felhasználói delegálási SAS-t egy blobhoz:

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

Felhasználói delegálási SAS használata ügyfélobjektum engedélyezéséhez

Az alábbi példakód bemutatja, hogyan használhatja a korábbi példában létrehozott felhasználói delegálási SAS-t egy BlobClient-objektum engedélyezéséhez. Ez az ügyfélobjektum az SAS által megadott engedélyek alapján a bloberőforráson végzett műveletek végrehajtására használható.

# 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)

Források

Ha többet szeretne megtudni arról, hogyan hozhat létre felhasználói delegálási SAS-t a Pythonhoz készült Azure Blob Storage ügyfélkódtár használatával, tekintse meg az alábbi erőforrásokat.

REST API-műveletek

Az Azure SDK for Python olyan kódtárakat tartalmaz, amelyek az Azure REST API-ra épülnek, lehetővé téve a REST API-műveletek használatát jól ismert Python-paradigmákon keresztül. A felhasználói delegálási kulcs lekérésére szolgáló ügyfélkódtár metódusa a következő REST API-műveleteket használja:

Code samples

Ügyfélkódtár erőforrásai

Kapcsolódó információk