Azure Storage の接続文字列を構成する

接続文字列には、アプリケーションの実行時に共有キーによる承認を使用して Azure Storage アカウント内のデータにアクセスするために必要な承認情報が格納されています。 接続文字列は、次の目的に構成できます。

  • Azurite ストレージ エミュレーターに接続します。
  • Azure のストレージ アカウントにアクセスする。
  • Shared Access Signature (SAS) を介して Azure の特定のリソースにアクセスする。

アカウント アクセス キーを表示し、接続文字列をコピーする方法については、「ストレージ アカウント アクセス キーを管理する」を参照してください。

アクセス キーの保護

ストレージ アカウントのアクセス キーは、ストレージ アカウントの root パスワードに似ています。 アクセス キーは常に慎重に保護してください。 キーを安全に管理およびローテーションするには、Azure Key Vault を使用します。 アクセス キーを他のユーザーに配布したり、ハードコーディングしたり、他のユーザーがアクセスできるプレーンテキストで保存したりしないでください。 キーが侵害された可能性があると思われる場合は、キーをローテーションしてください。

注意

BLOB およびキューのデータに対する要求を承認するには、共有キーではなく、可能であれば Azure Active Directory (Azure AD) を使用することをお勧めします。 Azure AD では、共有キーよりも優れたセキュリティと使いやすさが実現されます。 Azure AD を使用したデータへのアクセスの承認の詳細については、「Azure Active Directory を使用して BLOB とキューへのアクセスを承認する」を参照してください。

接続文字列を保存する

アプリケーションは実行時に接続文字列にアクセスして、Azure Storage に対する要求を承認する必要があります。 接続文字列は次の方法で保存できます。

  • 接続文字列は、環境変数に保存することができます。
  • デスクトップまたはデバイスで実行するアプリケーションの場合は、app.config ファイルまたは web.config ファイルに接続文字列を保存できます。 この接続文字列は、これらのファイルの AppSettings セクションに追加します。
  • Azure クラウド サービスで実行するアプリケーションの場合、接続文字列は Azure サービスの構成スキーマ (.cscfg) ファイルに保存できます。 接続文字列をサービス構成ファイルの ConfigurationSettings セクションに追加します。

構成ファイル内に接続文字列を保存すると、接続文字列を簡単に更新して Azurite ストレージ エミュレーターとクラウドの Azure Storage アカウントを切り替えることができます。 必要な作業は、対象となる環境に合わせて接続文字列を編集するだけです。

Microsoft Azure Configuration Manager を使用すると、アプリケーションの実行場所に関係なく、実行時に接続文字列にアクセスできます。

Azurite の接続文字列を構成する

エミュレーターでは、共有キー認証について、単一の固定アカウントと既知の認証キーがサポートされています。 このアカウントとキーのみ、エミュレーターで共有キー資格情報として使用できます。 これらは次のとおりです。

Account name: devstoreaccount1
Account key: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==

注意

エミュレーターでサポートされている認証キーは、クライアント認証コードの機能をテストすることだけを目的としています。 セキュリティ機能は果たしません。 エミュレーターで運用環境のストレージ アカウントとキーを使用することはできません。 開発アカウントを運用データで使用することは避けてください。

エミュレーターでは HTTP 経由の接続のみがサポートされます。 ただし、運用環境の Azure ストレージ アカウント内のリソースにアクセスする際は、HTTPS が推奨されるプロトコルです。

ショートカットを使用してエミュレーター アカウントに接続する

アプリケーションからエミュレーターに接続する最も簡単な方法は、ショートカット UseDevelopmentStorage=true を参照するアプリケーションの構成ファイル内で接続文字列を構成することです。 ショートカットは、エミュレーターの完全な接続文字列に相当します。この接続文字列で、各 Azure Storage サービスのアカウント名、アカウント キー、およびエミュレーター エンドポイントを指定します。

DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;
AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;
BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;
QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;
TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;

次の .NET コード スニペットは、接続文字列を受け取るメソッドからショートカットを使用する方法を示しています。 たとえば、BlobContainerClient (String, String) コンストラクターが接続文字列を受け取ります。

