次の方法で共有


Azure App ServiceからAzure サービスとデータベースへの接続をセキュリティで保護する

アプリ サービスは、データベース、ストレージ、別のアプリなどの他のAzure サービスに接続する必要がある場合があります。 この概要では、接続するさまざまな方法と、それらを使用するタイミングを推奨します。

現在、接続アプローチの決定はシークレット管理と密接に関連しています。 ユーザー名とパスワードや、秘密鍵など、接続文字列での接続シークレットの使用の一般的なパターンは、接続の最も安全なアプローチとは見なされなくなりました。 脅威アクターは、誤ってコミットされた接続シークレットのためにパブリック GitHub リポジトリを定期的にクロールするため、リスクはさらに高くなっています。 クラウド アプリケーションの場合、最善のシークレット管理は、シークレットをまったく持たないことです。 Azure App Serviceに移行すると、アプリがシークレットベースの接続で始まる場合があり、App Service を使用するとシークレットを安全に保持できます。 ただし、Azureは、Microsoft Entra認証によってアプリのバックエンド接続をセキュリティで保護するのに役立ちます。これにより、アプリ内のシークレットが完全に排除されます。

接続方法 いつ使用するか
アプリ ID を使って接続する * アプリケーションから資格情報、キー、またはシークレットを完全に削除する必要があります。
* ダウンストリーム Azure サービスでは、Microsoft GraphなどのMicrosoft Entra認証がサポートされます。
* ダウンストリームのリソースで、現在サインインしているユーザーを知る必要も、現在サインインしているユーザーの詳細な認可を行う必要もありません。
サインインしているユーザーに代わって接続をする * アプリは、サインインしているユーザーの代わりにダウンストリームのリソースにアクセスする必要があります。
* ダウンストリーム Azure サービスでは、Microsoft GraphなどのMicrosoft Entra認証がサポートされます。
* ダウンストリームのリソースで、現在サインインしているユーザーの詳細な認可を実行する必要があります。
シークレットを使用して接続する * ダウンストリームのリソースで接続シークレットが必要です。
* アプリは、オンプレミスのデータベース サーバーなど、Azure以外のサービスに接続します。
* ダウンストリーム Azure サービスでは、Microsoft Entra認証はまだサポートされていません。

アプリ ID を使って接続する

アプリで既に 1 つの資格情報セットを使用してダウンストリーム Azure サービスにアクセスしている場合は、代わりにアプリ ID を使用するように接続をすばやく変換できます。 Microsoft Entra IDの管理された ID を使用すると、App Service はシークレットなしでリソースにアクセスでき、ロールベースのアクセス制御 (RBAC) を使用してそのアクセスを管理できます。 マネージド ID は、Microsoft Entra認証をサポートする任意のAzure リソースに接続でき、有効期間の短いトークンを使用して認証が行われます。

次の図は、他のAzure サービスに接続する App Service を示しています。

  • A: ユーザーが Azure App Service の Web サイトにアクセスします。
  • マネージドIDを使用してApp Serviceから別のAzureサービスに安全に接続します。
  • C: マネージド ID を使用してApp Service からMicrosoft Graph へ安全に接続します。

リソースにアクセスするマネージド ID を示す図 (ユーザーの ID がある場合とない場合)。

アプリケーション シークレットを使用してデータベースに接続する例:

サインインしているユーザーに代わって接続をする

アプリでは、サインインしているユーザーに代わって、ダウンストリームのサービスに接続することが必要な場合があります。 App Service を使用すると、最も一般的な ID プロバイダーを使用してユーザーを簡単に認証できます ( Azure App Service および Azure Functionsを参照)。 Microsoft プロバイダー (Microsoft Entra認証) を使用する場合は、サインインしているユーザーを任意のダウンストリーム サービスにフローできます。 次に例を示します。

  • サインインしているユーザーが読み取りを認可されている機密データを返すデータベース クエリを実行します。
  • Microsoft Graphで、個人データを取得するか、サインインしているユーザーとしてアクションを実行します。

次の図は、サインインしているユーザーの代わりに SQL データベースに安全にアクセスするアプリケーションを示しています。

チュートリアルのシナリオを表すアーキテクチャ図。

一般的なシナリオを次に示します。

シークレットを使用して接続する

アプリでシークレットを使用するには、Azure Key Vaultに格納されているシークレットと App Service アプリ設定のシークレットの 2 つの推奨される方法があります。

Key Vaultのシークレットを使用する

Azure Key Vaultを使用して、シークレットとキーを安全に格納し、シークレットのアクセスと使用を監視し、アプリケーション シークレットの管理を簡略化できます。 ダウンストリーム サービスがMicrosoft Entra認証をサポートしていない場合、またはconnection stringまたはキーが必要な場合は、Key Vaultを使用してシークレットを格納し、アプリをマネージド ID でKey Vaultに接続し、シークレットを取得します。 アプリは、アプリ設定でKey Vault参照としてシークレットのKey Vaultにアクセスできます。

Key Vaultと統合されたマネージド ID の利点は次のとおりです。

  • キー コンテナーのシークレットへのアクセスは、アプリに制限されます。
  • アプリの共同作成者 (管理者など) は、App Service リソースを完全に制御できても、同時にキー コンテナーのシークレットにはアクセスできないことがあります。
  • アプリケーション コードが既にアプリ設定を使用して接続シークレットにアクセスしている場合、コードの変更は必要ありません。
  • Key Vaultは、シークレットにアクセスしたユーザーの監視と監査を提供します。
  • キー コンテナーのシークレットをローテーションするとき、App Service で変更する必要ありません。

次の図は、App Service がマネージド ID を使用してKey Vaultに接続し、Key Vaultに格納されているシークレットを使用してAzure サービスにアクセスする方法を示しています。

Diagram は、Key Vault に格納され、マネージド ID で管理されているシークレットを使用して Foundry Tools に接続するアプリ サービスを示しています。

アプリ設定でシークレットを使用する

シークレット (ユーザー名、パスワード、API キーなど) を使ってサービスに接続するアプリの場合、App Service はそれらをアプリ設定に安全に格納できます。 これらのシークレットは、アプリの起動時に環境変数としてアプリケーション コードに挿入されます。 アプリの設定は、格納されるときに常に暗号化されます (保存時の暗号化)。 シークレットのローテーション、アクセス ポリシー、監査履歴など、より高度なシークレット管理を行う場合は、Key Vaultを使用してみてください。

アプリケーション シークレットを使用してデータベースに接続する例: