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

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

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

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

アクセス キーの保護

ストレージ アカウント アクセス キーは、ストレージ アカウントの構成とデータへのフル アクセスを提供します。 アクセス キーは常に慎重に保護してください。 キーを安全に管理およびローテーションするには、Azure Key Vault を使用します。 共有キーへのアクセスにより、ストレージ アカウントの構成とそのデータへのフル アクセス権がユーザーに付与されます。 共有キーへのアクセスは慎重に制限し、監視する必要があります。 Microsoft Entra ID ベースの認可を使用できないシナリオでは、アクセス範囲が制限された SAS トークンを使用します。 アクセス キーをハードコーディングしたり、他のユーザーがアクセスできるプレーンテキストで保存したりしないでください。 キーが侵害された可能性があると思われる場合は、キーをローテーションしてください。

重要

Microsoft では、BLOB、キュー、テーブルのデータに対する要求を認可する場合、アカウント キー (共有キー認可) を使うのではなく、可能であれば Microsoft Entra ID を使うことをお勧めします。 Microsoft Entra ID を使った認可によって、共有キー認可よりもセキュリティが向上し、使いやすくなります。 アプリケーションから Microsoft Entra 認可を使う方法について詳しくは、Azure サービスで .NET アプリケーションを認証する方法に関するページを参照してください。 SMB Azure ファイル共有の場合、Microsoft では、オンプレミスの Active Directory Domain Services (AD DS) 統合または Microsoft Entra Kerberos 認証を使用することをお勧めします。

ユーザーが共有キーを使用してストレージ アカウント内のデータにアクセスできないようにするには、ストレージ アカウントに対する共有キーの認可を禁止します。 セキュリティのベスト プラクティスとして、必要最小限の特権でデータに細かくアクセスすることをお勧めします。 OAuth をサポートするシナリオでは、Microsoft Entra ID ベースの認可を使う必要があります。 SMB 経由の Azure Files には Kerberos または SMTP を使用する必要があります。 REST 経由の Azure Files の場合は、SAS トークンを使用できます。 共有キー アクセスは、不注意による使用を防ぐために、必要でない場合は無効にする必要があります。 詳細については、Azure ストレージ アカウントの共有キーによる認可の禁止に関するページを参照してください。

Microsoft Entra の条件付きアクセス ポリシーを使って Azure Storage アカウントを保護するには、ストレージ アカウントに対する共有キー認可を禁止する必要があります。

共有キー アクセスが無効になっていて、診断ログに共有キーの認可が報告されている場合は、ストレージへのアクセスに信頼されたアクセスが使用されていることを示しています。 詳細については、「サブスクリプションに登録されているリソースへの信頼されたアクセス」を参照してください。

接続文字列を保存する

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

  • アカウント キーは、Azure Key Vault に安全に格納できます。 詳細については、「Azure Key Vault のマネージド ストレージ アカウント キーについて」をご覧ください。
  • 接続文字列は、環境変数に保存することができます。
  • アプリケーションでは、app.config ファイルまたは web.config ファイルに接続文字列を保存できます。 この接続文字列は、これらのファイルの AppSettings セクションに追加します。

警告

アカウント アクセス キーまたは接続文字列をクリア テキストに格納すると、セキュリティ上のリスクが発生するためお勧めしません。 アカウント キーを暗号化された形式で保存するか、アプリケーションを移行して、ストレージ アカウントへのアクセスに Microsoft Entra 認可を使用します。

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

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

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

Note

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

エミュレーターでは 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 つは、接続文字列に存在する必要があります。

Note

ベスト プラクティスとして、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

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

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 である必要があります。

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

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

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

21Vianet によって運営される Microsoft Azure 内のストレージ サービスに対する接続文字列の例を以下に示します。

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

共有キーを使用したアクセスの認可

アカウント キーまたは接続文字列を使用して Azure Storage へのアクセスを認可する方法については、次のいずれかの記事を参照してください。

次のステップ