BlobContainerClient blobContainerClient = new BlobContainerClient("UseDevelopmentStorage=true", "sample-container");
blobContainerClient.CreateIfNotExists();

スニペット内のコードを呼び出す前に、エミュレーターが実行されていることを確認します。

Azurite の詳細については、ローカルでの Azure Storage の開発に Azurite エミュレーターを使用する方法に関するページを参照してください。

Azure Storage アカウントの接続文字列を構成する

Azure Storage アカウントへの接続文字列は、次の形式で作成します。 HTTPS (推奨) と HTTP のどちらを使用してストレージ アカウントに接続するかを指定し、myAccountName をストレージ アカウントの名前に、myAccountKey をアカウント アクセス キーに置き換えます。

DefaultEndpointsProtocol=[http|https];AccountName=myAccountName;AccountKey=myAccountKey

たとえば、接続文字列は次のようになります。

DefaultEndpointsProtocol=https;AccountName=storagesample;AccountKey=<account-key>

Azure Storage では、HTTP と HTTPS の両方の接続文字列をサポートします。ただし、"HTTPS の使用を強くお勧めします"。

ヒント

お使いのストレージ アカウントの接続文字列は、Azure Portal に見つかります。 ストレージ アカウントのメニュー ブレードの 設定 > 、アクセス キー の順に移動して、両方のプライマリおよびセカンダリのアクセス キーの接続文字列を確認できます。

Shared Access Signature を使用して接続文字列を作成する

ストレージ アカウント内のリソースへのアクセスを許可する Shared Access Signature (SAS) の URL を所有している場合は、その SAS を接続文字列の中で使用できます。 要求を認証するために必要な情報は SAS に保持されているため、リソースにアクセスするために必要な資格情報、サービス エンドポイント、プロトコルが、SAS を含んだ接続文字列によって得られます。

共有アクセス署名を含む接続文字列を作成するには、文字列を次の形式で指定します。

BlobEndpoint=myBlobEndpoint;
QueueEndpoint=myQueueEndpoint;
TableEndpoint=myTableEndpoint;
FileEndpoint=myFileEndpoint;
SharedAccessSignature=sasToken

サービス エンドポイントはいずれも省略可能ですが、少なくとも 1 つは、接続文字列に存在する必要があります。

注意

ベスト プラクティスとして、SAS は HTTPS と組み合わせて使用することをお勧めします。

構成ファイル内で接続文字列に SAS を指定する場合、URL に含まれる特殊文字のエンコードが必要になる場合があります。

サービス SAS の例

Blob Storage のサービス SAS を含んだ接続文字列の例を次に示します。

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

そしてこちらが、同じ接続文字列に特殊文字のエンコードを適用した例です。

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&amp;sr=b&amp;si=tutorial-policy-635959936145100803&amp;sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

アカウント SAS の例

Blob Storage と File Storage に使用されるアカウントの SAS を含んだ接続文字列の例を次に示します。 両方のサービスのエンドポイントが指定されていることに注意してください。

BlobEndpoint=https://storagesample.blob.core.windows.net;
FileEndpoint=https://storagesample.file.core.windows.net;
SharedAccessSignature=sv=2015-07-08&sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&spr=https&st=2016-04-12T03%3A24%3A31Z&se=2016-04-13T03%3A29%3A31Z&srt=s&ss=bf&sp=rwl

そしてこちらが、同じ接続文字列に URL エンコードを適用した例です。

BlobEndpoint=https://storagesample.blob.core.windows.net;
FileEndpoint=https://storagesample.file.core.windows.net;
SharedAccessSignature=sv=2015-07-08&amp;sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&amp;spr=https&amp;st=2016-04-12T03%3A24%3A31Z&amp;se=2016-04-13T03%3A29%3A31Z&amp;srt=s&amp;ss=bf&amp;sp=rwl

明示的なストレージ エンドポイントへの接続文字列を作成する

