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 サイトにアクセスします。
  • B: マネージド 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 データベースに安全にアクセスするアプリケーションを示しています。

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

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

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

アプリでシークレットを使う場合に推奨される 2 つの方法は、Azure Key Vault に格納されているシークレットを使うか、App Service のアプリ設定のシークレットを使うことです。

キー コンテナーのシークレットを使用する

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

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

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

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

Key Vault に格納され、マネージド ID で管理されているシークレットを使って Azure AI サービスに接続するアプリ サービスを示す図。

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

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

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

次のステップ

具体的には、次の方法を学習します。