Azure App Service デプロイをセキュリティで保護する

Azure App Service には、Web アプリ、モバイル アプリ バックエンド、RESTful API、関数アプリを構築、デプロイ、スケーリングできる PaaS (サービスとしてのプラットフォーム) 環境が用意されています。 このサービスをデプロイするときは、セキュリティのベスト プラクティスに従って、アプリケーション、データ、インフラストラクチャを保護することが重要です。

この記事では、Azure App Service デプロイを最適にセキュリティで保護する方法に関するガイダンスを提供します。

Azure App Service は、Azure 仮想マシン (VM)、ストレージ、ネットワーク接続、Web フレームワーク、管理および統合機能など、プラットフォーム コンポーネントを積極的にセキュリティで保護して強化します。 App Service では、次のことを確認するために、継続的かつ厳格なコンプライアンス チェックが実施されます。

  • 各アプリは、他の Azure アプリとリソースから分離されます。
  • VM とランタイム ソフトウェアの定期的な更新により、 新たに検出された脆弱性に対処します。
  • アプリと Azure SQL Database などの他の Azure リソース間のシークレットと接続文字列の通信は、ネットワーク境界を越えずに Azure 内でのみ行われます。 保存されたシークレットは常に暗号化されます。
  • ハイブリッド接続などの App Service 接続機能を介するすべての通信が暗号化されます。
  • Azure PowerShell、Azure CLI、Azure SDK、REST API などのリモート管理ツール経由のすべての接続が暗号化されます。
  • 継続的な脅威管理は、マルウェア、分散型サービス拒否 (DDoS) 攻撃、中間者攻撃、その他の脅威からインフラストラクチャとプラットフォームを保護します。

Azure のインフラストラクチャとプラットフォームのセキュリティの詳細については、 Azure セキュリティ センターを参照してください。

この記事のセキュリティに関する推奨事項では、ゼロ トラストの原則 ("明示的に確認する"、"最小限の特権アクセスを使用する"、"侵害を想定する") が実装されています。 包括的なゼロ トラスト ガイダンスについては、 ゼロ トラスト ガイダンス センターを参照してください。

サービス固有のセキュリティ

Azure App Serviceには独自のセキュリティ上の考慮事項があり、ウェブアプリケーションの全体的なセキュリティを確保するために対処すべきです。

  • 基本認証を無効にする: セキュリティが強化された OAuth 2.0 トークン ベースの認証を提供する Microsoft Entra ID ベースの認証を優先して、FTP および SCM エンドポイントの基本ユーザー名とパスワード認証を無効にします。 詳細については、「Azure App Service デプロイメントにおける基本認証を無効にする」をご覧ください。

  • 安全な FTP/FTPS デプロイ: デプロイに FTP を使用する場合は、FTP アクセスを無効にするか、FTPS 専用モードを適用して、資格情報とコンテンツがクリア テキストで送信されないようにします。 詳細については、FTP/S を使用してアプリを Azure App Service に展開する を参照してください。

  • 完全なネットワーク分離を実現する: App Service Environment を使用して、独自の Azure Virtual Network インスタンス内の専用 App Service Environment 内でアプリを実行します。 この構成により、専用のパブリックエンドポイント、内部のみアクセス用の内部ロードバランサー(ILB)オプション、そして企業レベルの保護のためにウェブアプリケーションファイアウォールの背後にILBを使用できる機能を備えた共有インフラからの完全なネットワーク隔離を提供します。 詳細については、「Azure App Service Environmentsの導入」をご覧ください。

  • DDoS対策を実装する:Azure Front DoorをApp Serviceアプリの前にWeb Application Firewall(WAF)で展開し、ネットワーク層およびアプリケーション層のDDoS攻撃をアプリに到達する前に吸収・フィルタリングします。 詳細については、Azure Front Door および DDoS 保護をご覧ください。

ネットワークのセキュリティ

