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

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 SAS de délégation d’utilisateur pour un blob avec la bibliothèque client Azure Storage pour Java.

À 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, ajoutez les directives d’importation suivantes :

import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import com.azure.storage.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é gérée à accéder au stockage Blob, reportez-vous à Bibliothèque de client Azure Identity pour Java.

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 :

BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.windows.net/")
        .credential(new DefaultAzureCredentialBuilder().build())
        .buildClient();

Pour en savoir plus sur l’autorisation d’accès au stockage Blob à partir de vos applications avec le kit SDK Java, reportez-vous à Authentification Azure avec Java et Azure Identity.

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 :

public UserDelegationKey requestUserDelegationKey(BlobServiceClient blobServiceClient) {
    // Request a user delegation key that's valid for 1 day, as an example
    UserDelegationKey userDelegationKey = blobServiceClient.getUserDelegationKey(
        OffsetDateTime.now().minusMinutes(5),
        OffsetDateTime.now().plusDays(1));

    return userDelegationKey;
}

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 délégation d’utilisateur SAP pour déléguer un accès limité à une ressource blob en utilisant la méthode suivante à partir d’une instance BlobClient :

La clé de délégation utilisateur pour signer la SAP est passée à cette méthode avec les valeurs spécifiées pour BlobServiceSasSignatureValues. Les autorisations sont spécifiées en tant qu’instance BlobSasPermission.

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

public String createUserDelegationSASBlob(BlobClient blobClient, UserDelegationKey userDelegationKey) {
    // Create a SAS token that's valid for 1 day, as an example
    OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);

    // Assign read permissions to the SAS token
    BlobSasPermission sasPermission = new BlobSasPermission()
            .setReadPermission(true);

    BlobServiceSasSignatureValues sasSignatureValues = new BlobServiceSasSignatureValues(expiryTime, sasPermission)
            .setStartTime(OffsetDateTime.now().minusMinutes(5));

    String sasToken = blobClient.generateUserDelegationSas(sasSignatureValues, userDelegationKey);
    return sasToken;
}

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é.

// Create a SAS token for a blob
BlobClient blobClient = blobServiceClient
        .getBlobContainerClient("sample-container")
        .getBlobClient("sample-blob.txt");
String sasToken = createUserDelegationSASBlob(blobClient, userDelegationKey);

// Create a new BlobClient using the SAS token
BlobClient sasBlobClient = new BlobClientBuilder()
        .endpoint(blobClient.getBlobUrl())
        .sasToken(sasToken)
        .buildClient();

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 Java, reportez-vous aux ressources suivantes.

Opérations de l'API REST

Le Kit de développement logiciel (SDK) Azure pour Java 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 Java 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