使用 Java 建立帳戶 SAS
共用存取簽章 (SAS) 可讓您對儲存體帳戶中的容器和 Blob 授與有限的存取權。 當您建立 SAS 時,需要指定其條件約束,包括允許用戶端存取的 Azure 儲存體資源、對這些資源的使用權限,以及 SAS 的有效期限。
每個 SAS 都會以金鑰簽署。 您可以使用下列兩種方式之一簽署 SAS:
- 透過使用 Microsoft Entra 認證建立的金鑰。 使用 Microsoft Entra 認證簽署的 SAS 是一種使用者委派 SAS。 凡建立使用者委派 SAS 的用戶端,都必須被指派包含下列動作的 Azure RBAC 角色:Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey。 若要深入了解,請參閱建立使用者委派 SAS。
- 使用儲存體帳戶金鑰。 服務 SAS 和帳戶 SAS 都使用儲存體帳戶金鑰加以簽署。 凡建立服務 SAS 的用戶端,都必須具備帳戶金鑰的直接存取權,或者被指派 Microsoft.Storage/storageAccounts/listkeys/action 使用權限。 若要深入了解,請參閱建立服務 SAS 或建立帳戶 SAS。
注意
使用者委派 SAS 可以為使用儲存體帳戶金鑰簽署的 SAS 提供絕佳的安全性。 Microsoft 建議盡可能採用使用者委派 SAS。 如需詳細資訊,請參閱使用共用存取簽章 (SAS) 授與資料的有限存取權。
本文說明如何透過適用於 Java 的 Azure 儲存體用戶端程式庫,使用儲存體帳戶金鑰建立帳戶 SAS。
關於帳戶 SAS
帳戶 SAS 會在儲存體帳戶的層級建立,並使用帳戶存取金鑰進行簽署。 透過建立帳戶 SAS,您可以:
- 將存取權委派給目前無法與服務特定 SAS 搭配使用的服務層級作業,例如取得 Blob 服務屬性、設定 Blob 服務屬性,以及取得 Blob 服務統計資料。
- 一次委派對儲存體帳戶中多個服務的存取權。 例如,您可以使用帳戶 SAS 委派存取權,以存取 Azure Blob 儲存體和 Azure 檔案儲存體中的資源。
帳戶 SAS 不支援預存的存取原則。
設定您的專案
若要使用本文中的程式碼範例,請新增下列 import 指示詞:
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;
建立帳戶 SAS
您可以使用下列方法建立帳戶 SAS,以委派對儲存體帳戶資源的有限存取:
若要設定帳戶 SAS 的簽章值,請使用下列協助程式類別:
- AccountSasPermission:代表 SAS 所允許的權限。 在範例中,我們會將讀取權限設定為
true
。 - AccountSasService:代表 SAS 可存取的服務。 在範例中,我們允許對 Blob 服務的存取。
- AccountSasResourceType:代表 SAS 可存取的資源類型。 在範例中,我們允許對服務層級 API 的存取。
設定協助程式類別之後,您可以使用 AccountSasSignatureValues 執行個體來初始化 SAS 的參數。
下列程式碼範例示範如何設定 SAS 參數,並呼叫 generateAccountSas 方法來取得帳戶 SAS:
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;
}
從用戶端使用帳戶 SAS
下列程式碼範例示範如何使用先前範例中所建立的帳戶 SAS,以授權 BlobServiceClient 物件。 然後,此用戶端物件可用來根據 SAS 授與的權限,來存取服務層級 API。
首先,建立以帳戶存取金鑰簽署的 BlobServiceClient 物件:
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();
然後,如同先前範例所示產生帳戶 SAS,並使用 SAS 來授權 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();
如果這些資源類型被授與作為簽章值一部分的存取權,您也可使用帳戶 SAS 來授權及使用 BlobContainerClient 物件或 BlobClient 物件。
資源
若要深入了解如何使用適用於 Java 的 Azure Blob 儲存體用戶端程式庫建立帳戶 SAS,請參閱下列資源。
程式碼範例
用戶端程式庫資源
- 用戶端程式庫參考文件
- 用戶端程式庫原始程式碼
- 套件 (Maven) \(英文\)