Freigeben über


Erstellen einer SAS für die Benutzerdelegierung 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 erfahren Sie, wie Sie unter Verwendung von Microsoft Entra-Anmeldeinformationen eine SAS für die Benutzerdelegierung für einen Container oder ein Blob mit der Azure Storage-Clientbibliothek für Java erstellen.

Informationen zur SAS für die Benutzerdelegierung

Ein SAS-Token für den Zugriff auf einen Container oder ein Blob kann entweder mit Azure AD-Anmeldeinformationen oder einem Kontoschlüssel geschützt werden. Eine mit Azure AD-Anmeldeinformationen gesicherte SAS wird als SAS für die Benutzerdelegierung bezeichnet, da das OAuth 2.0-Token, das zum Signieren der SAS verwendet wird, im Namen des Benutzers angefordert wird.

Microsoft empfiehlt als bewährte Methode, nach Möglichkeit Azure AD-Anmeldeinformationen anstelle des Kontoschlüssels zu verwenden, der leichter kompromittiert werden kann. Wenn Ihr Anwendungsentwurf Shared Access Signatures erfordert, verwenden Sie Azure AD-Anmeldeinformationen, um eine SAS für die Benutzerdelegierung zu erstellen und damit die Sicherheit zu erhöhen. Weitere Informationen zur SAS für die Benutzerdelegierung finden Sie unter Erstellen einer SAS für die Benutzerdelegierung.

Achtung

Jeder Client, der über eine gültige SAS verfügt, kann auf Daten in Ihrem Speicherkonto zugreifen, sofern von dieser SAS zugelassen. Es ist wichtig, eine SAS vor böswilliger oder unbeabsichtigter Verwendung zu schützen. Verteilen Sie eine SAS mit Diskretion, und halten Sie einen Plan für den Widerruf einer kompromittierten SAS bereit.

Weitere Informationen zu SAS (Shared Access Signatures) finden Sie unter Gewähren von eingeschränktem Zugriff auf Azure Storage-Ressourcen mithilfe von SAS (Shared Access Signature).

Zuweisen von Azure-Rollen für den Datenzugriff

Wenn ein Microsoft Entra-Sicherheitsprinzipal versucht, auf Daten zuzugreifen, muss dieser Sicherheitsprinzipal über Berechtigungen für die Ressource verfügen. Dem Sicherheitsprinzipal muss eine Azure-Rolle zugewiesen werden, die den Zugriff auf Daten ermöglicht. Dabei spielt es keine Rolle, ob es sich bei dem Sicherheitsprinzipal um eine verwaltete Identität in Azure oder um ein Microsoft Entra-Benutzerkonto handelt, mit dem Code in der Entwicklungsumgebung ausgeführt wird. Weitere Informationen zum Zuweisen von Berechtigungen über die rollenbasierte Zugriffssteuerung in Azure finden Sie unter Zuweisen einer Azure-Rolle für den Zugriff auf Blobdaten.

Einrichten des Projekts

Um mit den Codebeispielen in diesem Abschnitt zu arbeiten, fügen Sie die folgenden Importdirektiven hinzu:

import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import com.azure.storage.blob.sas.*;

Abrufen authentifizierter Tokenanmeldeinformationen

Erstellen Sie eine Instanz der Klasse DefaultAzureCredential, um Tokenanmeldeinformationen abzurufen, die in Ihrem Code zum Autorisieren von Anforderungen für Blob Storage verwendet werden können. Weitere Informationen zur Verwendung der DefaultAzureCredential-Klasse zum Autorisieren einer verwalteten Identität für den Zugriff auf Blob Storage finden Sie unter Azure Identity-Clientbibliothek für Java.

Im folgenden Codeausschnitt sehen Sie, wie Sie die authentifizierten Tokenanmeldeinformationen abrufen und damit einen Dienstclient für Blob Storage erstellen:

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

Weitere Informationen zum Autorisieren des Zugriffs auf Blob Storage von Ihren Anwendungen mit dem Java SDK finden Sie unter Azure-Authentifizierung mit Java und Azure Identity.

