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 を使用してシークレットなしで App Service から Azure データベースに接続する
- チュートリアル: マネージド ID を使用してシークレットなしで .NET App Service から SQL Database に接続する
- チュートリアル: マネージド ID を使用してシークレットなしで Java Tomcat App Service から PostgreSQL SQL Database に接続する
サインインしているユーザーに代わって接続をする
アプリでは、サインインしているユーザーに代わって、ダウンストリームのサービスに接続することが必要な場合があります。 App Service では、最も一般的な ID プロバイダーを使ってユーザーを簡単に認証できます (「Azure App Service および Azure Functions での認証と承認」を参照)。 Microsoft のプロバイダー (Microsoft Entra 認証) を使う場合は、サインインしているユーザーをダウンストリームの任意のサービスにフローできます。 次に例を示します。
- サインインしているユーザーが読み取りを認可されている機密データを返すデータベース クエリを実行します。
- サインインしているユーザーとして Microsoft Graph で個人データを取得するか、アクションを実行します。
次の図は、サインインしているユーザーの代わりに SQL データベースに安全にアクセスするアプリケーションを示しています。
一般的なシナリオを次に示します。
- ユーザーの代わりに Microsoft Graph に接続する
- ユーザーに代わって SQL データベースに接続する
- ユーザーの代わりに別の App Service アプリに接続する
- ダウンストリームのサービスの複数のレイヤーを介してサインインしているユーザーをフローさせる
シークレットを使用して接続する
アプリでシークレットを使う場合に推奨される 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 サービスにアクセスする方法を示しています。
アプリ設定でシークレットを使用する
シークレット (ユーザー名、パスワード、API キーなど) を使ってサービスに接続するアプリの場合、App Service はそれらをアプリ設定に安全に格納できます。 これらのシークレットは、アプリの起動時に環境変数としてアプリケーション コードに挿入されます。 アプリの設定は、格納されるときに常に暗号化されます (保存時の暗号化)。 シークレットのローテーション、アクセス ポリシー、監査履歴など、さらに高度なシークレット管理を行う場合は、Key Vault を使用してしてみてください。
アプリケーション シークレットを使用してデータベースに接続する例:
- チュートリアル: Azure App Service に ASP.NET Core および Azure SQL Database アプリをデプロイする
- チュートリアル: Azure SQL Database を使用して ASP.NET アプリを Azure にデプロイする
- チュートリアル: PHP、MySQL、Redis アプリを Azure App Service にデプロイする
- Azure に Node.js + MongoDB Web アプリをデプロイします
- PostgreSQL を使用した Python (Django または Flask) Web アプリを Azure にデプロイする
- チュートリアル: Azure App Service on Linux と MySQL を使用して Tomcat Web アプリを構築する
- チュートリアル: Azure App Service on Linux と Azure Cosmos DB を使用して Java Spring Boot Web アプリを構築する
次のステップ
具体的には、次の方法を学習します。
- Azure Key Vault にシークレットを安全に格納します。
- マネージド ID を使用してリソースにアクセスします。
- App Service アプリの設定を使用してシークレットを格納します。
- ユーザーとして Microsoft Graph に接続します。
- ユーザーとして SQL データベースに接続します。
- ユーザーとして別の App Service アプリに接続します。
- ユーザーとして別の App Service アプリに接続してから、ダウンストリーム サービスに接続します。