App Service では、アプリケーションをロックダウンし、承認されていないアクセスを防ぐための多くのネットワーク セキュリティ機能がサポートされています。

  • プライベート エンドポイントを構成する: Azure Private Link を使用して仮想ネットワーク経由で App Service にトラフィックをルーティングし、プライベート ネットワーク内のクライアントのセキュリティで保護された接続を確保することで、パブリック インターネットへの露出を排除します。 詳細については、「Use private endpoints for Azure App Service」をご覧ください。

  • 仮想ネットワーク統合を実装する: パブリック インターネットからの分離を維持しながら、アプリが Azure 仮想ネットワーク内または Azure 仮想ネットワーク経由でリソースにアクセスできるようにすることで、送信トラフィックをセキュリティで保護します。 詳細については、「アプリを Azure 仮想ネットワークと統合する」を参照してください。

  • IP アクセス制限の構成: アプリケーションにアクセスできる IP アドレスとサブネットの許可リストを定義してアプリへのアクセスを制限し、他のすべてのトラフィックをブロックします。 サブネット マスクによって定義された個々の IP アドレスまたは範囲を定義し、Windows アプリ上の web.config ファイルを使用して動的 IP 制限を構成できます。 詳細については、「Azure App Service のアクセス制限を設定する」を参照してください。

  • サービス エンドポイントの制限を設定する: サービス エンドポイントを使用して、仮想ネットワーク内の特定のサブネットからアプリへの受信アクセスをロックダウンします。これは、IP アクセス制限と連携してネットワーク レベルのフィルター処理を提供します。 詳細については、「Azure App Service のアクセス制限」を参照してください。

  • Web アプリケーション ファイアウォールの使用: App Service の前に Web アプリケーション ファイアウォール機能を備えた Azure Front Door または Application Gateway を実装することで、一般的な Web の脆弱性や攻撃に対する保護を強化します。 詳細については、Azure Application Gateway の Azure Web Application Firewall を参照してください。

ID およびアクセス管理

承認されていない使用や潜在的な資格情報の盗難から Azure App Service デプロイをセキュリティで保護するには、ID とアクセス制御を適切に管理することが不可欠です。

  • 送信要求のマネージド ID を有効にする: マネージド ID を使用してコードまたは構成に資格情報を格納することなく、アプリから Azure サービスに対して安全に認証します。サービス プリンシパルと接続文字列を管理する必要はありません。 マネージド ID は、Azure SQL Database、Azure Key Vault、Azure Storage などの他の Azure サービスに送信要求を行うときに、アプリが使用する Microsoft Entra ID の自動マネージド ID を提供します。 App Service では、システム割り当てマネージド ID とユーザー割り当てマネージド ID の両方がサポートされます。 詳細については、「 App Service と Azure Functions のマネージド ID を使用する」を参照してください。

  • 認証と承認の構成: App Service の認証/承認を実装して、Microsoft Entra ID またはその他の ID プロバイダーを使用してアプリケーションをセキュリティで保護し、カスタム認証コードを記述せずに未承認のアクセスを防ぎます。 内蔵の認証モジュールはウェブリクエストを処理し、アプリケーションコードに渡す前に対応し、Microsoft Entra ID、Microsoftアカウント、Facebook、Google、Xなど複数のプロバイダーをサポートしています。詳細は「Azure App Serviceの認証と認可」をご覧ください。

  • 管理操作にロールベースのアクセス制御を実装する: 最小限の特権の原則に従って、必要最小限の Azure RBAC アクセス許可をユーザーとサービス プリンシパルに割り当てることで、App Service リソース (管理プレーン) を管理および構成できるユーザーを制御します。 これは、アプリ作成、設定変更、デプロイ管理などの操作に対する管理者アクセスを制御し、アプリケーションレベルの認証(イージー認証)やアプリからリソースへの認証(管理されたアイデンティティ)とは別に管理します。 詳細は、Azureのウェブおよびモバイル組み込みロールをご覧ください。

  • 代理認証の実装: Microsoft Entra ID を認証プロバイダーとして使用して、ユーザーに代わってリモート リソースへのアクセスを委任します。 App Service アプリは、Microsoft Graph やリモート App Service API アプリなどのサービスへの委任されたサインインを実行できます。 詳細については、「Azure App Service でユーザーをエンドツーエンドで認証および承認する」をご覧ください。

  • 相互 TLS 認証を有効にする: 特に B2B シナリオや内部アプリケーションで、アプリケーションでクライアント ID を確認する必要がある場合は、セキュリティを強化するためにクライアント証明書を必要とします。 詳細については、「Azure App Service のTLS相互認証の設定」をご覧ください。

データ保護