Abrufen des Benutzerdelegierungsschlüssels

Jede SAS wird mit einem Schlüssel signiert. Zum Erstellen einer SAS für die Benutzerdelegierung müssen Sie zuerst einen Benutzerdelegierungsschlüssel anfordern, der dann zum Signieren der SAS verwendet wird. Der Benutzerdelegierungsschlüssel ist analog zum Kontoschlüssel, mit dem eine Dienst-SAS oder eine Konto-SAS signiert wird, mit der Ausnahme, dass er auf Ihren Azure AD-Anmeldeinformationen basiert. Wenn ein Client einen Benutzerdelegierungsschlüssel mithilfe eines OAuth 2.0-Tokens anfordert, gibt Blob Storage den Benutzerdelegierungsschlüssel im Namen des Benutzers zurück.

Nachdem Sie den Benutzerdelegierungsschlüssel abgerufen haben, können Sie mit diesem Schlüssel während seiner Lebensdauer eine beliebige Anzahl von Shared Access Signatures (SAS) für die Benutzerdelegierung erstellen. Der Benutzerdelegierungsschlüssel ist unabhängig vom OAuth 2.0-Token, das zum Abrufen des Schlüssels verwendet wird. Daher muss das Token nicht erneuert werden, solange der Schlüssel gültig ist. Sie können angeben, wie lange der Schlüssel gültig bleibt (maximal bis zu sieben Tage).

Fordern Sie den Benutzerdelegierungsschlüssel mit einer der folgenden Methoden an:

Das folgende Codebeispiel veranschaulicht, wie Sie den Benutzerdelegierungsschlüssel anfordern:

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

Erstellen einer SAS für die Benutzerdelegierung

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

Nachdem Sie den Benutzerdelegierungsschlüssel abgerufen haben, können Sie eine SAS für die Benutzerdelegierung erstellen. Mit folgender Methode können Sie von einer BlobContainerClient-Instanz eine SAS zur Benutzerdelegation erstellen, um den begrenzten Zugriff auf eine Containerressource zu delegieren:

Der Benutzerdelegierungsschlüssel zum Signieren der SAS wird zusammen mit den angegebenen Werten für BlobServiceSasSignatureValues dieser Methode übergeben. Berechtigungen werden als BlobContainerSasPermission-Instanz angegeben.

Im folgenden Codebeispiel wird gezeigt, wie Sie eine SAS für die Benutzerdelegierung für einen Container erstellen:

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

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

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

Verwenden einer SAS für die Benutzerdelegierung zum Autorisieren eines Clientobjekts

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

Das folgende Codebeispiel veranschaulicht, wie Sie die im vorherigen Beispiel erstellte SAS zur Benutzerdelegierung verwenden, um ein BlobContainerClient-Objekt zu autorisieren. Dieses Clientobjekt kann verwendet werden, um Vorgänge für die Containerressource basierend auf den von der SAS erteilten Berechtigungen auszuführen.

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

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

Ressourcen

Weitere Informationen zum Erstellen einer SAS für die Benutzerdelegierung mithilfe der Azure Blob Storage-Clientbibliothek für Java finden Sie in den folgenden Ressourcen.

Codebeispiele

REST-API-Vorgänge

Das SDK für Java enthält Bibliotheken, die auf der zugrunde liegenden Azure-REST-API basieren, und ermöglicht Ihnen dadurch die Interaktion mit REST-API-Vorgängen über vertraute Java-Paradigmen. Die Methode zum Abrufen eines Benutzerdelegierungsschlüssels der Clientbibliothek verwendet den folgenden REST-API-Vorgang:

Ressourcen zur Clientbibliothek

Weitere Informationen

  • Dieser Artikel ist Teil des Blob Storage-Entwicklerleitfadens für Java. Weitere Informationen finden Sie in der vollständigen Liste der Entwicklerleitfadenartikel unter Erstellen Ihrer Java-App.