セールス: 1-800-867-1380

Azure ストレージ アカウントへのアクセスの認証

更新日: 2014年11月

Windows Azure ストレージ サービスに対して行うすべての要求は、パブリック コンテナーやその BLOB に対する匿名要求でない限り、認証する必要があります。Windows Azure マネージ ライブラリは、この認証処理を簡略化します。ストレージ サービスに対する要求を認証するには、次の 2 つの方法があります。

  • BLOB サービス、キュー サービス、テーブル サービスのリソースの共有キー認証スキームや共有キー Lite 認証スキームを使用する方法。これらの認証スキームでは、SHA-256 アルゴリズムを使用して計算し、Base64 としてエンコードした HMAC 値を使用します。HMAC は、要求に関連しているフィールドのセットで作成されます。プロトコルの詳細については、「Azure ストレージ サービスの認証」を参照してください。

  • 共有アクセス署名を作成する方法。共有アクセス署名には、安全な方法による URI での認証に必要な資格情報と、アクセスされるリソースのアドレスが組み込まれています。共有アクセス署名には URI での認証に必要なすべてのデータが含まれているので、BLOB サービス、キュー サービス、テーブル サービスのリソースへの制御されたアクセスを許可する際に使用したり、コードから切り離して配布したりできます。プロトコルの詳細については、「共有アクセス署名を使用したアクセスの委任 (REST API)」を参照してください。

上に示したように、コンテナーはパブリックであることを指定できます。この場合、コンテナーとその BLOB に対するすべての読み取り操作は、匿名アクセスで利用できます。匿名要求は認証する必要がないため、ユーザーはアカウントの資格情報を指定しなくても、操作を実行できます。コンテナーと BLOB アクセスの管理の詳細については、「コンテナーと BLOB へのアクセスの制限」を参照してください。

Windows Azure .NET マネージ ライブラリには、ストレージ アカウントへのアクセスを認証するためのキー クラスがいくつか用意されています。

  • CloudStorageAccount クラスは、Windows Azure ストレージ アカウントを表します。

  • StorageCredentials クラスは、要求の認証に使用できる 2 種類の資格情報を格納します。これらの資格情報はストレージ アカウント名とアクセス キーで、これらは、共有キーや共有キー Lite の認証スキームまたは共有アクセス署名を介して要求を認証する際に使用できます。

  • CloudBlobClientCloudQueueClientCloudTableClient クラスには、BLOB サービス、キュー サービス、テーブル サービスのリソース階層へのエントリ ポイントがそれぞれ用意されています。つまり、コンテナーと BLOB を使用するには CloudBlobClient オブジェクト、キューとメッセージを使用するには CloudQueueClient オブジェクト、テーブルとエンティティを使用するには CloudTableClient オブジェクトを作成します。クライアント オブジェクトは、サービス エンドポイントと資格情報のセットを指定することで直接作成できます。または CreateCloudBlobClientCreateCloudQueueClientCreateCloudTableClient のいずれかのメソッドを呼び出して、CloudStorageAccount オブジェクトから作成することもできます。これらのメソッドでは、1 つの資格情報のセットで定義された CloudStorageAccount オブジェクトから、1 つ以上のサービスのクライアント オブジェクトを返すことができます。

    コンテナーや BLOB に匿名でアクセスする場合は、CloudStorageAccount やクライアント オブジェクトを作成する必要がないことに注意してください。匿名アクセスに認証は必要ないので、リソースに直接アクセスできます。匿名アクセスでは、特定の読み取り操作 (HTTP GET を使用) のみがサポートされます。

CloudStorageAccount.DevelopmentStorageAccount プロパティを使用して、既知のストレージ エミュレーター アカウントを参照する CloudStorageAccount オブジェクトを返すことができます。

このプロパティはストレージ エミュレーターのみを使用するコードを記述するときに役立ちますが、ストレージ エミュレーターに対するテストが終了したとき、自分のコードが Windows Azure ストレージ アカウントを指すようにする場合は、接続文字列の使用が必要になることがあります。コードを変更しなくても、接続文字列を迅速に変更してストレージ アカウント間を切り替えることができます。詳細については、「Azure 接続文字列の構成」を参照してください。

コードから Windows Azure ストレージ アカウントにアクセスする最も簡単な方法は、ストレージ アカウント名とアクセス キーを CloudStorageAccount オブジェクトの形式で指定し、HTTP または HTTPS を使用してアカウントにアクセスするかどうかを示して、新しい StorageCredentials オブジェクトを作成することです。この CloudStorageAccount、またはこのオブジェクトの派生オブジェクトのいずれかを介して行われた要求では、認証にこれらのオブジェクトの資格情報を使用します。

この CloudStorageAccount オブジェクトは、ストレージ サービスの既定のエンドポイントを使用します。既定のサービス エンドポイントは、myaccount.blob.core.windows.netmyaccount.queue.core.windows.netmyaccount.table.core.windows.net です。これらの myaccount は、ストレージ アカウントの名前です。

次のコード例では、アカウント名とアクセス キーへの参照を使用して新しい CloudStorageAccount オブジェクトを作成する方法を示します。次に、新しい CloudBlobClient オブジェクトを作成し、その後で新しいコンテナーを作成します。


// Account name and key.  Modify for your account.
string accountName = "myaccount";
string accountKey = "SzlFqgzqhfdk594cFoveYqCyvl8v9EESAnOLcTCeBIo31p46rJJRZx/5vU/oY3ZsK/VdFNaVpm6G8YSD2K48Nw==";

//Get a reference to the storage account, with authentication credentials
StorageCredentials credentials = new StorageCredentials(accountName, accountKey);
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);

//Create a new client object.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve a reference to a container. 
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");

// Create the container if it does not already exist.
container.CreateIfNotExists();

// Output container URI to debug window.
System.Diagnostics.Debug.WriteLine(container.Uri);

サービス エンドポイントを明示的に指定して、ストレージ アカウントにアクセスすることもできます。この方法は次の 2 つのシナリオで役立ちます。

  • 共有アクセス署名を使用してストレージ アカウントにアクセスする場合。

  • ストレージ アカウントのカスタム ドメインを構成しており、それらのカスタム エンドポイントを使用してアカウントにアクセスする場合。カスタム エンドポイントに加え、既定のエンドポイントも引き続き使用できることに注意してください。

共有アクセス署名は、ストレージ アカウント内にあるリソースへの制御されたアクセスを、他のクライアントに許可するための手段です。共有アクセス署名には、アクセスされるリソースに関する情報、付与されるアクセス許可、リソースが使用可能になる間隔、およびコンテナーのアクセス ポリシー (存在している場合) が組み込まれています。認証目的の場合、この情報は、UTF-8 としてエンコードされる署名対象文字列でカプセル化され、署名は HMAC-SHA256 アルゴリズムを使用して作成されます。署名は、クライアントがリソースへのアクセスに使用できるトークンの一部を構成します。たとえば、クライアントは共有アクセス署名を使用して、ストレージ アカウントで BLOB を作成または削除できます。このような操作は、コンテナーが公開とのみマークされている場合は、アクセスできない操作です。共有アクセス署名の詳細については、「共有アクセス署名を使用したアクセスの委任 (REST API)」を参照してください。

関連項目

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました
表示:
© 2014 Microsoft