Share via


Créer une SAP de délégation d’utilisateur pour un objet blob avec Python

Une signature d’accès partagé (SAP) vous permet d’accorder un accès limité aux conteneurs et aux objets blob de votre compte de stockage. Lorsque vous créez une SAP, vous spécifiez ses contraintes, notamment les ressources de Stockage Azure auxquelles un client est autorisé à accéder, les autorisations dont ils disposent sur ces ressources et la durée de validité de la SAP.

Chaque SAP est signée avec une clé. Vous pouvez signer une SAP grâce à l’une des deux méthodes suivantes :

  • Avec une clé créée en utilisant les informations d’identification Microsoft Entra. Une SAS signée avec des informations d’identification Microsoft Entra est une SAS de délégation d’utilisateur. Un client qui crée une signature d’accès partagé de délégation d’utilisateur doit avoir un rôle RBAC Azure qui inclut l’action Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Pour en savoir plus, consultez Créer une SAS de délégation d'utilisateur.
  • Avec la clé du compte de stockage. Une SAP de service et une SAP de compte sont signées avec la clé du compte de stockage. Le client qui crée une signature d’accès partagé de service doit avoir un accès direct à la clé de compte ou une autorisation Microsoft.Storage/storageAccounts/listkeys/action. Pour plus d’informations, consultez Créer une SAS de service ou Créer une SAS de compte.

Notes

Une SAP de délégation d’utilisateur offre une meilleure sécurité à une SAP signée avec la clé de compte de stockage. Microsoft recommande d’utiliser une SAP de délégation d’utilisateur dans la mesure du possible. Pour plus d’informations, consultez Accorder un accès limité aux données avec des signatures d’accès partagé (SAP).

Cet article montre comment utiliser les informations d’identification Microsoft Entra pour créer une SAP de délégation d’utilisateur pour un blob en tirant parti de la bibliothèque de client Stockage Azure pour Python.

À propos de la SAS de délégation d’utilisateur

Un jeton SAS pour l'accès à un conteneur ou à un blob peut être sécurisé à l'aide d'informations d'identification Microsoft Entra ou d'une clé de compte. Un SAS sécurisé avec les informations d'identification Microsoft Entra est appelé SAS de délégation d'utilisateur, car le jeton OAuth 2.0 utilisé pour signer le SAS est demandé au nom de l'utilisateur.

Microsoft vous recommande d'utiliser les informations d'identification Microsoft Entra lorsque cela est possible en tant que meilleure pratique de sécurité, plutôt que d'utiliser la clé de compte, qui peut être plus facilement compromise. Lorsque la conception de votre application nécessite des signatures d'accès partagé, utilisez les informations d'identification Microsoft Entra pour créer une SAS de délégation d'utilisateurs pour une sécurité supérieure. Pour plus d’informations sur la SAP de délégation d’utilisateur, consultez Créer une SAP de délégation d’utilisateur.

Attention

Tout client disposant d’une SAP valide peut accéder aux données de votre compte de stockage tel qu’autorisé par cette SAP. Il est important de protéger une SAP contre toute utilisation malveillante ou involontaire. Faites preuve de discrétion lors de la distribution d’une SAP et mettez en place un plan de révocation d’une SAS compromis.

Pour plus d’informations sur les signatures d’accès partagé, consultez Accorder un accès limité aux ressources du Stockage Azure à l’aide des signatures d’accès partagé (SAP).

Attribuer des rôles Azure pour l’accès aux données

Lorsqu’un principal de sécurité Microsoft Entra tente d’accéder aux données blob, ce principal de sécurité doit disposer d’autorisations sur la ressource. Que l’entité de sécurité soit une identité managée dans Azure ou un compte utilisateur Microsoft Entra exécutant du code dans l’environnement de développement, l’entité de sécurité doit se voir attribuer un rôle Azure qui accorde l’accès aux données blob. Pour obtenir des informations sur l’attribution d’autorisations via le contrôle d’accès en fonction du rôle Azure, consultez Attribuer un rôle Azure pour l’accès aux données d’objet blob.

Configuration de votre projet

