Java を使用してアカウント SAS を作成する

Shared Access Signature (SAS) を使用すると、ストレージ アカウント内のコンテナーと BLOB への制限付きアクセスを許可できます。 SAS を作成するときに、クライアントがアクセスできる Azure Storage リソース、それらのリソースに対するアクセス許可、SAS の有効期間などの制約を指定します。

すべての SAS はキーによって署名されます。 次の 2 つの方法のいずれかで SAS に署名できます。

  • Microsoft Entra 資格情報を使用して作成されたキーを使用します。 Microsoft Entra の資格情報を使用して署名された SAS は、ユーザー委任 SAS です。 ユーザー委任 SAS を作成するクライアントには、Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを含む Azure RBAC ロールを割り当てる必要があります。 詳細については、「ユーザー委任 SAS の作成」を参照してください。
  • ストレージ アカウント キーを使用する。 サービス SASアカウント SAS は、どちらもストレージ アカウント キーを使用して署名されます。 サービス SAS を作成するクライアントには、アカウント キーへの直接アクセス権を付与するか、Microsoft.Storage/storageAccounts/listkeys/action アクセス許可を割り当てる必要があります。 詳細については、「サービス SAS の作成」または「アカウント SAS の作成」を参照してください。

注意

ユーザー委任 SAS により、ストレージ アカウント キーで署名された SAS のセキュリティが向上します。 Microsoft では、ユーザー委任 SAS を可能な限り使用することを推奨しています。 詳細については、「Shared Access Signatures (SAS) でデータの制限付きアクセスを付与する」を参照してください。

この記事では、ストレージ アカウント キーを使用して、Java 用の Azure Storage クライアント ライブラリでアカウント SAS を作成する方法を示します。

アカウント SAS について

アカウント SAS はストレージ アカウントのレベルで作成され、アカウント アクセス キーで署名されます。 アカウント SAS を作成すると、以下のことができます。

  • Get Blob Service PropertiesSet Blob Service PropertiesGet Blob Service Stats など、サービス固有の SAS では現在使用できないサービス レベルの操作へのアクセスを委任します。
  • ストレージ アカウント内の複数のサービスへのアクセスを一度に委任します。 たとえば、アカウント SAS を使用して、Azure Blob Storage と Azure Files 両方のリソースへのアクセスを委任できます。

保存されているアクセス ポリシーは、アカウント SAS ではサポートされていません。

プロジェクトの設定

この記事のコード例を使用するには、次のインポート ディレクティブを追加します。

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 Storage クライアント ライブラリを使用したアカウント SAS の作成の詳細については、次のリソースを参照してください。

コード サンプル

クライアント ライブラリのリソース

関連項目