Java を使用して BLOB のサービス 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 用の Blob Storage クライアント ライブラリで BLOB のサービス SAS を作成する方法を示します。

サービス SAS について

サービス SAS は、アカウント アクセス キーを使用して署名されます。 StorageSharedKeyCredential クラスを使用して、サービス SAS の署名に使用される資格情報を作成できます。

また、保存されているアクセス ポリシーを使用して、SAS のアクセス許可と期間を定義することもできます。 既存の保存されているアクセス ポリシーの名前が指定されている場合、そのポリシーは、SAS に関連付けられます。 保存されているアクセス ポリシーの詳細については、「保存されているアクセス ポリシーの定義」を参照してください。 保存されているアクセス ポリシーが指定されていない場合は、この記事のコード例に示されている SAS のアクセス許可と期間を定義する方法を参照してください。

BLOB のサービス SAS を作成する

次のメソッドを使用して、BLOB リソースへの制限付きアクセスを委任するサービス SAS を作成できます。

有効期限や署名付きアクセス許可などの 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 Storage クライアント ライブラリの使用に関する詳細については、次のリソースを参照してください。

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

関連項目