Partager via


Créer une SAP de service pour un conteneur ou 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 explique comment utiliser la clé du compte de stockage pour créer une SAP de service pour un conteneur ou un blob avec la bibliothèque de client Stockage Blob pour Java.

À propos de la SAS de service

Une SAP de service est signée avec la clé d’accès au compte. Vous pouvez utiliser la classe StorageSharedKeyCredential afin de créer les informations d’identification utilisées pour signer le jeton SAS de service.

Vous pouvez également utiliser une stratégie d’accès stockée pour définir les autorisations et la durée de la signature d’accès partagé. Si le nom d’une stratégie d’accès stockée existante est fourni, cette stratégie est associée à la SAP. Pour plus d’informations sur les stratégies d’accès stockées, consultez Définir une stratégie d’accès stockée. Si aucune stratégie d’accès stockée n’est fournie, les exemples de code de cet article montrent comment définir des autorisations et une durée pour la SAS.

Créer une SAP de service

Vous pouvez créer une SAP de service pour un conteneur ou un blob, en fonction des besoins de votre application.

Vous pouvez créer une SAP de service pour déléguer un accès limité à une ressource de conteneur à l’aide de la méthode suivante :

Les valeurs de signature SAS, telles que le délai d'expiration et les autorisations signées, sont transmises à la méthode dans le cadre d'une instance BlobServiceSasSignatureValues. Les autorisations sont spécifiées en tant qu’instance BlobContainerSasPermission.

L'exemple de code suivant montre comment créer un SAS de service avec des autorisations de lecture pour une ressource de conteneur :

public String createServiceSASContainer(BlobContainerClient containerClient) {
    // 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
    BlobContainerSasPermission sasPermission = new BlobContainerSasPermission()
            .setReadPermission(true);

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

    String sasToken = containerClient.generateSas(sasSignatureValues);
    return sasToken;
}

Utiliser une SAS de service pour autoriser un objet client

Vous pouvez utiliser une SAP de service pour autoriser un objet client à effectuer des opérations sur un conteneur ou un blob en fonction des autorisations octroyées par la SAP.

L’exemple de code suivant montre comment utiliser la SAS de service pour autoriser un objet BlobContainerClient. Cet objet client peut être utilisé pour effectuer des opérations sur la ressource d’objet conteneur en fonction des autorisations accordées par la signature d’accès partagé.

Tout d’abord, créez un objet BlobServiceClient signé avec la clé d’accès au compte :

String accountName = "<account-name>";
String accountKey = "<account-key>";
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
        
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint(String.format("https://%s.blob.core.windows.net/", accountName))
        .credential(credential)
        .buildClient();

Ensuite, générez le SAS de service comme indiqué dans l'exemple précédent et utilisez le SAS pour autoriser un objet BlobContainerClient :

// Create a SAS token
BlobContainerClient containerClient = blobServiceClient
        .getBlobContainerClient("sample-container");
String sasToken = createServiceSASContainer(containerClient);

// Create a new BlobContainerClient using the SAS token
BlobContainerClient sasContainerClient = new BlobContainerClientBuilder()
        .endpoint(containerClient.getBlobContainerUrl())
        .sasToken(sasToken)
        .buildClient();

Ressources

Pour en savoir plus sur l'utilisation de la bibliothèque client stockage Azure Blob pour Java, consultez les ressources suivantes.

Exemples de code

Ressources de bibliothèque cliente

Voir aussi