Erstellen einer Konto-SAS 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 Konto-SAS mit der Azure Storage-Clientbibliothek für Java verwenden.
Informationen zur Konto-SAS
Eine Konto-SAS wird auf der Ebene des Speicherkontos erstellt und mit dem Kontozugriffsschlüssel signiert. Wenn Sie eine Konto-SAS erstellen, können Sie Folgendes ausführen:
- Delegieren Sie den Zugriff auf Vorgänge auf Dienstebene, die derzeit nicht mit einer dienstspezifischen SAS verfügbar sind, z. B. Abrufen von Blob-Diensteigenschaften, Festlegen von Blob-Diensteigenschaften und Abrufen von Blob-Dienststatistiken.
- Delegieren Sie den Zugriff auf mehrere Dienste in einem Speicherkonto gleichzeitig. Beispielsweise können Sie den Zugriff auf Ressourcen in Azure Blob Storage und Azure Files delegieren, indem Sie eine Konto-SAS verwenden.
Gespeicherte Zugriffsrichtlinien werden für Konto-SAS nicht unterstützt.
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.*;
import com.azure.storage.common.sas.AccountSasPermission;
import com.azure.storage.common.sas.AccountSasResourceType;
import com.azure.storage.common.sas.AccountSasService;
import com.azure.storage.common.sas.AccountSasSignatureValues;
Erstellen einer Konto-SAS
Mit der folgenden Methode können Sie eine Konto-SAS erstellen, um eingeschränkten Zugriff auf Speicherkontoressourcen zu delegieren:
Verwenden Sie die folgenden Hilfsklassen, um die Signaturwerte für die Konto-SAS zu konfigurieren:
- AccountSasPermission: Stellt die Berechtigungen dar, die von der SAS zugelassen werden. In unserem Beispiel legen wir die Leseberechtigung auf
true
fest. - AccountSasService: Stellt die Dienste dar, auf die mit der SAS zugegriffen werden kann. In unserem Beispiel lassen wir den Zugriff auf den Blob-Dienst zu.
- AccountSasResourceType: Stellt die Ressourcentypen dar, auf die mit der SAS zugegriffen werden kann. In unserem Beispiel lassen wir den Zugriff auf APIs auf Dienstebene zu.
Sobald die Hilfsklassen konfiguriert worden sind, können Sie mit einer AccountSasSignatureValues-Instanz Parameter für die SAS initialisieren.
Das folgende Codebeispiel zeigt, wie Sie SAS-Parameter konfigurieren und die generateAccountSas-Methode aufrufen können, um die Konto-SAS abzurufen:
public String createAccountSAS(BlobServiceClient blobServiceClient) {
// Configure the SAS parameters
OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);
AccountSasPermission accountSasPermission = new AccountSasPermission()
.setReadPermission(true);
AccountSasService services = new AccountSasService()
.setBlobAccess(true);
AccountSasResourceType resourceTypes = new AccountSasResourceType()
.setService(true);
// Generate the account SAS
AccountSasSignatureValues accountSasValues = new AccountSasSignatureValues(
expiryTime,
accountSasPermission,
services,
resourceTypes);
String sasToken = blobServiceClient.generateAccountSas(accountSasValues);
return sasToken;
}
Verwenden einer Konto-SAS von einem Client
Das folgende Codebeispiel zeigt, wie Sie die im vorherigen Beispiel erstellte Konto-SAS verwenden, um ein BlobServiceClient-Objekt zu autorisieren. Dieses Client-Objekt kann dann verwendet werden, um auf der Grundlage der von der SAS gewährten Berechtigungen auf APIs auf Dienstebene zuzugreifen.
Erstellen Sie zunächst 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 Konto-SAS, wie im vorhergehenden Beispiel gezeigt, und verwenden Sie diese SAS, um ein BlobServiceClient-Objekt zu autorisieren:
// Create a SAS token
String sasToken = createAccountSAS(blobServiceClient);
// Create a new BlobServiceClient using the SAS token
BlobServiceClient sasServiceClient = new BlobServiceClientBuilder()
.endpoint(blobServiceClient.getAccountUrl())
.sasToken(sasToken)
.buildClient();
Sie können auch eine Konto-SAS verwenden, um ein BlobContainerClient-Objekt oder BlobClient-Objekt zu autorisieren und damit zu arbeiten, wenn diesen Ressourcentypen als Teil der Signaturwerte Zugriff gewährt wird.
Ressourcen
Weitere Informationen zum Erstellen einer Konto-SAS mithilfe der Azure Blob Storage-Clientbibliothek für Java finden Sie in den folgenden Ressourcen.