Créer un SAS de service 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 SAP signée avec des informations d’identification Microsoft Entra est une SAP 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 la clé du compte de stockage pour créer un SAS de service pour un blob avec la bibliothèque 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 SAP.

Créer une SAP de service pour un objet blob

Vous pouvez créer une SAP de service pour déléguer un accès limité à une ressource de blob à 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 BlobSasPermission.

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

public String createServiceSASBlob(BlobClient blobClient) {
    // 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.generateSas(sasSignatureValues);
    return sasToken;
}

Utiliser une SAS de service pour autoriser un objet client

L’exemple de code suivant montre comment utiliser la SAP de service 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é.

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

Générez ensuite la SAP de service, comme indiqué dans l’exemple précédent, et utilisez la SAP pour autoriser un objet BlobClient :

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

// Create a new BlobClient using the SAS token
BlobClient sasBlobClient = new BlobClientBuilder()
        .endpoint(blobClient.getBlobUrl())
        .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.

Ressources de bibliothèque cliente

Voir aussi