Tworzenie sygnatury dostępu współdzielonego konta przy użyciu języka Java
Sygnatura dostępu współdzielonego (SAS) umożliwia udzielanie ograniczonego dostępu do kontenerów i obiektów blob na koncie magazynu. Podczas tworzenia sygnatury dostępu współdzielonego określasz jego ograniczenia, w tym zasoby usługi Azure Storage, do których może uzyskiwać dostęp klient, jakie uprawnienia mają w tych zasobach i jak długo sygnatura dostępu współdzielonego jest prawidłowa.
Każda sygnatura dostępu współdzielonego jest podpisana przy użyciu klucza. Sygnaturę dostępu współdzielonego można podpisać na jeden z dwóch sposobów:
- Za pomocą klucza utworzonego przy użyciu poświadczeń firmy Microsoft Entra. Sygnatura dostępu współdzielonego podpisana przy użyciu poświadczeń usługi Microsoft Entra to sygnatura dostępu współdzielonego delegowania użytkownika. Klient, który tworzy sygnaturę dostępu współdzielonego delegowania użytkownika, musi mieć przypisaną rolę RBAC platformy Azure obejmującą akcję Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Aby dowiedzieć się więcej, zobacz Tworzenie sygnatury dostępu współdzielonego delegowania użytkownika.
- Przy użyciu klucza konta magazynu. Sygnatura dostępu współdzielonego usługi i sygnatura dostępu współdzielonego konta są podpisane przy użyciu klucza konta magazynu. Klient tworzący sygnaturę dostępu współdzielonego usługi musi mieć bezpośredni dostęp do klucza konta lub mieć przypisane uprawnienie Microsoft.Storage/storageAccounts/listkeys/action . Aby dowiedzieć się więcej, zobacz Tworzenie sygnatury dostępu współdzielonego usługi lub Tworzenie sygnatury dostępu współdzielonego konta.
Uwaga
Sygnatura dostępu współdzielonego delegowania użytkownika zapewnia doskonałe zabezpieczenia sygnatury dostępu współdzielonego podpisanej przy użyciu klucza konta magazynu. Firma Microsoft zaleca używanie sygnatury dostępu współdzielonego delegowania użytkowników, jeśli jest to możliwe. Aby uzyskać więcej informacji, zobacz Udzielanie ograniczonego dostępu do danych za pomocą sygnatur dostępu współdzielonego (SAS).
W tym artykule pokazano, jak za pomocą klucza konta magazynu utworzyć sygnaturę dostępu współdzielonego konta z biblioteką klienta usługi Azure Storage dla języka Java.
Informacje o sygnaturze dostępu współdzielonego konta
Sygnatura dostępu współdzielonego konta jest tworzona na poziomie konta magazynu i jest podpisana przy użyciu klucza dostępu do konta. Tworząc sygnaturę dostępu współdzielonego konta, możesz wykonywać następujące czynności:
- Delegowanie dostępu do operacji na poziomie usługi, które nie są obecnie dostępne w ramach sygnatury dostępu współdzielonego specyficznej dla usługi, takich jak Pobieranie właściwości usługi Blob Service, Ustawianie właściwości usługi Blob Service i Pobieranie statystyk usługi Blob Service.
- Delegowanie dostępu do więcej niż jednej usługi na koncie magazynu jednocześnie. Na przykład można delegować dostęp do zasobów zarówno w usłudze Azure Blob Storage, jak i w usłudze Azure Files przy użyciu sygnatury dostępu współdzielonego konta.
Przechowywane zasady dostępu nie są obsługiwane dla sygnatury dostępu współdzielonego konta.
konfigurowanie projektu
Aby pracować z przykładami kodu w tym artykule, dodaj następujące dyrektywy importu:
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;
Tworzenie sygnatury dostępu współdzielonego konta
Sygnaturę dostępu współdzielonego konta można utworzyć w celu delegowania ograniczonego dostępu do zasobów konta magazynu przy użyciu następującej metody:
Aby skonfigurować wartości sygnatur dla sygnatury dostępu współdzielonego konta, użyj następujących klas pomocnika:
- AccountSasPermission: reprezentuje uprawnienia dozwolone przez sygnaturę dostępu współdzielonego. W naszym przykładzie ustawiliśmy uprawnienie do odczytu na
true
wartość . - AccountSasService: reprezentuje usługi dostępne dla sygnatury dostępu współdzielonego. W naszym przykładzie zezwalamy na dostęp do usługi Blob Service.
- AccountSasResourceType: reprezentuje typy zasobów dostępne dla sygnatury dostępu współdzielonego. W naszym przykładzie zezwalamy na dostęp do interfejsów API na poziomie usługi.
Po skonfigurowaniu klas pomocników można zainicjować parametry sygnatury dostępu współdzielonego przy użyciu wystąpienia AccountSasSignatureValues .
Poniższy przykład kodu pokazuje, jak skonfigurować parametry sygnatury dostępu współdzielonego i wywołać metodę generateAccountSas , aby uzyskać sygnaturę dostępu współdzielonego konta:
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;
}
Używanie sygnatury dostępu współdzielonego konta z klienta
W poniższym przykładzie kodu pokazano, jak użyć sygnatury dostępu współdzielonego konta utworzonej we wcześniejszym przykładzie w celu autoryzowania obiektu BlobServiceClient . Ten obiekt klienta może następnie służyć do uzyskiwania dostępu do interfejsów API na poziomie usługi na podstawie uprawnień przyznanych przez sygnaturę dostępu współdzielonego.
Najpierw utwórz obiekt BlobServiceClient podpisany przy użyciu klucza dostępu do konta:
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();
Następnie wygeneruj sygnaturę dostępu współdzielonego konta, jak pokazano we wcześniejszym przykładzie, i użyj sygnatury dostępu współdzielonego, aby autoryzować obiekt BlobServiceClient :
// 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();
Sygnaturę dostępu współdzielonego konta można również użyć do autoryzowania obiektu BlobContainerClient lub obiektu BlobClient, jeśli te typy zasobów mają dostęp jako część wartości podpisu.
Zasoby
Aby dowiedzieć się więcej na temat tworzenia sygnatury dostępu współdzielonego konta przy użyciu biblioteki klienta usługi Azure Blob Storage dla języka Java, zobacz następujące zasoby.