このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
Shared Access Signature (SAS) を使用すると、ストレージ アカウント内のコンテナーと BLOB への制限付きアクセスを許可できます。 SAS を作成するときに、クライアントがアクセスできる Azure Storage リソース、それらのリソースに対するアクセス許可、SAS の有効期間などの制約を指定します。
すべての SAS はキーによって署名されます。 次の 2 つの方法のいずれかで SAS に署名できます。
注意
ユーザー委任 SAS により、ストレージ アカウント キーで署名された SAS のセキュリティが向上します。 Microsoft では、ユーザー委任 SAS を可能な限り使用することを推奨しています。 詳細については、「Shared Access Signatures (SAS) でデータの制限付きアクセスを付与する」を参照してください。
この記事では、Microsoft Entra の資格情報を使い、.NET 用の Azure Storage クライアント ライブラリを使ってコンテナーまたは BLOB 用のユーザー委任 SAS を作成する方法について説明します。
コンテナーまたは BLOB にアクセスするための SAS トークンは、Microsoft Entra 資格情報またはアカウント キーのいずれかを使用してセキュリティ保護することができます。 Microsoft Entra 資格情報でセキュリティ保護された SAS は、ユーザーの代わりに、SAS に署名するために使用される OAuth 2.0 トークンが要求されるため、ユーザー委任 SAS と呼ばれます。
セキュリティのベスト プラクティスとして、より侵害されやすいアカウント キーを使用するのではなく、可能な限り Microsoft Entra 資格情報を使用することをお勧めします。 アプリケーション設計で Shared Access Signature が必要な場合は、セキュリティを強化するために、Microsoft Entra 資格情報を使用してユーザー委任 SAS を作成してください。 ユーザー委任 SAS の詳細については、「ユーザー委任 SAS を作成する」を参照してください。
注意
有効な SAS を所有するすべてのクライアントは、その SAS で許可されているストレージ アカウントのデータにアクセスできます。 SAS を悪意のある、または意図しない用途から保護することが重要です。 SAS の配布は慎重に行い、侵害された SAS を失効させるための計画を用意しておいてください。
Shared Access Signature の詳細については、「Shared Access Signatures (SAS) を使用して Azure Storage リソースへの制限付きアクセスを許可する」を参照してください。
Microsoft Entra セキュリティ プリンシパルがデータにアクセスしようとする場合、そのセキュリティ プリンシパルはリソースへのアクセス許可を保持している必要があります。 セキュリティ プリンシパルが Azure 内のマネージド ID であるか、開発環境でコードを実行している Microsoft Entra ユーザー アカウントであるかにかかわらず、データへのアクセスを許可する Azure ロールをセキュリティ プリンシパルに割り当てる必要があります。 Azure RBAC によるアクセス許可の割り当てについては、「BLOB データにアクセスするために Azure ロールを割り当てる」を参照してください。
この記事のコード例を使用するには、次の手順に従ってプロジェクトを設定します。
次のパッケージをインストールします。
dotnet add package Azure.Identitydotnet add package Azure.Storage.Blobs
次のusing
ディレクティブを追加します。
using Azure;using Azure.Identity;using Azure.Storage.Blobs;using Azure.Storage.Blobs.Models;using Azure.Storage.Blobs.Specialized;using Azure.Storage.Sas;
Blob Storage への要求を承認するためにコード上で使用できるトークン資格情報を取得するには、DefaultAzureCredential クラスのインスタンスを作成します。 DefaultAzureCredential クラスを使用して、Blob Storage にアクセスするためのマネージド ID を承認する方法の詳細については、.NET 用 Azure ID クライアント ライブラリに関するページを参照してください。
次のコード スニペットでは、認証されたトークン資格情報を取得し、それを使用して Blob ストレージ用のサービス クライアントを作成する方法が示されています。
// Construct the blob endpoint from the account name.string endpoint = $"https://{accountName}.blob.core.windows.net";// Create a blob service client object using DefaultAzureCredentialBlobServiceClient blobServiceClient = new BlobServiceClient( new Uri(endpoint), new DefaultAzureCredential());
.NET SDK を使用してアプリケーションから Blob Storage へのアクセスを承認する方法の詳細については、Azure サービスで .NET アプリケーションを認証する方法に関するページを参照してください。
すべての SAS はキーによって署名されます。 ユーザー委任 SAS を作成するには、まず、SAS に署名するために使用されるユーザー委任キーを要求する必要があります。 ユーザー委任キーは、サービス SAS またはアカウント SAS に署名するために使用されるアカウント キーに似ていますが、Microsoft Entra の資格情報に依存している点が異なります。 クライアントで OAuth 2.0 トークンを使用してユーザー委任キーが要求されると、ユーザーに代わって Blob Storage によってユーザー委任キーが返されます。
ユーザー委任キーを取得したら、そのキーを使用して、キーの有効期間にわたって、任意の数のユーザー委任共有アクセス署名を作成できます。 ユーザー委任キーは、それを取得するために使用された OAuth 2.0 トークンに依存しないため、キーが有効である限り、トークンを更新する必要はありません。 キーが有効である時間の長さを、最大 7 日間まで指定できます。
ユーザー委任キーを要求するには、次のいずれかの方法を使用します。
次のコード例は、ユーザー委任キーを要求する方法を示しています。
public static async Task<UserDelegationKey> RequestUserDelegationKey( BlobServiceClient blobServiceClient){ // Get a user delegation key for the Blob service that's valid for 1 day UserDelegationKey userDelegationKey = await blobServiceClient.GetUserDelegationKeyAsync( DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddDays(1)); return userDelegationKey;}
アプリのニーズに基づいて、コンテナーまたは BLOB 用のユーザー委任 SAS を作成できます。
ユーザー委任キーを取得したら、ユーザー委任 SAS を作成して、コンテナーへの制限付きアクセス権を委任できます。 次のコード例は、コンテナー用のユーザー委任 SAS を作成する方法を示しています。
public static async Task<Uri> CreateUserDelegationSASContainer( BlobContainerClient containerClient, UserDelegationKey userDelegationKey){ // Create a SAS token for the container resource that's also valid for 1 day BlobSasBuilder sasBuilder = new BlobSasBuilder() { BlobContainerName = containerClient.Name, Resource = "c", StartsOn = DateTimeOffset.UtcNow, ExpiresOn = DateTimeOffset.UtcNow.AddDays(1) }; // Specify the necessary permissions sasBuilder.SetPermissions(BlobSasPermissions.Read | BlobSasPermissions.Write); // Add the SAS token to the blob URI BlobUriBuilder uriBuilder = new BlobUriBuilder(containerClient.Uri) { // Specify the user delegation key Sas = sasBuilder.ToSasQueryParameters( userDelegationKey, containerClient.GetParentBlobServiceClient().AccountName) }; return uriBuilder.ToUri();}
ユーザー委任 SAS を使用することで、SAS で付与されたアクセス許可に基づき、コンテナーや BLOB に対する操作を行うクライアント オブジェクトを認可できます。
次のコード例は、ユーザー委任 SAS を使用してBlobContainerClient オブジェクトを認可する方法を示しています。 このクライアント オブジェクトを使用すると、SAS によって付与されたアクセス許可に基づいてコンテナー リソースに対する操作を実行できます。
// Create a Uri object with a user delegation SAS appendedBlobContainerClient containerClient = blobServiceClient .GetBlobContainerClient("sample-container");Uri containerSASURI = await CreateUserDelegationSASContainer(containerClient, userDelegationKey);// Create a container client object with SAS authorizationBlobContainerClient containerClientSAS = new BlobContainerClient(containerSASURI);
.NET 用の Azure Blob Storage クライアント ライブラリを使用したユーザー委任 SAS の作成方法について詳しくは、次のリソースを参照してください。
Azure SDK for .NET には Azure REST API に基づいて構築されたライブラリが含まれるため、使い慣れた .NET パラダイムを通じて REST API 操作を利用できます。 ユーザー委任キーを取得するためのクライアント ライブラリ メソッドでは、次の REST API 操作を使用します。
このページはお役に立ちましたか?
このページはお役に立ちましたか?