Azure Storage の接続文字列を構成する
接続文字列には、アプリケーションの実行時に共有キーによる承認を使用して Azure Storage アカウント内のデータにアクセスするために必要な承認情報が格納されています。 接続文字列は、次の目的に構成できます。
- Azurite ストレージ エミュレーターに接続します。
- Azure のストレージ アカウントにアクセスする。
- Shared Access Signature (SAS) を介して Azure の特定のリソースにアクセスする。
アカウント アクセス キーを表示し、接続文字列をコピーする方法については、「ストレージ アカウント アクセス キーを管理する」を参照してください。
重要
最適なセキュリティのため、Microsoft では、可能な限り、Microsoft Entra ID とマネージド ID を使って、BLOB、キュー、テーブルのデータに対する要求を認可することをお勧めします。 Microsoft Entra ID とマネージド ID を使った認可によって、共有キー認可よりもセキュリティが向上し、使いやすくなります。 マネージド ID について詳しくは、「Azure リソースのマネージド ID とは」をご覧ください。 .NET アプリケーションでマネージド ID を有効にして使用する方法の例については、.NET での Azure リソースに対する Azure でホストされたアプリの認証に関する記事をご覧ください。
オンプレミス アプリケーションなど、Azure の外部でホストされているリソースの場合は、Azure Arc 経由でマネージド ID を使用できます。たとえば、Azure Arc 対応サーバーで実行されているアプリでは、マネージド ID を使用して Azure サービスに接続できます。 詳細については、「Azure Arc 対応サーバーでの Azure リソースに対して認証を行う」を参照してください。
Microsoft では、Shared Access Signature (SAS) を使うシナリオにはユーザー委任 SAS を使うことをお勧めします。 ユーザー委任 SAS は、アカウント キーの代わりに Microsoft Entra 資格情報で保護されます。 Shared Access Signature について詳しくは、Shared Access Signature によるデータへの制限付きアクセスの許可に関する記事をご覧ください。 .NET でユーザー委任 SAS を作成および使用する方法の例については、「.NET を使用して BLOB 用のユーザー委任 SAS を作成する」を参照してください。
アクセス キーの保護
ストレージ アカウント アクセス キーは、ストレージ アカウントのデータと SAS トークン生成機能へのフル アクセスを提供します。 アクセス キーは常に慎重に保護してください。 キーを安全に管理およびローテーションするには、Azure Key Vault を使用します。 共有キーへのアクセスにより、ストレージ アカウントのデータへのフル アクセスがユーザーに許可されます。 共有キーへのアクセスは慎重に制限し、監視する必要があります。 Microsoft Entra ID ベースの認可を使用できないシナリオでは、アクセス範囲が制限されたユーザー委任 SAS トークンを使用します。 アクセス キーをハードコーディングしたり、他のユーザーがアクセスできるプレーンテキストで保存したりしないでください。 キーが侵害された可能性があると思われる場合は、キーをローテーションしてください。
重要
ユーザーが共有キーを使用してストレージ アカウント内のデータにアクセスできないようにするには、ストレージ アカウントに対する共有キーの認可を禁止します。 セキュリティのベスト プラクティスとして、必要最小限の特権でデータに細かくアクセスすることをお勧めします。 OAuth をサポートするシナリオでは、マネージド ID を使用した Microsoft Entra ID ベースの認可を使う必要があります。 SMB 経由の Azure Files には Kerberos または SMTP を使用する必要があります。 REST 経由の Azure Files の場合は、SAS トークンを使用できます。 共有キー アクセスは、不注意による使用を防ぐために、必要でない場合は無効にする必要があります。 詳細については、Azure ストレージ アカウントの共有キーによる認可の禁止に関するページを参照してください。
Microsoft Entra の条件付きアクセス ポリシーを使って Azure Storage アカウントを保護するには、ストレージ アカウントに対する共有キー認可を禁止する必要があります。
共有キー アクセスが無効になっていて、診断ログに共有キーの認可が報告されている場合は、ストレージへのアクセスに信頼されたアクセスが使用されていることを示しています。 詳細については、Microsoft Entra テナントに登録されているリソースへの信頼されたアクセスに関するページを参照してください。
接続文字列を保存する
アプリケーションは実行時に接続文字列にアクセスして、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&sr=b&si=tutorial-policy-635959936145100803&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&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
明示的なストレージ エンドポイントへの接続文字列を作成する
接続文字列の中で、既定のエンドポイントを使用せずに、明示的なサービス エンドポイントを指定することができます。 明示的なエンドポイントを指定する接続文字列を作成するには、次に示す形式を使用して、プロトコル仕様 (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 へのアクセスを認可する方法については、次のいずれかの記事を参照してください。
- .NET を使用して Blob Storage へのアクセスを認可して接続する
- Java を使用して Blob Storage へのアクセスを認可して接続する
- JavaScript を使用して Blob Storage へのアクセスを承認して接続する
- Python を使用して Blob Storage へのアクセスを承認して接続する