Erstellen einer Dienst-SAS für einen Container oder ein Blob mit Java

Eine Shared Access Signature (SAS) ermöglicht Ihnen, eingeschränkten Zugriff auf Container und Blobs in Ihrem Speicherkonto zu gewähren. Wenn Sie eine SAS erstellen, geben Sie ihre Einschränkungen an, einschließlich der Azure Storage-Ressourcen, auf die Clients zugreifen dürfen, welche Berechtigungen sie für diese Ressourcen haben und wie lange die SAS gültig ist.

Jede SAS wird mit einem Schlüssel signiert. Zum Signieren einer SAS stehen zwei Möglichkeiten zur Verfügung:

  • Mit einem Schlüssel, der mit Microsoft Entra-Anmeldeinformationen erstellt wurde. Eine SAS, die mit Microsoft Entra-Anmeldeinformationen signiert wurde, ist eine Benutzerdelegierungs-SAS. Einem Client, der eine SAS für die Benutzerdelegierung erstellt, muss eine Azure RBAC-Rolle zugewiesen werden, in der die Aktion Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey enthalten ist. Weitere Informationen finden Sie unter Erstellen einer SAS für die Benutzerdelegierung.
  • Mit dem Speicherkontoschlüssel. Sowohl eine Dienst-SAS als auch eine Konto-SAS wird mit dem Speicherkontoschlüssel signiert. Der Client, der eine Dienst-SAS erstellt, muss entweder direkten Zugriff auf den Kontoschlüssel haben, oder ihm muss die Berechtigung Microsoft.Storage /storageAccounts/listkeys/action zugewiesen werden. Weitere Informationen finden Sie unter Erstellen einer Dienst-SAS oder Erstellen einer Konto-SAS.

Hinweis

Eine SAS für die Benutzerdelegierung bietet überragende Sicherheit für eine SAS, die mit dem Speicherkontoschlüssel signiert wird. Microsoft empfiehlt, nach Möglichkeit eine SAS für die Benutzerdelegierung zu verwenden. Weitere Informationen finden Sie unter Gewähren von eingeschränktem Zugriff auf Daten mithilfe von SAS (Shared Access Signature).

In diesem Artikel wird beschrieben, wie Sie den Speicherkontoschlüssel zum Erstellen einer Dienst-SAS für einen Container oder ein Blob mit der Blob Storage-Clientbibliothek für Java verwenden.

Informationen zur Dienst-SAS

Eine Dienst-SAS wird mit dem Kontozugriffsschlüssel signiert. Sie können die StorageSharedKeyCredential-Klasse verwenden, um die Anmeldeinformationen zu erstellen, die zum Signieren der Dienst-SAS verwendet werden.

Sie können auch eine gespeicherte Zugriffsrichtlinie verwenden, um die Berechtigungen und die Dauer der SAS zu definieren. Wenn der Name einer vorhandenen gespeicherten Zugriffsrichtlinie angegeben wird, wird diese Richtlinie der SAS zugewiesen. Weitere Informationen zu gespeicherten Zugriffsrichtlinien finden Sie unter Definieren einer gespeicherten Zugriffsrichtlinie. Die Codebeispiele in diesem Artikel veranschaulichen, wie Berechtigungen und Dauer für die SAS definiert werden, wenn keine gespeicherte Zugriffsrichtlinie bereitgestellt wird.

Erstellen einer Dienst-SAS

Sie können eine Dienst-SAS für einen Container oder Blob basierend auf den Anforderungen Ihrer App erstellen.

Mit folgender Methode können Sie eine Service-SAS zur Benutzerdelegation erstellen, um den begrenzten Zugriff auf eine Container-Ressource zu delegieren:

SAS-Signaturwerte wie Ablaufzeit und signierte Berechtigungen werden als Teil einer BlobServiceSasSignatureValues-Instanz an die Methode übergeben. Berechtigungen werden als BlobContainerSasPermission-Instanz angegeben.

Das folgende Codebeispiel veranschaulicht, wie Sie eine Service-SAS mit Leseberechtigung für eine Container-Ressource erstellen:

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;
}

Verwenden einer Dienst-SAS zum Autorisieren eines Clientobjekts

Sie können ein Dienst-SAS verwenden, um ein Clientobjekt zu autorisieren, um Vorgänge für einen Container oder Blob basierend auf den Berechtigungen auszuführen, die von der SAS gewährt werden.

Die folgenden Codebeispiele zeigen, wie Sie mithilfe der Dienst-SAS ein BlobContainerClient-Objekt autorisieren. Dieses Clientobjekt kann verwendet werden, um Vorgänge für die Containerressource basierend auf den von der SAS erteilten Berechtigungen auszuführen.

Erstellen Sie zuerst ein BlobServiceClient-Objekt, das mit dem Kontozugriffsschlüssel signiert wird:

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

Generieren Sie dann die Dienst-SAS, wie im vorhergehenden Beispiel gezeigt, und verwenden Sie diese SAS zum Generieren eines BlobContainerClient-Objekts:

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

Ressourcen

Weitere Informationen zum Verwenden der Azure Blob Storage-Clientbibliothek für Java finden Sie in den folgenden Ressourcen.

Codebeispiele

Ressourcen zur Clientbibliothek

Weitere Informationen