接続文字列の中で、既定のエンドポイントを使用せずに、明示的なサービス エンドポイントを指定することができます。 明示的なエンドポイントを指定する接続文字列を作成するには、次に示す形式を使用して、プロトコル仕様 (HTTPS (推奨) または HTTP) を含む完全なサービス エンドポイントをサービスごとに指定します。

DefaultEndpointsProtocol=[http|https];
BlobEndpoint=myBlobEndpoint;
FileEndpoint=myFileEndpoint;
QueueEndpoint=myQueueEndpoint;
TableEndpoint=myTableEndpoint;
AccountName=myAccountName;
AccountKey=myAccountKey

たとえば Blob Storage のエンドポイントをカスタム ドメインにマップしてある場合、明示的なエンドポイントの指定が必要になります。 その場合は、接続文字列で Blob Storage へのカスタム エンドポイントを指定できます。 お使いのアプリケーションが使用している場合は、その他のサービスへの既定のエンドポイントを指定することもできます。

Blob service のエンドポイントを明示的に指定する接続文字列の例を次に示します。

# Blob endpoint only
DefaultEndpointsProtocol=https;
BlobEndpoint=http://www.mydomain.com;
AccountName=storagesample;
AccountKey=<account-key>

この例では、Blob service のカスタム ドメインを含むすべてのサービスへの明示的なエンドポイントを指定します。

# All service endpoints
DefaultEndpointsProtocol=https;
BlobEndpoint=http://www.mydomain.com;
FileEndpoint=https://myaccount.file.core.windows.net;
QueueEndpoint=https://myaccount.queue.core.windows.net;
TableEndpoint=https://myaccount.table.core.windows.net;
AccountName=storagesample;
AccountKey=<account-key>

接続文字列のエンドポイント値を使用することで、ストレージ サービスへの要求 URI が作成され、コードに返される URI の形式が決まります。

カスタム ドメインにストレージ エンドポイントをマッピングし、そのエンドポイントを接続文字列に指定しなかった場合、コードからその接続文字列を使用して、サービスのデータにアクセスすることはできません。

Azure Storage 用にカスタム ドメインを構成する方法の詳細については、「カスタム ドメインを Azure Blob Storage エンドポイントにマップする」を参照してください。

重要

接続文字列のサービス エンドポイントの値は、https://(推奨) や http:// など、整形式の URI である必要があります。

エンドポイント サフィックスを含む接続文字列を作成する

Azure China 21Vianet、Azure Government など、別のエンドポイント サフィックスを持つリージョンまたはインスタンスのストレージ サービスの接続文字列を作成するには、次の接続文字列の形式を使用します。 HTTPS (推奨) または HTTP のどちらでストレージ アカウントに接続するかを示し、myAccountName をストレージ アカウントの名前、myAccountKey をアカウント アクセス キー、mySuffix を URI サフィックスに置き換えます。

DefaultEndpointsProtocol=[http|https];
AccountName=myAccountName;
AccountKey=myAccountKey;
EndpointSuffix=mySuffix;

Azure China 21Vianet のストレージ サービスの接続文字列の例を次に示します。

DefaultEndpointsProtocol=https;
AccountName=storagesample;
AccountKey=<account-key>;
EndpointSuffix=core.chinacloudapi.cn;

接続文字列の解析

.NET 用 Microsoft Azure Configuration Manager ライブラリ には、構成ファイルの接続文字列を解析するためのクラスが用意されています。 CloudConfigurationManager クラスで構成の設定を解析します。 デスクトップ、モバイル デバイス、Azure 仮想マシン、または Azure クラウド サービスで実行されるクライアント アプリケーションの設定を解析します。

CloudConfigurationManager パッケージを参照するには、次の using ディレクティブを追加します。

using Microsoft.Azure; //Namespace for CloudConfigurationManager
using Microsoft.Azure.Storage;

構成ファイルから接続文字列を取得する方法の例を次に示します。

// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

Azure Configuration Manager の使用はオプションです。 また、.NET Framework の ConfigurationManager クラスなどの API を使用することもできます。

次のステップ