分享方式:


使用 Java 建立 blob 的服務 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 的 Blob 儲存體用戶端程式庫,建立 blob 的服務 SAS。

關於服務 SAS

服務 SAS 會使用帳戶存取金鑰加以簽署。 您可以使用 StorageSharedKeyCredential 類別,建立用來簽署服務 SAS 的認證。

您也可以使用預存的存取原則來定義 SAS 的權限和持續時間。 如果提供現有預存存取原則的名稱,該原則將與 SAS 相關聯。 若要深入了解預存的存取原則,請參閱定義預存的存取原則。 如果未提供任何預存的存取原則,本文中的程式碼範例會示範如何定義 SAS 的權限和持續時間。

建立 blob 的服務 SAS

您可以使用下列方法來建立服務 SAS,以委派對 blob 資源的有限存取權:

SAS 簽章值 (例如到期時間和已簽署的權限) 會作為 BlobServiceSasSignatureValues 執行個體的一部分傳遞給方法。 權限會指定為 BlobSasPermission 執行個體。

下列程式碼範例示範如何建立具有 blob 資源讀取權限的服務 SAS:

public String createServiceSASBlob(BlobClient blobClient) {
    // 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
    BlobSasPermission sasPermission = new BlobSasPermission()
            .setReadPermission(true);

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

    String sasToken = blobClient.generateSas(sasSignatureValues);
    return sasToken;
}

使用服務 SAS 來授權用戶端物件

下列程式碼範例示範如何使用先前範例中所建立的服務 SAS 來授權 BlobClient 物件。 此用戶端物件可用來根據 SAS 授與的權限,在 Blob 資源上執行作業。

首先,建立以帳戶存取金鑰簽署的 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 來授權 BlobClient 物件:

// Create a SAS token
BlobClient blobClient = blobServiceClient
        .getBlobContainerClient("sample-container")
        .getBlobClient("sample-blob.txt");
String sasToken = createServiceSASBlob(blobClient);

// Create a new BlobClient using the SAS token
BlobClient sasBlobClient = new BlobClientBuilder()
        .endpoint(blobClient.getBlobUrl())
        .sasToken(sasToken)
        .buildClient();

資源

若要深入了解使用適用於 Java 的 Azure Blob 儲存體用戶端程式庫,請參閱下列資源。

用戶端程式庫資源

另請參閱