転送中および保存中のデータを保護することは、アプリケーションとそのデータの機密性と整合性を維持するために重要です。

  • HTTPS を適用する: HTTPS 専用モードを有効にして、すべての HTTP トラフィックを HTTPS にリダイレクトします。これにより、クライアントとアプリ間のすべての通信が暗号化されます。 HTTPS専用リダイレクトはデフォルトでは有効にならないので、明示的に有効にしてください。アプリのデフォルトのドメイン名 <app_name>.azurewebsites.net はすでにHTTPS経由でアクセス可能です。 詳細は 「一般設定の設定」をご覧ください。

  • TLS バージョンの構成: 最小 TLS バージョンを 1.2 以上に構成して最新の TLS プロトコルを使用し、潜在的な脆弱性を防ぐために、古くて安全でないプロトコルを無効にします。 App Service では、TLS 1.3 (最新)、TLS 1.2 (既定の最小値)、TLS 1.1/1.0 がサポートされています (下位互換性のみのため)。 Web アプリと SCM サイトの両方の最小 TLS バージョンを構成します。 詳細は 「一般設定の設定」をご覧ください。

  • TLS/SSL 証明書の管理: 適切に構成された TLS/SSL 証明書を使用してカスタム ドメインをセキュリティで保護し、信頼できる接続を確立します。 App Service では、無料の App Service マネージド証明書、App Service 証明書、サード パーティの証明書、Azure Key Vault からインポートされた証明書など、複数の種類の証明書がサポートされています。 カスタム ドメインを構成する場合は、ブラウザーがセキュリティで保護された HTTPS 接続を行えるように、TLS/SSL 証明書を使用してセキュリティで保護します。 詳細については、「 Azure App Service での TLS/SSL 証明書の追加と管理」を参照してください。

  • Key Vault にシークレットを格納する: データベース資格情報、API トークン、秘密キーなどの機密性の高い構成値を保護するには、アプリケーションの設定やコードに格納するのではなく、Azure Key Vault に格納し、マネージド ID を使用してアクセスします。 App Service アプリは、マネージド ID 認証を使用して Key Vault に安全にアクセスできます。 詳細については、App Service と Azure Functions に Key Vault 参照を使用する を参照してください。

  • アプリケーション設定で秘密をハードコーディングするのは避けましょう:コードや設定ファイルに秘密を保存しないでください。 App Serviceはアプリの設定や接続文字列を静止時に暗号化し、プロセスメモリに注入する直前に復号しますが、機密性の高い秘密の場合はKey Vault参照を優先し、秘密は中央管理され、アプリの設定には保存されません。 プログラミング言語の標準パターンを使用して、これらの値に環境変数としてアクセスします。 詳細については、「アプリ設定の構成」を参照してください。

  • セキュリティで保護されたリモート接続: バックエンド リソースで暗号化されていない接続が許可されている場合でも、リモート リソースにアクセスするときは常に暗号化された接続を使用します。 Azure SQL Database や Azure Storage などの Azure リソースの場合、接続は Azure 内に留まり、ネットワーク境界を越えません。 仮想ネットワーク リソースの場合は、ポイント対サイト VPN との仮想ネットワーク統合を使用します。 オンプレミス リソースの場合は、TLS 1.2 でのハイブリッド接続またはサイト間 VPN との仮想ネットワーク統合を使用します。 バックエンドの Azure サービスで、アプリから可能な限り最小の IP アドレス セットのみを許可するようにします。 詳細は「 アウトバウンドIPを探す」をご覧ください。

ログ記録と監視

