共用方式為


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

關於服務 SAS

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

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

建立容器的服務 SAS

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

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

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

public String createServiceSASContainer(BlobContainerClient containerClient) {
    // 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.generateSas(sasSignatureValues);
    return sasToken;
}

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

下列程式碼範例示範如何使用服務 SAS 來授權 BlobContainerClient 物件。 此用戶端物件可依據 SAS 授與的權限,用於在容器資源上執行作業。

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

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

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

資源

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

用戶端程式庫資源

另請參閱