Pour utiliser les exemples de code de cet article, effectuez les étapes suivantes pour configurer votre projet.

Installer des packages

Installez les packages suivants en utilisant pip install :

pip install azure-storage-blob azure-identity

Configurer le code d’application

Ajoutez les directives import suivantes :

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

Obtenir des informations d’identification d’un jeton authentifié

Pour obtenir les informations d’identification d’un jeton que votre code peut utiliser pour autoriser les requêtes auprès au stockage Blob, créez une instance de la classe DefaultAzureCredential. Pour plus d’informations sur l’utilisation de la classe DefaultAzureCredential pour autoriser une identité managée à accéder à Stockage Blob, consultez Bibliothèque de client Azure Identity pour Python.

L’extrait de code suivant montre comment obtenir les informations d’identification d’un jeton authentifié et comment les utiliser pour créer un client de service pour le stockage blob :

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

Pour en savoir plus sur l’autorisation de l’accès au stockage Blob à partir de vos applications avec le kit de développement logiciel (SDK) Python, consultez Comment authentifier des applications Python auprès des services Azure.

Obtenir la clé de délégation d’utilisateur

Chaque SAP est signée avec une clé. Pour créer une SAP de délégation d’utilisateur, vous devez d’abord demander une clé de délégation d’utilisateur, qui est ensuite utilisée pour signer la SAP. La clé de délégation utilisateur est analogue à la clé de compte utilisée pour signer un SAS de service ou un SAS de compte, sauf qu'elle repose sur vos informations d'identification Microsoft Entra. Lorsqu’un client demande une clé de délégation d’utilisateur à l’aide d’un jeton OAuth 2.0, Stockage Blob retourne la clé de délégation utilisateur pour le compte de l’utilisateur.

Une fois que vous disposez de la clé de délégation d’utilisateur, vous pouvez utiliser cette clé pour créer un nombre quelconque de signatures d’accès partagé de délégation d’utilisateur tout au long de la durée de vie de la clé. La clé de délégation d’utilisateur est indépendante du jeton OAuth 2.0 utilisé pour l’acquérir. Il n’est donc pas nécessaire de renouveler le jeton si la clé est toujours valide. Vous pouvez spécifier la durée de validité de la clé, jusqu’à un maximum de sept jours.

Utilisez l’une des méthodes suivantes pour demander la clé de délégation d’utilisateur :

L’exemple de code suivant montre comment demander la clé de délégation d’utilisateur :

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

Créer une SAP de délégation d’utilisateur pour un objet blob

Une fois que vous avez obtenu la clé de délégation d’utilisateur, vous pouvez créer une SAP de délégation d’utilisateur. Vous pouvez créer une SAP de délégation utilisateur pour déléguer un accès limité à une ressource blob à l’aide de la méthode suivante :

La clé de délégation utilisateur pour signer la SAP est passée à la méthode en tant qu’argument user_delegation_key. Les autorisations autorisées sont transmises à la méthode en tant qu’argument permission et sont définies dans la classe BlobSasPermissions.

L’exemple de code suivant montre comment créer une SAP de délégation d’utilisateur pour un objet blob :

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

Utiliser une SAP de délégation d’utilisateur pour autoriser un objet client

L’exemple de code suivant montre comment utiliser la SAP de délégation utilisateur créée dans l’exercice précédent pour autoriser un objet BlobClient. Cet objet client peut être utilisé pour effectuer des opérations sur la ressource d’objet blob en fonction des autorisations accordées par la signature d’accès partagé.

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

Ressources

Pour en savoir plus sur la création d’une SAP de délégation d’utilisateur à l’aide de la bibliothèque de client Stockage Blob Azure pour Python, consultez les ressources suivantes.

Opérations de l'API REST

Le kit de développement logiciel (SDK) Azure pour Python contient des bibliothèques qui s’appuient sur l’API REST Azure, vous permettant d’interagir avec les opérations de l’API REST par le biais de paradigmes Python familiers. La méthode de la bibliothèque de client pour obtenir une clé de délégation d’utilisateur utilise les opérations d’API REST suivantes :

Exemples de code

Ressources de bibliothèque cliente

Voir aussi