.NET を使用してアカウント 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) でデータの制限付きアクセスを付与する」を参照してください。

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

アカウント SAS について

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

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

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

アカウント SAS を作成する

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

次のコード例は、新しい AccountSasBuilder オブジェクトを作成し、ToSasQueryParameters メソッドを呼び出してアカウント SAS トークン文字列を取得する方法を示しています。

public static async Task<string> CreateAccountSAS(StorageSharedKeyCredential sharedKey)
{
    // Create a SAS token that's valid for one day
    AccountSasBuilder sasBuilder = new AccountSasBuilder()
    {
        Services = AccountSasServices.Blobs | AccountSasServices.Queues,
        ResourceTypes = AccountSasResourceTypes.Service,
        ExpiresOn = DateTimeOffset.UtcNow.AddDays(1),
        Protocol = SasProtocol.Https
    };

    sasBuilder.SetPermissions(AccountSasPermissions.Read |
        AccountSasPermissions.Write);

    // Use the key to get the SAS token
    string sasToken = sasBuilder.ToSasQueryParameters(sharedKey).ToString();

    return sasToken;
}

クライアントからアカウント SAS を使用する

アカウント SAS を使用して Blob service のサービスレベルの API にアクセスするには、アカウント SAS と、ストレージ アカウントの Blob Storage エンドポイントを使用して BlobServiceClient オブジェクトを作成します。

string accountName = "<storage-account-name>";
string accountKey = "<storage-account-key>";
StorageSharedKeyCredential storageSharedKeyCredential =
    new(accountName, accountKey);

// Create a BlobServiceClient object with the account SAS appended
string blobServiceURI = $"https://{accountName}.blob.core.windows.net";
string sasToken = await CreateAccountSAS(storageSharedKeyCredential);
BlobServiceClient blobServiceClientAccountSAS = new BlobServiceClient(
    new Uri($"{blobServiceURI}?{sasToken}"));

リソース

.NET 用の Azure Blob Storage クライアント ライブラリを使用したアカウント SAS の作成の詳細については、次のリソースを参照してください。

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

関連項目