包括的なログ記録と監視の実装は、潜在的なセキュリティの脅威を検出し、Azure App Service のデプロイに関する問題のトラブルシューティングを行う上で不可欠です。

  • 診断ログを有効にする: Azure App Service 診断ログを構成して、アプリケーション エラー、Web サーバー ログ、失敗した要求トレース、詳細なエラー メッセージを追跡して、セキュリティの問題を特定し、問題をトラブルシューティングします。 詳細については、Azure App Service のアプリの診断ログを有効にするをご覧ください。

  • Azure Monitor と統合する: App Service からログとメトリックを収集して分析するように Azure Monitor を設定し、セキュリティ イベントとパフォーマンスの問題に対する包括的な監視とアラートを有効にします。 詳細については、Azure App Serviceの「Monitor apps」をご覧ください。

  • Application Insights の構成: Application Insights を実装して、リアルタイムの監視と分析機能を使用して、アプリケーションのパフォーマンス、使用パターン、および潜在的なセキュリティの問題に関する詳細な分析情報を取得します。 詳細については、Azure App Service のパフォーマンスの監視に関する記事を参照してください。

  • セキュリティ アラートの設定: カスタム アラートを作成して、異常な使用パターン、潜在的なセキュリティ侵害、または App Service リソースに影響するサービスの中断を通知します。 詳細については、「Azure Monitor を使用してメトリック アラートを作成、表示、管理する」を参照してください。

  • 正常性チェックを有効にする: アプリケーションの運用状態を監視し、可能な場合は問題を自動的に修復するように正常性チェックを構成します。 詳細については、「正常性チェックを使用した App Service インスタンスの監視」を参照してください。

コンプライアンスとガバナンス

Azure App Service アプリケーションの安全な運用には、適切なガバナンスを確立し、関連する標準に準拠することが不可欠です。

  • Azure Policy の実装: コンプライアンス要件を監査および適用する Azure Policy 定義を作成して割り当てることで、App Service デプロイに組織全体のセキュリティ標準を適用します。 詳細については、Azure Policy Regulatory Compliance controls for Azure App Service をご覧ください。

  • セキュリティ推奨事項を確認する:Microsoft Defender for Cloudを活用して、セキュリティの脆弱性や設定ミスを特定し、修正するためにApp Serviceのセキュリティ状況を定期的に評価しましょう。 詳細については、「Azure App ServiceのウェブアプリとAPIを保護する」をご覧ください。

  • セキュリティ評価を実施する:App Serviceアプリケーションの定期的なセキュリティ評価とペネトレーションテストを実施し、アクセス制限、TLS設定、Easy Auth設定の検証を行います。 Microsoftのクラウドペネトレーションテストのルールに従うこと。 詳細については、 ペネトレーションテストをご覧ください。

  • 規制遵守の維持:PCI DSS、HIPAA/HITRUST、ISO 27001などの組み込みの規制遵守ポリシーイニシアチブを割り当て、App Serviceの管理を含んで、特にデータ保護やプライバシーに関する業界や地域の要件に照らしてアプリを監査します。 詳細については、「Azure Policy の規制コンプライアンス」をご覧ください。

  • 安全なDevOpsの実践を実装する:App Serviceへのデプロイのための安全なCI/CDパイプラインを確立し、段階的な検証にデプロイスロットを使用し、SCM/FTPエンドポイントの基本的な認証を無効化し、管理型アイデンティティベースの展開に切り替え、コードスキャンと依存関係チェックを追加しましょう。 詳細については、 デプロイメントのベストプラクティスをご覧ください。

バックアップと回復

Azure App Service デプロイでビジネス継続性とデータ保護を確保するには、堅牢なバックアップと回復のメカニズムを実装することが不可欠です。

  • 自動バックアップを有効にする: 誤って削除、破損、またはその他の障害が発生した場合にアプリケーションとデータを確実に回復できるように、App Service アプリケーションのスケジュールされたバックアップを構成します。 詳細については、Azure App Serviceの「Back up and restore your app」をご覧ください。

  • バックアップリテンション期間を構成する: ビジネス要件とコンプライアンスのニーズに基づいてバックアップに適切な保有期間を設定し、必要な期間にわたって重要なデータが保持されるようにします。 詳細については、Azure App Serviceの「Back up and restore your app」をご覧ください。

  • マルチリージョン展開の実施:重要なアプリケーションを複数のリージョンに展開し、地域障害時の高可用性および災害復旧能力を提供します。 詳細については 、「チュートリアル:App Serviceで高可用性のマルチリージョンアプリを作成する」をご覧ください。

  • バックアップ復元のテスト: バックアップの復元プロセスを定期的にテストして、バックアップが有効であり、必要に応じて正常に復元できることを確認し、アプリケーションの機能とデータの整合性の両方を確認します。 詳細は「 バックアップからアプリを復元する」をご覧ください。

  • 復旧手順を文書化する: 復旧手順に関する包括的なドキュメントを作成して維持し、サービスの中断や災害時の迅速かつ効果的な対応を保証します。 詳細については、「Azure App Service の信頼性」を参照してください。